我有用于形成 XPath 查询的输入字段值。 我应该检查输入字符串中的哪些符号以尽量减少 XML 注入(inject)的可能性?
最佳答案
这document详细描述了“Blind XPath Injection”的概念。
它提供了 XPath 注入(inject)的具体示例,并讨论了防止此类注入(inject)的方法。
在“Defending against XPath Injection”一节中说:
"防御 XPath 注入(inject)本质上类似于防御 SQL 注入(inject)。应用程序必须净化用户输入。具体来说,单双 引号字符应该被禁止。这可以在应用程序中完成 本身,或在第三方产品中(例如应用程序防火墙)。 可以通过以下方式轻松测试应用程序对 XPath 注入(inject)的敏感性 注入(inject)单引号或双引号,并检查响应。如果错误有 发生了,那么 XPath 注入(inject)很可能是可能的。”
正如其他人所说,还应该注意轴和//缩写的使用。如果XPath 2.0正在使用,那么 doc
()不应允许函数,因为它可以访问具有已知 URI(或文件名)的任何文档。
建议使用预编译 XPath 表达式但保留它与动态定义的参数或变量一起工作的可能性的 API。然后用户输入将只定义这些参数的内容,而不会被视为对已编译表达式的修改。
关于.net - 如何避免 XML 注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/363190/