我很难弄清楚如何在postgreSQL UPDATE语句中划分文本字段中的任何单引号。如果我考虑以下情况,将'
替换为''
似乎是必要的,它仍然无法正常运行。另外,如果有人在字符串中发送'''
,你会怎么做?
var userid = request.decoded.id;
var incomingString = "Hello I'm a user.";
var newBio = incomingString.replace("'", "''");
pg.connect(process.env.DATABASE_URL, function(err, client, done){
client.query("UPDATE users SET bio = "+newBio+" WHERE user_id = "+userid+"", function(err, result){
done();
if(err){
response.json({message:"err in db input."});
}
else{
response.json({message:"success"});
}
});
});
我应该简单地将上面的SQL语句更改为类似下面的内容吗?这是否解决了SQL注入漏洞并需要转义单引号?
"UPDATE users SET bio = $1 WHERE user_id = $2", [newBio, userid]",
答案 0 :(得分:1)
您不应手动转义SQL特殊字符。
你的第二个例子是对的。使用准备/参数化语句可以消除SQL注入威胁。