我有一个应用程序,我希望从前端查询构建器(http://querybuilder.js.org/)接受用户提供的SQL查询。该查询最终需要在postgres数据库中运行以返回数据子集。
上面链接的查询构建器可以导出SQL或mongo查询。我想使用mongo查询是相对安全的,因为我可以简单地在服务器上添加它:
query.owner_of_document = userId
限制结果(限制用户拥有的文件)。
如果有人试图存储恶意的SQL字符串以供执行,那么SQL语句可能会在注入攻击中被劫持。
直接接受来自客户端的SQL错误做法?如何确保提供的SQL安全?
谢谢!
答案 0 :(得分:3)
为什么需要接受整个SQL语句?
您是否只接受参数然后运行预先定义的查询?
关于SQL注入的SO有很多问题/答案,使用参数是避免注入攻击的第一步,例如" Are Parameters really enough to prevent Sql injections?"
但我认为this answer对另一个问题的总结很好:
不要试图自己做安全保护。使用任何值得信赖的行业 标准库可用于您尝试做的事情, 而不是试图自己做。无论你做什么假设 关于安全性,可能是不正确的。尽可能安全 看起来......你有一种风险,你会忽视某些东西并做到你 在安全方面真的想抓住这个机会吗?