PHP 使用 $_SERVER['PHP_SELF'] 获取当前页面地址及其安全性问题
2016-10-31 11:46
686 查看
PHP $_SERVER['PHP_SELF'] $_SERVER['PHP_SELF'] 表示当前 php 文件相对于网站根目录的位置地址,与 document root 相关。 假设我们有如下网址,$_SERVER['PHP_SELF']得到的结果分别为: http://www.5idev.com/php/ :/php/index.php http://www.5idev.com/php/index.php :/php/index.php http://www.5idev.com/php/index.php?test=foo :/php/index.php http://www.5idev.com/php/index.php/test/foo :/php/index.php/test/foo 因此,可以使用 $_SERVER['PHP_SELF'] 很方便的获取当前页面的地址: $url = "http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']; 以上面的地址为例,得到的结果如下: http://www.5idev.com/php/index.php 上面是简单获取 http 协议的当前页面 URL ,只是要注意该地址是不包含 URL 中请求的参数(?及后面的字串)的。如果希望得到包含请求参数的完整 URL 地址,请使用 $_SERVER['REQUEST_URI'] 。 PHP $_SERVER['PHP_SELF'] 安全性 由于利用 $_SERVER['PHP_SELF'] 可以很方便的获取当前页面地址,因此一些程序员在提交表单数据到当前页面进行处理时,往往喜欢使用如下这种方式: <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>"> 假设该页面地址为: http://www.5idev.com/php/index.php 访问该页面,得到的表单 html 代码如下: <form method="post" action="/php/index.php"> 这段代码是正确的,但是当访问地址变成: http://www.5idev.com/php/index.php/test/foo 页面正常执行了,表单 html 代码变成: <form method="post" action="/php/index.php/test/foo"> 显然这段代码不是我们期望的,***者可以在 URL 后面随意加上***代码。要解决该问题,可以: 使用 htmlentities($_SERVER['PHP_SELF']) 替代 $_SERVER['PHP_SELF'],让 URL 中可能的恶意代码转换为用于显示的 html 代码而无法执行。 可以的条件下,使用 $_SERVER['SCRIPT_NAME'] 或 $_SERVER['REQUEST_URI'] 替代 $_SERVER['PHP_SELF'] 在公共代码里将 $_SERVER['PHP_SELF'] 进行重写: $phpfile = basename(__FILE__); $_SERVER['PHP_SELF'] = substr($_SERVER['PHP_SELF'], 0, strpos($_SERVER['PHP_SELF'], $phpfile)).$phpfile;
相关文章推荐
- $_SERVER变量 以及 PHP 使用 $_SERVER['PHP_SELF'] 获取当前页面地址及其安全性问题
- PHP 使用 $_SERVER['PHP_SELF'] 获取当前页面地址及其安全性问题
- PHP 使用 $_SERVER['PHP_SELF'] 获取当前页面地址,$_SERVER['REQUEST_URI']获取完整参数URL
- php通过$_SERVER获取当前页面完整URL地址
- PHP中$_SERVER获取当前页面的完整URL地址
- PHP $_SERVER['HTTP_REFERER'] 获取前一页面的 URL 地址
- PHP中$_SERVER获取当前页面的完整URL地址
- PHP获取 当前页面名称、主机名、URL完整地址、URL参数、获取IP
- PHP获取当前域名$_SERVER['HTTP_HOST']和$_SERVER['SERVER_NAME']的区别
- PHP获取当前页面地址
- php $_SERVER['HTTP_REFERER']获取上一个页面的URL地址
- PHP获取 当前页面名称、主机名、URL完整地址、URL参数、获取IP
- 获取PHP文件绝对地址$_SERVER['SCRIPT_FILENAME'] 与 __FILE__ 的区别
- PHP获取当前页面完整URL地址函数
- php获取当前页面地址栏中的地址
- PHP获取 当前页面名称、主机名、URL完整地址、URL参数、获取IP
- php获取当前页面完整URL地址
- casperjs模拟登陆https页面获取当前面地址后发现为about:blank问题排查
- 在php中使用mb_substr($row['title'],0,15,'utf-8')解决获取的字符后面几们的乱码问题
- PHP中获取当前页面的完整URL & php $_SERVER中的SERVER_NAME 和HTTP_HOST的区别