如何使用jsonschema来防止sql注入



在我的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(...);

相关内容

  • 没有找到相关文章

最新更新