在我的node.js无服务器应用程序(aws-lambda函数(中,我使用jsonschema进行了输入验证。
我希望能够避免对服务器端代码进行SQL注入。
是否有使用jsonschema来验证此类案例的选项?
或者,哪种最小正则表达式可以帮助我们检查这种情况?
我将明确声明,使用jsonschema验证JSON文档与SQL注入防御无关。
换句话说,JSON文档可以通过jsonschema验证,但仍然存在SQL注入风险。
这里有一个有效的JSON文档:
{
"film": "Singin' in the Rain",
"year": 1952
}
这将传递一个jsonschema,该jsonschema需要密钥";胶片";以及";年;在对象中。
但是在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(...);