首页 » 建站技术 » PHP 技术 » 浏览内容
当心$_SERVER[‘PHP_SELF’]的安全漏洞
我们在本页处理提交表单的时候往往习惯于这样写:
看上去没有什么问题,但看看下面的情况你就知道它有多么危险了:
我们假设表单提交页面的名称为foo.php,放到PHP环境中之后,在地址栏这样输入:
会弹出一个JS的alert!很明显这就是一次典型的XSS攻击(跨站攻击),原因在于”>,直接输出了没有进行任何过滤的$_SERVER[‘PHP_SELF’],这个例子的后果还不严重,如果你把这个变量直接保存到数据库,而别人又写了段JS破坏脚本。。。那就不堪设想了。
在手册上是这样解释$_SERVER[‘PHP_SELF’]的:
很明显,$_SERVER[‘PHP_SELF’] 虽然“看起来”是服务器提供的环境变量,但这的确和 $_POST 与 $_GET 一样,是可以被用户篡改的,如果不进行过滤的话,谁知道后果有多严重呢?
解决方案很简单,和以前讲过的安全知识一样,使用 strip_tags、htmlentities 等此类函数过滤或者转义。
htmlentities, htmlspecialchars
htmlspecialchars把某些特殊字符转换成html的编码,常用到的场合可能就是处理客户留言的留言版了。
这些特殊字符仅限于以下几个:
htmlentities跟htmlspecialchars的功能类似,但是htmlentities是对所有HTML定义的entity都不放过,包括各种特殊字符和中文,这样得出来的结果是中文字符部分变为一堆乱码。
htmlspecialchars_decode是htmlspecialchars的逆向过程,把html的编码转换成字符。