Apakah mungkin untuk mencegah injeksi SQL di Node.js (sebaiknya dengan modul) dengan cara yang sama seperti PHP telah Mempersiapkan Pernyataan yang melindunginya.
Jika ya, bagaimana caranya? Jika tidak, apa saja contoh yang mungkin mengabaikan kode yang saya berikan (lihat di bawah).
Beberapa Konteks:
Saya membuat aplikasi web dengan back-end stack yang terdiri dari Node.js + MySql menggunakan modul node-mysql . Dari perspektif kegunaan, modul besar, tetapi belum diimplementasikan sesuatu yang mirip dengan PHP Laporan Disiapkan (meskipun aku sadar itu adalah pada todo ).
Dari pemahaman saya, implementasi PHP dari pernyataan yang disiapkan, antara lain, sangat membantu dalam pencegahan injeksi SQL. Saya khawatir, bagaimanapun, bahwa aplikasi node.js saya mungkin terbuka untuk serangan serupa, bahkan dengan string yang keluar disediakan secara default (seperti pada potongan kode di bawah).
node-mysql tampaknya menjadi konektor mysql paling populer untuk node.js, jadi saya bertanya-tanya apa yang mungkin dilakukan orang lain (jika ada) untuk memperhitungkan masalah ini - atau apakah itu bahkan masalah dengan node.js untuk memulai (tidak yakin bagaimana ini tidak terjadi, karena input sisi pengguna / klien terlibat).
Haruskah saya beralih ke node-mysql-native untuk saat ini, karena ini menyediakan pernyataan yang sudah disiapkan? Saya ragu-ragu untuk melakukan ini, karena tampaknya tidak seaktif node-mysql (meskipun itu mungkin berarti sudah selesai).
Berikut adalah potongan kode registrasi pengguna, yang menggunakan modul pembersih , bersama dengan sintaks seperti pernyataan node-mysql yang disiapkan (yang, seperti yang saya sebutkan di atas, melakukan pelolosan karakter), untuk mencegah skrip lintas situs dan injeksi sql, masing-masing:
// 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?
});