问:XPath注入攻击与SQL注入攻击有什么不同?SQL注入攻击能够缓解防御XPath注入攻击的技术吗?
专家回答:XPath (XML路径语言) 1.0是一种表达语言。许多应用程序根据XML文件的内容使用这种语言进行操作。 一个XML文件可以当作一个数据库,XPath查询用来访问这个文件中的数据。使用XML数据库而不使用传统的数据库的好处包括可移植性、兼容性、重复使用性和结构化表现等。
虽然XPath语言表达的句法与SQL查询在许多方面都有些相似,但是,XPath注入比SQL注入更加危险。当Web应用程序在没有验证用户提供的数据的情况下构建一个XPath查询的时候,XPath注入就可以利用这些应用程序。一个攻击者能够向一个查询注入数据,从而改变其语义。通过嵌入一系列布尔查询(能够产生一个“真”或者“假”值的精心制作的表达方式),攻击者能够重复查看这个文件的全部节点。使用这个技术,甚至一个事先不知道XPath查询的攻击者也能够提取一个完整的XML数据库文件。
大多数数据库都提供了某种形式的访问和权限控制,限制用户访问某些表格、字段或者查询。这种限制一般是限制攻击者访问应用程序的数据库账户。XPath没有为数据库文件提供访问限制,因此,攻击者能够查询这个数据库中的全部XML对象。此外,由于XPath是一种标准的语言,攻击者能够创建一种适用于任何基于XPath的应用程序的自动攻击工具。由于SAL的许多变量,SAL注入攻击必须针对正在被攻击的目标的特定版本的SQL进行客户化。
用来防御SAL注入攻击的措施实际上有助于防御XPath注入攻击。要进行评估,下面是一些可以采取的防御步骤。首先,你的应用程序必须验证和清洁用户输入的全部内容。第二,在你的脚本、数据访问常规性工作和XPath查询使用这个数据之前,你要假设全部数据都来自不可信赖的来源。值得指出的是仅在服务器端进行验证而不在客户端进行验证是没有用的,因为客户端验证很容易被绕过去。遗憾的是没有一个原始的相应的XPath来设置查询的参数。因此,XPath查询不得不使用字符串构造技术。这就使验证用户提供的全部输入内容更为重要。测试你的应用程序是否容易受到XPath注入攻击是容易的。
仅仅在发给你的服务器的数据中增加一个引号,看看是否会出现错误。如果出现了错误,那就表明可能出现了XPath注入攻击。XPath 2.0技术规范目前正在万维网联盟(W3C)批准程序的最后阶段。这个技术规范提供了一套极大地扩展了的功能和能力,但是遗憾的是没有增加安全功能。 |