Xml 他们在我的现场测试中发现了什么;和1=0]|/*|/*[“0”型)
我发现有人在我的网站上执行了“test”和1=0]|/*|/*/*[“0”)”,这看起来像XPATH,因为我在我的网站上使用XML,但它实际上意味着什么?这是一个尝试递归获取文档中所有节点的方法(Xml 他们在我的现场测试中发现了什么;和1=0]|/*|/*[“0”型),xml,xpath,Xml,Xpath,我发现有人在我的网站上执行了“test”和1=0]|/*|/*/*[“0”)”,这看起来像XPATH,因为我在我的网站上使用XML,但它实际上意味着什么?这是一个尝试递归获取文档中所有节点的方法(/*部分)。要理解发生了什么,最好通过一个示例 假设您动态构造一个XPath表达式,以按用户输入的文本搜索子节点值。您使用的.XML文档: <root> <node> <subnode>value1</subnode>
/*
部分)。要理解发生了什么,最好通过一个示例
假设您动态构造一个XPath表达式,以按用户输入的文本搜索子节点
值。您使用的.XML文档:
<root>
<node>
<subnode>value1</subnode>
<subnode>value2</subnode>
</node>
</root>
价值1
价值2
您有这样一个表达式://node[.=“%s”]
其中%s
是用户输入值的占位符。用户可以输入value1
,这将生成//node[.=“value1”]
表达式,该表达式非常安全,并将返回value1
,好的
但是现在,想象一下,如果用户输入test”和1=0]|//*|//*[“0
query,您将得到//节点[.=“test”和1=0]|//*|//*[“0”]
这在语法上也是正确的,但在这种情况下,用户将获得所有节点,包括根节点
、节点
和子节点
访问用户不应该访问的内容
让我们分解//node[.=“test”和1=0]|//*|//*[“0”]
表达式。攻击者使用test”和1=0]
部分脱离现有条件,并添加1=0
条件使其与任何内容都不匹配|
在XPath中表示“或”。/*
将递归地匹配文档中的每个节点-这就是攻击者的目的所在。需要/*[“0
部分来保持表达式语法正确并平衡引号
有几种方法可以防止这种情况发生,总结如下:
- 清理/验证用户输入。至少可以转义引号
- 使用预编译的XPath表达式:
- 使用参数化XPath表达式: