我正在尝试修改服务器端(node.js)上的一个查询,如下所示:
var http = require('http');
var query = "SELECT * FROM Users WHERE Email='Test.User@TestUser.com'";这是硬编码的查询。我正在尝试这样做(email是从HTML文档中的输入文本区域拉入的变量):
var http = require('http');
var query = "SELECT * FROM Users WHERE Email=" + "'" + email + "'";我使用JQuery来处理来自javascript文件的请求:
$.ajax({
url: "http://127.0.0.1:8000/",
type: "POST",
success: function(dataRcvd) {
alert(dataRcvd);
}如果我知道如何做到这一点,我就可以用不同的SQL查询/存储过程动态地更新var query。
发布于 2013-09-27 02:51:57
// server.js
var http = require('http');
function handler(req, res){
console.log('Server got '+req.body.email);
var query = "SELECT * FROM Users WHERE Email=" + "'" + req.body.email + "'";
someAsyncSQLCall(query, function(rows){
res.send(200, rows);
});
};
http.createServer(handler).listen(3000);
//client.js
$.ajax({
url: "http://127.0.0.1:8000/",
type: "POST",
data: {email: 'value' },
success: function(dataRcvd) {
alert(dataRcvd);
}发布于 2013-09-27 07:06:35
这是一个非常糟糕的想法(字符串连接);任何人都可以在您的表单中发布SQL注入攻击,并删除您的数据库或做任何其他邪恶的事情。
我不确定您使用的是哪种数据库,但它们中的大多数都有一种执行参数化查询的方法,可以让您免受此类攻击。
Checkout node-postgres (pg模块),它提供了在使用PostgreSQL的情况下如何执行此操作的示例。
https://stackoverflow.com/questions/19035228
复制相似问题