前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PHP 使用 $_SERVER[‘PHP_SELF’] 获取当前页面地址及其安全性问题

PHP 使用 $_SERVER[‘PHP_SELF’] 获取当前页面地址及其安全性问题

作者头像
Yiiven
发布2022-12-15 14:40:53
2K0
发布2022-12-15 14:40:53
举报
文章被收录于专栏:怡文菌怡文菌

$_SERVER[‘PHP_SELF’]

$_SERVER['PHP_SELF'] 表示当前 php 文件相对于网站根目录的位置地址,与 document root 相关。

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

因此,可以使用 $_SERVER['PHP_SELF'] 很方便的获取当前页面的地址:

代码语言:javascript
复制
$url = "http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];

以上面的地址为例,得到的结果如下:

http://www.example.com/php/index.php

上面是简单获取 http 协议的当前页面 URL ,只是要注意该地址是不包含 URL 中请求的参数(?及后面的字串)的。

如果希望得到包含请求参数的完整 URL 地址,请使用 $_SERVER['REQUEST_URI']

$_SERVER‘PHP_SELF’ 安全性

由于利用 $_SERVER['PHP_SELF'] 可以很方便的获取当前页面地址,因此有人在提交表单数据到当前页面进行处理时,往往喜欢使用如下这种方式:

代码语言:javascript
复制
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">

假设该页面地址为:http://www.example.com/php/index.php

访问该页面,得到的表单 html 代码如下:

<form method=”post” action=”/php/index.php”>

这段代码是正确的,但是当访问地址变成:

http://www.example.com/php/index.php/test/foo

页面正常执行了,表单 html 代码变成:

<form method=”post” action=”/php/index.php/test/foo”>

显然这段代码不是我们期望的,攻击者可以在 URL 后面随意加上攻击代码。要解决该问题,可以有以下几种解决方案;

  1. 使用 htmlentities(_SERVER['PHP_SELF']) 替代 _SERVER'PHP_SELF',让 URL 中可能的恶意代码转换为用于显示的 html 代码而无法执行。
  2. 可以的条件下,使用 _SERVER['SCRIPT_NAME'] 或 _SERVER'REQUEST_URI' 替代
  3. 在公共代码里将 $_SERVER['PHP_SELF'] 进行重写:
代码语言:javascript
复制
$phpfile = basename(__FILE__);
$_SERVER['PHP_SELF'] = substr($_SERVER['PHP_SELF'], 0, strpos($_SERVER['PHP_SELF'], $phpfile)).$phpfile;

本文采用 「CC BY-NC-SA 4.0」创作共享协议,转载请标注以下信息:

原文出处:Yiiven https://cloud.tencent.com/developer/article/2193210

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-10-08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • $_SERVER[‘PHP_SELF’]
  • $_SERVER‘PHP_SELF’ 安全性
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档