3
var user = "hi"; //this info comes from the client in reality
console.log(user); //user

user = client.escape(user); //cient being a Mysql client
console.log(user); //'user'

然后当我插入数据库时​​,单引号仍然存在。当我选择它时,仍然存在......

有没有办法确保客户端不做注入的东西,同时不在数据库中添加单引号?或者至少有一种删除它们的方法,比如 unescape()?

我可以使用user.slice(1,-1),但这似乎不是正确的方法。

注意:我正在使用 Nodejs。

4

1 回答 1

0

所以我猜您正在使用 node-mysql 驱动程序,而您的错误是您尝试查询表单

client.query('SELECT * FROM USERS WHERE userName = ?', user, function(err, result){
    if (err) {
        console.log(err);
    });

并且您的查询错误看起来像

check your syntax around 'user_inputted_username''' on line x

在这种情况下,Andreas Hultgren 有正确的答案;您只是两次转义了该值。我知道是因为他的建议刚刚解决了我的问题,也就是我刚才描述的问题。只需提供未转义的用户输入作为您要转义的参数?和 .query() 为您进行转义。

于 2015-08-21T10:35:00.153 回答