代码之家  ›  专栏  ›  技术社区  ›  Kong

防止Redshift SQL注入

  •  0
  • Kong  · 技术社区  · 11 年前

    我有一个不幸的情况,我必须通过串联字符串来构建SQL字符串——这是经典的SQL注入场景。我 不能 使用准备好的语句。

    如果我逃避 ' 我安全吗?或者还有其他攻击媒介吗?

    我用的是MyBatis ${} 符号(vs #{} 生成准备好的语句)。我有 别无选择 用这个-它必须是 ${} 。我不能使用准备好的语句。

    编辑:

    增加一点清晰度;这是一个 ASW Redshift UNLOAD command 。UNLOAD的第一个参数是SQL字符串。

    2 回复  |  直到 11 年前
        1
  •  1
  •   Craig Ringer    11 年前

    (鉴于Redshift中的限制,您无法以正确的方式进行操作):

    在PostgreSQL上 standard_conforming_strings 设置为 on 全部的 你需要做的是双引号 ' 进入 '' 。就是这样。

    除非 标准_形成_环 关闭或使用 E'' 一串如果这两种情况中的任何一种都是正确的,那么您必须执行反斜杠转义。

    由于Redshift是基于一个古老的PostgreSQL版本的分支,我不知道这是如何适用于它的。阅读关于它的词汇结构和语法的文档将是明智的,以验证它与PostgreSQL的工作方式一致。

        2
  •  1
  •   Basil Bourque    11 年前

    PreparedStatement ( Wikipedia )这才是真正的出路。一下子就消除了大量的工作和风险 SQL Injection 黑客。

    如果你绝对不会使用 编制的报表 ,然后你需要阅读各种策略。您必须编写一系列检查来检查和修改输入和SQL。不 silver bullet (实际上, 编制的报表 你的银弹。但没有 另外 银色子弹。)

    谷歌搜索“清理sql输入”等项目。您将找到以下资源: