来源:自学PHP网 时间:2015-04-17 14:46 作者: 阅读:次
[导读] 现在的web服务器和开发工具虽然不会再出现像asp的%81那样明显的漏洞了,但是由于开发人员的疏忽和各种语言特性组合造成的一些奇异的漏洞仍然会存在。今天偶然读到的XSS Woes,就详细...
现在的web服务器和开发工具虽然不会再出现像asp的%81那样明显的漏洞了,但是由于开发人员的疏忽和各种语言特性组合造成的一些奇异的漏洞仍然会存在。今天偶然读到的XSS Woes,就详细讲述了和$_SERVER[’PHP_SELF’]相关的一个危险漏洞。 $_SERVER[’PHP_SELF’]在开发的时候常会用到,一般用来引用当前网页地址,并且它是系统自动生成的全局变量,也会有什么问题么?让我们先看看下面的代码吧:
<form action=”<?php echo $_SERVER[’PHP_SELF’]; ?>”>
<form action=”/fwolf/temp/test.php/a=1″>
http://www.2cto.com /test.php/%22%3E%3Cscript%3Ealert(’xss’)%3C/script%3E%3Cfoo 通过这种嵌入js代码的方式,攻击者能夠获得512~4k的代码空间,甚至还可以连接外部网站的js代码或者通过image调用来伪装js代码的方 式,那样 js代码的长度就不受限制了,然后通过js,他们可以轻松的获取用户的cookie,或者更改当前页面的任何内容,比如更改表单提交的目的地,更改显示的 内容(比如给一个<a>链接地址增加一个onclick=…的属性,这样用户点击的时候就会执行攻击者指定的代码,甚至连接到并非此链接地址 本身的网站),甚至作出一个ajax效果来也不一定,总之,不要忽视js的威力。 那么,再来看看这个漏洞产生的原理,首先test.php/….这种调用是web服务器允许的,很多cms系统,比如我以前用过的plog,好像也 是采用这种方式,在服务器不支持rewrite的情况下实现诸如http: //…/index.php/archive/999这样的固定网址的(我以前还以为是对404错误页下的手),所以带“/”的地址无法从web服务器上 禁止。然后再看看php中对$_SERVER[’PHP_SELF’]的识别,他就是一个包含当前网址值的全局变量,天知道用户会输入什么样的网站,在上 面的例子中是恶意的,可是在wikipedia这样的网站上,却又是可以正常使用这种方式的地址的。所以,最终的结论要落在开发人员身上了,没有很好的处 理与用户交互的数据。 从安全角度来讲,在开发应用尤其是web应用的时候,所有用户提交的数据都是不安全的,这是基本原则,所以我们才不厌其烦的又是客户端验证又是服务 端验证。从上面说的这个安全漏洞来讲,不安全的内容中又要增加“网址”一条了。要解决$_SERVER [’PHP_SELF’]的安全隐患,主要有以下2种方式:
1、htmlentities
2、REQUEST_URI
_SERVER[”REQUEST_URI”] /fwolf/temp/test.php/%22%3E%3Cscript%3Ealert(’xss’)%3C/script%3E%3Cfoo 另外还有两点需要指出,第一是<form action”">这种写法虽然没有直接用到$_SERVER[’PHP_SELF’],但实际效果却是一样的,只是发生的时间错后到了用户提交之 后的下一个页面,所以,form的action还是不要留空的好。第二点,除了PHP_SELF之外,其他的$_SERVER变量也许也会有类似的漏洞, 比如SCRIPT_URI, SCRIPT_URL, QUERY_STRING, PATH_INFO, PATH_TRANSLATED等等,在使用他们之前一定要先作htmlentities之类的转换。
最后,提供一个地址,里面有很多XSS的例子,可以作为反面教材或者测试工具: |
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com