เป็นไปได้หรือไม่ที่จะป้องกันการแทรก SQL ใน Node.js (โดยเฉพาะอย่างยิ่งกับโมดูล) ในลักษณะเดียวกับที่ PHP มีคำสั่งที่เตรียมไว้ซึ่งป้องกันพวกเขา
ถ้าเป็นเช่นนั้นอย่างไร? หากไม่เป็นเช่นนั้นตัวอย่างใดบ้างที่อาจข้ามรหัสที่ฉันให้ไว้ (ดูด้านล่าง)
บริบทบางส่วน:
ฉันกำลังสร้างเว็บแอปพลิเคชันที่มี back-end stack ซึ่งประกอบด้วย Node.js + MySql โดยใช้โมดูลnode-mysql จากมุมมองด้านการใช้งานโมดูลนี้ยอดเยี่ยมมาก แต่ยังไม่ได้ใช้บางสิ่งที่คล้ายกับคำสั่งเตรียมการของ PHP (แม้ว่าฉันจะทราบว่าเป็นสิ่งที่ต้องทำ )
จากความเข้าใจของฉันการใช้ PHP ของคำสั่งที่เตรียมไว้เหนือสิ่งอื่นใดช่วยอย่างมากในการป้องกันการแทรก SQL อย่างไรก็ตามฉันกังวลว่าแอป node.js ของฉันอาจเปิดรับการโจมตีที่คล้ายกันแม้ว่าจะมีการหลีกเลี่ยงสตริงที่ให้ไว้โดยค่าเริ่มต้นก็ตาม (ดังในข้อมูลโค้ดด้านล่าง)
node-mysql ดูเหมือนจะเป็นตัวเชื่อมต่อ mysql ที่ได้รับความนิยมมากที่สุดสำหรับ node.js ดังนั้นฉันจึงสงสัยว่าคนอื่นอาจทำอะไร (ถ้ามี) เพื่ออธิบายปัญหานี้ - หรือแม้ว่าจะเป็นปัญหากับ node.js ที่จะเริ่มต้นด้วย (ไม่แน่ใจว่าจะไม่เป็นเช่นไรเนื่องจากอินพุตฝั่งผู้ใช้ / ไคลเอ็นต์เกี่ยวข้อง)
ฉันควรเปลี่ยนไปใช้node-mysql-nativeในขณะนี้เนื่องจากมีคำสั่งที่เตรียมไว้หรือไม่ ฉันลังเลที่จะทำสิ่งนี้เพราะดูเหมือนว่าจะไม่ทำงานเท่า node-mysql (แม้ว่านั่นอาจหมายความว่ามันเสร็จสมบูรณ์แล้วก็ตาม)
นี่คือตัวอย่างของรหัสการลงทะเบียนผู้ใช้ซึ่งใช้โมดูลเจลทำความสะอาดพร้อมกับไวยากรณ์คำสั่งคล้ายคำสั่งที่เตรียมไว้ของ node-mysql (ซึ่งตามที่ฉันได้กล่าวไว้ข้างต้นจะทำให้อักขระหลบหนี) เพื่อป้องกันการเขียนสคริปต์ข้ามไซต์และการแทรก sql ตามลำดับ:
// 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?
});