代码之家  ›  专栏  ›  技术社区  ›  Michael Baranov

如何避免xml注入

  •  6
  • Michael Baranov  · 技术社区  · 17 年前

    我有用于形成xpath查询的输入字段值。 我应该检查输入字符串中的哪些符号,以尽量减少XML注入的可能性?

    6 回复  |  直到 14 年前
        1
  •  7
  •   Dimitre Novatchev    17 年前

    这个 document 详细描述了“盲xpath注入”的概念。

    它提供了xpath注入的具体例子,并讨论了防止这种情况的方法。

    在章节中” 防止xpath注入 “据说:

    防御xpath注入本质上类似于防御sql 注射。应用程序必须清理用户输入。具体来说,单打和双打 不允许使用引号字符。这在应用中也可以做到。 自身,或在第三方产品(如应用防火墙)中。 测试应用程序对XPath注入的敏感性可以很容易地通过 注入单引号或双引号,并检查响应。如果一个错误 发生,则很可能是xpath注入 ."

    正如其他人所说,还应该注意使用轴和//缩写。如果 XPath 2.0 正在使用,然后 doc () 不应允许使用函数,因为它允许访问具有已知uri(或文件名)的任何文档。

    建议使用一个api,该api预编译xpath表达式,但可能使用动态定义的参数或变量。然后,用户输入将只定义这些参数的内容,而不会被视为对已编译表达式的修改。

        2
  •  6
  •   Community Mohan Dere    14 年前

    把你的策略颠倒过来。

    不要试图筛选出不可接受的字符-策略 “除非我知道它不好,否则假设它是好的”

    相反,过滤可接受的字符-策略 “这东西没问题,我想其他东西都不好” .

    在安全方面,采用“默认拒绝”策略,而不是 “默认接受” .

    例如。。。

    …如果你要求某人输入一个搜索词,比如一个人的名字,只输入你希望在名字中找到的字符。

    一种方法是限制在a-z范围内,然后确保你的搜索技术能够识别口音(例如i=195’=195’=195’=195’=195’’等等),尽管这属于非欧洲命名。

    …如果你要的是一个数字,只限于数字,拒绝其他任何东西。

        3
  •  1
  •   Jeff Yates    17 年前

    我将首先考虑对于您的特定用例来说什么是有效的输入,然后看看限制其他一切的方法。如果您有一个固定的输入值范围,我将限制这些值的输入。否则,如果您的用例要求考虑将来,那么您可能需要检查轴修饰符和路径分隔符,例如 : \ .

        4
  •  1
  •   Greg Beech    17 年前

    这取决于您所说的“xml注入”是什么意思。文档中是否有敏感的部分,用户无法看到?或者您是将其作为可写状态打开并允许用户更新文档的部分内容,而这些内容只应允许更新某些部分?

    在基本级别上,要回答您的问题,您需要查找xpath轴操作(例如。 // , / , :: )和通配符( @* , * )最低限度。但我的感觉是,使用用户输入直接构建xpath可能不是最佳解决方案。也许如果你能给我们更多的背景,围绕你想达到的目标,我们可以建议其他的方法?

        5
  •  0
  •   Michael Baranov    17 年前

    关闭此漏洞只是一个修补程序。所以现在实行“违约拒绝”政策太危险了。 我决定检查输入中是否有下列符号[,“,',*,=,{,\,,,空格。我想这可以防止最常见的攻击 谢谢大家的回答!

        6
  •  0
  •   Andres Urena    16 年前

    对输入字符串的验证将很有帮助,也许可以使用类似于正则表达式(类似于^\w+)的东西,基于此,不允许使用特殊字符。

    推荐文章