Node MSSQL - 如何使用内置的 SQL 注入保护
Posted
技术标签:
【中文标题】Node MSSQL - 如何使用内置的 SQL 注入保护【英文标题】:Node MSSQL - How to use the built in SQL injection protection 【发布时间】:2016-08-18 20:04:07 【问题描述】:我正在查看 Node 的 MSSQL 模块中内置的 SQL 注入保护:
https://www.npmjs.com/package/mssql#injection
但我并没有完全了解他们如何为我的查询清理值的示例。我猜request.input('myval', sql.VarChar, '-- commented')
语句会针对被注释掉的其余查询清理“myvar”。
如果我也想针对其他东西进行消毒怎么办?比如drop table语句等。
谁能帮帮我?
【问题讨论】:
凹凸。帮助任何人? :) 为什么还要尝试实施黑名单?这是一场失败的战斗……输入验证应该使用白名单方法来实现。如果您仍然坚持将黑名单作为一种附加防御机制,请不要尝试自己实现,使用 Imperva、F5 或 ModSecurity(免费)等 WAF,或者如果您想实现它在数据库级别,使用数据库防火墙(Sentrigo 或 GreenSQL-hexatier)。 【参考方案1】:刚刚弄清楚如何工作。 request.input()
接受来自mssql docs 的以下三个参数:
input(name, [type], value) 为请求添加输入参数。
参数
name - 不带@字符的输入参数的名称。
type - 输入参数的 SQL 数据类型。如果省略类型,模块 根据 JS 自动决定应该使用哪种 SQL 数据类型 数据类型。
value - 输入参数值。 undefined ans NaN 值是 自动转换为空值。
所以你使用它的方式如下;
let id= 123456
const stmt = 'SELECT * FROM Users WHRE User=@userId'
request.input('userId', sql.Int, id);
request.query(stmt)
注意:
id
是保存我的值的变量,用作request.input(name, type, value)
中的第三个参数。
userId
只是我为将在使用@userId
的sql 语句中使用的变量指定的名称。在request.input()
中,id
值在sql语句中赋值给userId
。
最后sql.Int
只是一种数据类型,用于验证进入userId
的日期。您可以通过在同一文件中导入 sql 来使用它:const sql = require('mssql')
【讨论】:
以上是关于Node MSSQL - 如何使用内置的 SQL 注入保护的主要内容,如果未能解决你的问题,请参考以下文章
是否可以在没有准备好的语句(Node.js 和 MSSQL)的情况下防止 SQL 注入
Node JS、Express、MSSQL、Socket IO
由于 SQL Server 2019 Linux 中的错误,需要 node-mssql GET 请求中的解决方法两语句查询(DECLARE;SELECT)