基本介绍
Gareth Heyes在2014年首次提出了一种新型攻击手法—RPO(Relative Path Overwrite)相对路径覆盖,该漏洞是一种利用相对URL路径覆盖目标文件的一种攻击手段,其主要依赖于服务器和浏览器的解析差异性并利用前端代码中加载的css/js的相对路径来加载其他文件,最终使得浏览器将服务器返回的不是css/js的文件当做css/js来解析,从而导致XSS,信息泄露等漏洞产生
原理概述
资源定位
资源的定位有相对路径和绝对路径两种方式,其中绝对路径以根目录为起点并完整地指定资源的路径,例如:http://www.example.com/index.html,其中"http://"表示使用的协议类型,"www.example.com"表示目标服务器的主机名称信息,"index.html"表示资源路径,通过这一个URL我们可以直接访问指定的资源,而相对路径并不会直接指定域或协议,它会使用现有的目标来确定协议和域,例如:public/somedirectory,相对URL将查找public并根据当前域名自动包含其前面的域,当下相对URL有两种重要的变化,其中第一种是我们可以使用当前路径并在其中查找一个目录,比如"xyz",第二种是我们可以使用常见的目录遍历技术,比如"../xyz"
下面的样式表使用示例中使用的一个常见的相对URL,其中link元素使用相对URL引用"style.css",具体被引用的文件取决于您在站点目录结构中的位置,它将基于该位置加载样式表,例如:如果您当前在一个名为"xyz"的目录中,那么样式表将会从"xyz/style.css"中加载,同时下面的"echo $_SERVER['PHP_SELF']"输出请求页面的当前URL,这里我