提问人:roeygol 提问时间:9/4/2022 最后编辑:roeygol 更新时间:9/6/2022 访问量:352
如何使用jsonschema来防止sql注入?
How to use jsonschema in order to prevent sql injection?
问:
在我的 node.js 无服务器应用程序(aws-lambda 函数)中,我使用 jsonschema 进行了输入验证。
我希望能够避免对服务器端代码进行 SQL 注入。
是否有任何选项可以使用jsonschema来验证这种情况?
或者,哪个最小的正则表达式可以帮助我们检查这种情况?
答:
2赞
Bill Karwin
9/5/2022
#1
我将明确指出,使用 jsonschema 验证 JSON 文档与 SQL 注入防御无关。
换句话说,JSON 文档可以通过 jsonschema 验证,但仍存在 SQL 注入风险。
下面是一个有效的 JSON 文档:
{
"film": "Singin' in the Rain",
"year": 1952
}
这将传递一个 jsonschema,该模式需要对象中的键“film”和“year”。
但是在 SQL 表达式中使用是不安全的,因为“雨中歌唱”中的撇号字符。
假设您要不安全地使用此 JSON 内容,方法是将其直接插值到 SQL 查询字符串中:
// UNSAFE!
var sqlQuery = `INSERT INTO Films SET attributes = '${jsonDocument}'`
这将导致引号不平衡,充其量会导致在执行查询时出现 SQL 语法错误。
INSERT INTO Films SET attributes = '{ "film": "Singin' in the Rain, "year": 1952 }'
^ error
攻击者可能有机会利用它,但它已经足够糟糕了,它会导致语法错误。
大多数 SQL 注入问题的正确解决方案是使用查询参数。将 javascript 变量与 SQL 查询字符串分开。相反,将变量作为参数传递。
// SAFE!
var sqlQuery = `INSERT INTO Films SET attributes = ?`
db.query(sqlQuery, [jsonDocument]).then(...);
评论