PHP 使用 $_SERVER['PHP_SELF'] 获取当前页面地址,$_SERVER['REQUEST_URI']获取完整参数URL
2016-01-19 10:06
1121 查看
PHP
假设我们有如下网址,$_SERVER[‘PHP_SELF’]得到的结果分别为:
因此,可以使用 $_SERVER[‘PHP_SELF’] 很方便的获取当前页面的地址:
以上面的地址为例,得到的结果如下:
上面是简单获取 http 协议的当前页面 URL ,只是要注意该地址是不包含 URL 中请求的参数(?及后面的字串)的。如果希望得到包含请求参数的完整 URL 地址,请使用
PHP
由于利用
假设该页面地址为:
访问该页面,得到的表单 html 代码如下:
这段代码是正确的,但是当访问地址变成:
页面正常执行了,表单 html 代码变成:
显然这段代码不是我们期望的,攻击者可以在 URL 后面随意加上攻击代码。要解决该问题,可以:
$_SERVER['PHP_SELF']
$_SERVER['PHP_SELF']表示当前 php 文件相对于网站根目录的位置地址,与 document root 相关。
假设我们有如下网址,$_SERVER[‘PHP_SELF’]得到的结果分别为:
http://www.baicai.link/index/ :/index/index.php http://www.baicai.link/cate/miandan.html :/cate/miandan.html http://www.baicai.link/php/index.php?test=foo :/php/index.php http://www.baicai.link/php/index.php/test/foo :/php/index.php/test/foo
因此,可以使用 $_SERVER[‘PHP_SELF’] 很方便的获取当前页面的地址:
$url = "http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];
以上面的地址为例,得到的结果如下:
http://www.baicai.link/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.baicai.link/php/index.php
访问该页面,得到的表单 html 代码如下:
<form method="post" action="/php/index.php">
这段代码是正确的,但是当访问地址变成:
http://www.baicai.link/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;
相关文章推荐
- 一个关于if else容易迷惑的问题
- java-用HttpURLConnection发送Http请求.
- PHP5.2.*防止Hash冲突拒绝服务攻击的Patch
- 深入理解PHP之匿名函数
- JSP/PHP基于Ajax的分页功能实现
- 关于PHP通过PDO用中文条件查询MySQL的问题。
- 什么是设计模式
- PHP数据库长连接mysql_pconnect的细节
- Php Installing An Expansion
- VBScript 剪贴板抓取URL并在浏览器中打开
- PHP+Apache在Windows 9x下的安装和配置
- IIS 6 的 PHP 最佳配置方法
- 安装Apache和PHP的一些补充
- Linux Apache+MySQL+PHP
- 建立Apache+PHP+MySQL数据库驱动的动态网站
- PHP 5.3.0 安装分析心得
- apache 环境下 php 的配置注意事项
- 用vbs 实现从剪贴板中抓取一个 URL 然后在浏览器中打开该 Web 站点
- asp获取URL参数的几种方法分析总结[原创]_应用技巧_脚本之家