是否可以接受客户端SQL?如果是这样,如何验证?

时间:2016-10-15 22:27:34

标签: sql mongodb postgresql sql-injection

我有一个应用程序,我希望从前端查询构建器(http://querybuilder.js.org/)接受用户提供的SQL查询。该查询最终需要在postgres数据库中运行以返回数据子集。

上面链接的查询构建器可以导出SQL或mongo查询。我想使用mongo查询是相对安全的,因为我可以简单地在服务器上添加它:

query.owner_of_document = userId

限制结果(限制用户拥有的文件)。

如果有人试图存储恶意的SQL字符串以供执行,那么SQL语句可能会在注入攻击中被劫持。

直接接受来自客户端的SQL错误做法?如何确保提供的SQL安全?

谢谢!

1 个答案:

答案 0 :(得分:3)

为什么需要接受整个SQL语句?

您是否只接受参数然后运行预先定义的查询?

关于SQL注入的SO有很多问题/答案,使用参数是避免注入攻击的第一步,例如" Are Parameters really enough to prevent Sql injections?"

但我认为this answer对另一个问题的总结很好:

  

不要试图自己做安全保护。使用任何值得信赖的行业   标准库可用于您尝试做的事情,   而不是试图自己做。无论你做什么假设   关于安全性,可能是不正确的。尽可能安全   看起来......你有一种风险,你会忽视某些东西并做到你   在安全方面真的想抓住这个机会吗?