0

我正在尝试修改我的服务器端(node.js)上的查询,如下所示:

var http = require('http');
var query = "SELECT * FROM Users WHERE Email='Test.User@TestUser.com'";

这是硬编码的查询。我正在尝试做这样的事情(电子邮件是从 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);
        }

如果我知道如何做到这一点,我可以var query使用不同的 SQL 查询/存储过程动态更新。

4

2 回答 2

0

这是一个非常糟糕的主意(字符串连接);任何人都可以在您的表单中发布 SQL 注入攻击并删除您的数据库或做任何其他恶意的事情。

我不确定您使用的是什么数据库,但它们中的大多数都有一种执行参数化查询的方法,可以使您免受此类攻击的影响。

签出 node-postgres(pg 模块),如果您使用的是 PostgreSQL,其中包含如何执行此操作的示例。

于 2013-09-26T23:06:35.027 回答
0
// 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-26T18:51:56.593 回答