SQL 注入 mssql 节点 .js [重复]

SQL Injection mssql Node.js [duplicate]

提问人:Noob_Programmer 提问时间:6/1/2022 最后编辑:holydragonNoob_Programmer 更新时间:6/1/2022 访问量:251

问:

我正在尝试在我的 Node.js 后端中阻止 SQL 注入。我正在使用 mssql 包,我正在做一些测试,我发现如果参数中有字符,则查询不起作用(显然)。

sql.connect(sqlConfig, function (err) {
    str_query = 'SELECT * FROM table WHERE notes= '+req.query.notes+'';
    if (err) console.log(err);
       
    var request = new sql.Request();

    // query to the database and get the records
    request.query(str_query, function (err, recordset) {
    //here do things 

} 

我怎样才能防止这种情况?

JavaScript 节点 .js SQL-Server SQL 注入

评论

3赞 Thom A 6/1/2022
使用参数化。始终使用参数化。
0赞 GuidoG 6/1/2022
我对 node.js 一无所知,但通常这是通过使用参数而不是构建查询来完成的
0赞 Noob_Programmer 6/1/2022
在新版本中不再起作用 request.input()
0赞 Noob_Programmer 6/1/2022
@Larnu我知道问题是如何在mssql中使用paramter
0赞 Thom A 6/1/2022
这回答了你的问题吗?如何在节点js中将参数传递给mssql查询

答:

0赞 YMH 6/1/2022 #1

这是未经测试的,但这是我的做法。

以下是有关谷歌正在发生的事情的一些信息。

参数化查询强制开发人员首先定义所有 SQL 代码,然后稍后将每个参数传递给查询。这种编码风格允许数据库区分代码和数据,而不管提供什么用户输入。

sql.connect(sqlConfig, function (err) {
    str_query = 'SELECT * FROM table WHERE notes=?';
    if (err) console.log(err);
       
    var request = new sql.Request();

    // query to the database and get the records
    request.query(str_query, [req.query.notes] , function (err, recordset) {
    //here do things 

}