Node.js'de (tercihen bir modülle) SQL enjeksiyonlarını, PHP'nin bunlara karşı korunan Hazırlanmış İfadeler yaptığı gibi önlemek mümkün müdür?
Öyleyse nasıl? Değilse, verdiğim kodu atlayabilecek bazı örnekler nelerdir (aşağıya bakın).
Bazı Bağlamlar:
Node-mysql modülünü kullanarak Node.js + MySql'den oluşan arka uç yığınına sahip bir web uygulaması yapıyorum . Kullanılabilirlik açısından, modül harika, ancak henüz PHP'nin Hazırlanmış İfadelerine benzer bir şey uygulamadı (yine de yapılacak işin üzerinde olduğunun farkındayım ).
Anladığım kadarıyla, PHP'nin hazırlanmış ifadeleri uygulaması, diğer şeylerin yanı sıra, SQL enjeksiyonlarının önlenmesine büyük ölçüde yardımcı oldu . Yine de, node.js uygulamamın, varsayılan olarak sağlanan dizge kaçışıyla bile (aşağıdaki kod parçacığında olduğu gibi) benzer saldırılara açık olabileceğinden endişeleniyorum .
node-mysql, node.js için en popüler mysql bağlayıcısı gibi görünüyor, bu yüzden başkalarının bu sorunu hesaba katmak için (varsa) ne yaptığını merak ediyordum - ya da başlamak için node.js ile ilgili bir sorun olup olmadığını merak ediyordum. (kullanıcı / istemci tarafı girişi dahil olduğundan bunun nasıl olmayacağından emin değilim).
Ben geçiş Should düğüm-mysql-yerli hazırladığı ifadeleri sağlamaz, çünkü zaman varlık için? Bunu yapmakta tereddüt ediyorum, çünkü node-mysql kadar aktif görünmüyor (ancak bu sadece tamamlandığı anlamına gelebilir).
Sırasıyla siteler arası komut dosyası yazmayı ve sql enjeksiyonlarını önlemek için node-mysql'nin hazırlanmış deyim benzeri sözdizimi (yukarıda bahsettiğim gibi karakter kaçması yapar) ile birlikte dezenfektan modülünü kullanan bir kullanıcı kayıt kodu pasajı :
// Prevent xss
var clean_user = sanitizer.sanitize(username);
// assume password is hashed already
var post = {Username: clean_user, Password: hash};
// This just uses connection.escape() underneath
var query = connection.query('INSERT INTO users SET ?', post,
function(err, results)
{
// Can a Sql injection happen here?
});