Đừng làm điều đó
Bạn đang hỏi về giải pháp sai cho vấn đề.
Để thay thế các dấu nháy đơn bằng dấu gạch chéo ngược, bạn có thể sử dụng:
str = msg.replace(/'/g, '\\\'');
nhưng bạn không nên làm điều đó . Tôi chỉ cung cấp thông tin đó vì đó là những gì câu hỏi của bạn đặt ra nhưng hãy đọc phần bên dưới.
Tại sao đó là một ý tưởng tồi
Bạn không nên làm điều đó ở phía máy khách và bạn cũng không nên làm ở phía máy chủ. Nếu việc tránh các lỗ hổng SQL injection là một vấn đề đơn giản của việc thay thế dấu nháy đơn bằng dấu nháy ngược-dấu nháy đơn thì đó sẽ không phải là vấn đề. Thật không may, nó phức tạp hơn.
Có thông tin mà bạn đã cung cấp, thậm chí không thể biết được liệu dấu gạch chéo ngược-dấu nháy đơn có thực hiện những gì bạn mong đợi ngay từ đầu mà không thấy mã của bạn thực sự tạo ra các truy vấn cơ sở dữ liệu hay không. Nhưng nó không quan trọng bởi vì bạn không bao giờ nên làm điều đó. Không bao giờ. Hãy xem những câu trả lời đó để biết lý do tại sao - những câu hỏi đó không phải về SQL injection mà là các ví dụ mã bao gồm các lỗ hổng SQL injection và câu trả lời giải thích điều đó:
- không thể sử dụng biểu tượng nền khi sử dụng nodejs 7.3.0
- Nút js - Cảnh báo từ chối lời hứa khi xử lý nhiều dữ liệu
- Có thể lắng nghe việc khởi tạo đối tượng trong Node.js không?
Truyện tranh bắt buộc
Thay vào đó, bạn nên làm gì
Điều đó đã được nói, bạn không cho biết bạn đang sử dụng mô-đun nào để truy vấn cơ sở dữ liệu nhưng không có vấn đề gì nếu bạn đang sử dụng mysql
mô-đun hoặc Sequelize hoặc bất cứ thứ gì đáng giá, luôn phải có cơ chế nội suy các biến theo cách an toàn mà không cần thoát và nối các chuỗi theo cách thủ công.
Ví dụ
Bạn đã không hiển thị dù chỉ một dòng mã có liên quan ở đây vì vậy tôi không thể cho bạn biết cách khắc phục nó nhưng hãy xem xét ví dụ sau:
Không an toàn:
connection.query(
"SELECT * FROM player WHERE nick = '"
+ data.login + "' AND pass = '" + data.pass + "'",
function (err, rows) {
//...
}
);
Vẫn không an toàn, phức tạp, không thể đọc được, không thể hiểu được và không đáng tin cậy:
connection.query(
"SELECT * FROM player WHERE nick = '"
+ data.login.replace(/'/g, '\\\'') + "' AND pass = '" + data.pass.replace(/'/g, '\\\'') + "'",
function (err, rows) {
//...
}
);
An toàn và đơn giản:
connection.query(
"SELECT * FROM player WHERE nick = ? AND pass = ?", [data.login, data.pass],
function (err, rows) {
// ...
}
);
Thông tin thêm
Để biết thêm thông tin, hãy xem tài liệu: