Node MSSQL - 如何使用内置的 SQL 注入保护

Pet*_*ter 6 sql-server sql-injection node.js

我正在研究 Node 的 MSSQL 模块中内置的 SQL 注入保护:

https://www.npmjs.com/package/mssql#injection

但我并没有完全理解他们如何清理查询值的示例。我猜想该request.input('myval', sql.VarChar, '-- commented')语句会针对被注释掉的查询的其余部分清理“myvar”。

如果我还想对其他东西进行消毒怎么办?比如drop table语句等。

有人可以帮我吗?

Cod*_*Hat 4

刚刚弄清楚如何工作。接受来自mssql 文档request.input()的以下三个参数:

input(name, [type], value) 向请求添加输入参数。

论据

name - 不带@char的输入参数的名称。

type - 输入参数的 SQL 数据类型。如果省略 type,模块会根据 JS 数据类型自动决定使用哪种 SQL 数据类型。

value - 输入参数值。未定义的 ans NaN 值会自动转换为空值。

所以你使用它的方式如下;

let id= 123456
const stmt = 'SELECT * FROM Users WHRE User=@userId'
request.input('userId', sql.Int, id);
request.query(stmt)
Run Code Online (Sandbox Code Playgroud)

注意:

  • id是保存我的值的变量,用作 中的第三个参数request.input(name, type, value)
  • userId只是我为将在 sql 语句中使用的变量指定的名称@userId。在 中request.input()id值被分配给userIdsql 语句中。
  • 最后sql.Int只是一个数据类型,将用于验证进入的日期userId。您可以通过在同一文件中导入 sql 来使用它:const sql = require('mssql')