|
XPath注入——操纵XML数据查询 摘要:XPath是查询XML文档的语言。当Web应用使用用户输入动态构造XPath表达式时,黑客可注入XPath语句,绕过权限、读取任意节点或遍历整个XML文档。本文讲解XPath注入的原理,比较其与SQL注入的异同,并提供参数化查询、输入过滤等防御。 关键词:黑客网站攻击;XPath注入;渗透测试;XML安全;数据泄露 一、引言XML仍广泛用于配置文件、SOAP服务和旧系统中。XPath注入允许攻击者绕过身份验证,获取原本无权查看的敏感XML数据,如密码、角色信息。这种黑客手段虽然不如SQL注入普遍,但在特定场景下极为致命。 二、XPath注入原理2.1 示例场景XML存储用户: [size=12.573px]xml
<users> <user><name>admin</name><password>admin123</password><role>admin</role></user> <user><name>guest</name><password>guest</password><role>guest</role></user></users>
登录查询代码: [size=12.573px]php
$query = "/users/user[name/text()='".$username."' and password/text()='".$password."']";
输入用户名 ' or '1'='1 ,密码任意,查询变成:
/users/user[name/text()='' or '1'='1' and password/text()='xxx'],条件永远为真,返回第一个用户(admin)。 2.2 与SQL注入的区别三、渗透测试利用四、防御措施参数化XPath:一些库(如Saxon)支持变量绑定。 输入过滤:删除单引号、双引号、|、[、] 等特殊字符。 使用XQuery:XQuery支持参数化,更安全。 避免动态拼接:对用户输入进行编码,将单引号转义为两个单引号。
五、总结XPath注入危害较大,防御与SQL注入类似,但更简单直接:不要拼接用户输入到XPath表达式,或者严格过滤特殊字符。
|