MENU

PHP中$_SERVER['PHP_SELF']安全性问题讨论

March 2, 2014 • 技术随笔

今天在写一个过狗一句话的时候,借鉴了法克论坛的思路,使用了$_SERVER['PHP_SELF']来写一句话木马,查阅了PHP的官方手册,因此我简单的讨论一下$_SERVER['PHP_SELF']的安全问题。

PHP中的$_SERVER['PHP_SELF']表示当前正在执行脚本的文件名。

假设我们有如下网址,$_SERVER['PHP_SELF']得到的结果分别为:

http://x95.org/php/ :/php/index.php

http://x95.org/php/index.php :/php/index.php

http://x95.org/php/index.php?test=foo :/php/index.php 

http://x95.org/php/index.php/test/foo :/php/index.php/test/foo

使用$_SERVER['PHP_SELF']的可以方便的获取当前页面的地址。

有些程序员在写提交表单部分习惯这样写:

<form action="<?php echo $_SERVER['PHP_SELF']; ?>">

看上去很便捷,但是其中暗含着一些安全问题。

攻击者提交一个:http://localhost/test.php/"><script>alert('xss攻击')</script><foo

直接造成了一个反射型的xss。

解决$_SERVER[’PHP_SELF’]的安全隐患,主要以下方式:

  1. 使用 htmlentities 函数过滤:
    htmlentities($_SERVER[’PHP_SELF’])来替代简单的$_SERVER[’PHP_SELF’],这样即使网址中包含恶意代码,也会被“转换”为用于显示的html代码
  2. $_SERVER[’REQUEST_URI’]来替代$_SERVER[’PHP_SELF’]

因为$_SERVER[’REQUEST_URI’]会原封不动的反映网址本身,网址中如果有%3C,那么你得到的也将会是%3C,而$ _SERVER[’PHP_SELF’]会对网址进行一次urldecode操作,网址中的%3C将会变成字符“<”,所以就产生了漏洞

参考资料:

http://blog.csdn.net/flyhawk007blog/article/details/2502172

http://www.phplo.com/special/2013/0616/444.html

Archives QR Code
QR Code for this page
Tipping QR Code