【问题标题】:Is it ever okay to accept client-side SQL? If so, how to validate?可以接受客户端 SQL 吗?如果是,如何验证?
【发布时间】:2017-02-25 04:01:31
【问题描述】:

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

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

query.owner_of_document = userId

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

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

直接从客户端接受 SQL 是不好的做法吗?如何确保提供的 SQL 是安全的?

谢谢!

【问题讨论】:

  • 尝试定义 safe,你会发现在 SQL 中很难确定(想想常见的表表达式、子选择等)

标签: sql mongodb postgresql sql-injection


【解决方案1】:

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

你可以只接受参数然后运行预定义的查询吗?

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

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

不要试图自己做安全。使用任何值得信赖的行业 那里的标准库可用于您正在尝试做的事情, 而不是自己尝试去做。无论你做出什么假设 关于安全性,可能是不正确的。与您自己的方法一样安全 看...有风险你忽略了一些东西,你呢? 真的想在安全方面抓住这个机会吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-30
    • 1970-01-01
    • 2018-08-09
    • 1970-01-01
    • 2021-10-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多