Loading [MathJax]/jax/output/CommonHTML/jax.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >PHP 使用 $_SERVER[‘PHP_SELF’] 获取当前页面地址及其安全性问题

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

作者头像
Yiiven
发布于 2022-12-15 06:40:53
发布于 2022-12-15 06:40:53
2.4K00
代码可运行
举报
文章被收录于专栏:怡文菌怡文菌
运行总次数:0
代码可运行

$_SERVER[‘PHP_SELF’]

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

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$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
代码运行次数:0
运行
AI代码解释
复制
<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',让 URL 中可能的恶意代码转换为用于显示的 html 代码而无法执行。
  2. 可以的条件下,使用 _SERVER'REQUEST_URI' 替代
  3. 在公共代码里将 $_SERVER['PHP_SELF'] 进行重写:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
php特性
(get 数据流)?abc=data://text/plain;base64;64编码的内容 data协议
用户11062199
2024/04/16
1060
PHP获取当前页面的完整URL参数及分割的方法
(adsbygoogle = window.adsbygoogle || []).push({});
德顺
2019/11/12
9.5K0
Http的headers最详解释
  HTTP Headers是HTTP请求和相应的核心,它承载了关于客户端浏览器,请求页面,服务器等相关的信息。
php007
2020/02/14
4.2K0
Http的headers最详解释
PHP获取域名等URL地址
参考URL:https://www.w3h5.com/PHP-URL.php?num=123 以下是输出结果: <?php //获取域名或主机地址 echo $_SERVER['HTTP_HOST']
德顺
2019/11/13
9.5K0
PHP如何获取当前主机、域名、网址、路径、端口等参数
测试域名daxiangtravel.com,apache根目录/mnt/,测试目录/mnt/qa/test,测试文件名为index.php。
用户8099761
2023/05/11
3.1K0
buuctf web方向刷题记录
又一新坑,马上就要工作了,但是觉得自己那叫一个菜,述开此坑,多刷点题提升一下自己。
yulate
2023/05/02
6360
buuctf web方向刷题记录
PHP中获取当前页面的完整URL
javascript实现: top.location.href 顶级窗口的地址 this.location.href 当前窗口的地址 PHP实现: #测试网址: http://local
joshua317
2018/04/16
4K0
PHP中获取当前页面的完整URL
#测试网址: http://localhost/blog/testurl.php?id=5 //获取域名或主机地址 echo $_SERVER['HTTP_HOST']."<br>"; #
用户8099761
2023/05/10
2.5K0
PHP全栈学习笔记27
数组概述,类型,声明,遍历,输出,获取数组中最后一个元素,删除重复数组,获取数组中指定元素的键值,排序,将数组中的元素合成字符串。
达达前端
2019/07/03
8580
P001PHP开发之PHP实现取得HTTP请求的原文相关信息
通过以下代码示例,我们可以知道,PHP如何获得请求的URL及请求的头部,body等具体信息;
上善若水.夏
2018/09/28
6090
php url路径问题和php文件以绝对路径引入
#测试网址: http://localhost/blog/testurl.php?id=5 //获取域名或主机地址 echo $_SERVER['HTTP_HOST'].""; #local
用户5640963
2019/07/26
1.3K0
代码审计基础之还不滚进来学习
在Python课程里咱们讲解了什么是局部变量与全局变量的概念,这里再次介绍一种变量,”超全局变量“
天钧
2019/07/25
1.1K0
代码审计基础之还不滚进来学习
Apache之Rewrite和RewriteRule规则梳理以及http强转https的配置总结(完整版)
一. 简单实例介绍 一般来说,apache配置好http和https后,如果想要做http强转到https,需要设置url重定向规则,大致需要下面几个步骤即可完成配置:
洗尽了浮华
2018/09/28
32.5K0
PHP获取当前页面(网页)完整URL链接地址代码
示例链接:https://www.xxx.com/example.php?id=1 获取完整URL,包含URL参数 最终获取的链接:https://www.xxx.com/example.php?id
一身执念
2021/07/27
3K0
PHP获取当前页面(网页)完整URL链接地址代码
PHP基础
发现PHP审计和利用的一些漏洞利用场景挺有意思的,来学习一下php基础内容,大部分概念和代码和Java或c++的差不多,挑些php独有的特性来做记录。
全栈程序员站长
2022/07/13
4030
PHP获取URL地址的一些坑
在一些业务场景中,我们需要用到PHP去获取URL地址,度娘搜索了一下,发现都是同一种解决方案,如下: #测试网址: http://localhost/blog/testurl.php?id=5
NateHuang
2018/03/14
2.8K0
获取当前url地址
<?php //获取域名或主机地址 echo $_SERVER['HTTP_HOST']."<br />"; //获取网页地址 echo $_SERVER['PHP_SELF']."<br />";
九霄道长
2021/03/02
4.4K0
PHP预定义变量数组种类概览
PHP预定义变量数组1、$_SERVER $_SERVER超级全局变量包含由web服务器创建的信息,它提供了服务器和客户配置及当前请求环境的有关信息。根据服务器不同,$_SERVER中的变量值和变量个数会有差别,不过一般都可以找到CGI1.1规范中定义的变量。其中包括: $_SERVER[ 'HTTP_REFERER' ] ; 引导用户到达当前位置的页面的URL ; $_SERVER[ 'REMOTE_ADDR‘ ] ; 客户IP地址 ; $_SERVER[ ’REQUEST_URI‘ ] ; URL的路
wangxl
2018/03/07
1.6K0
解决 php提交表单到当前页面,刷新会重复提交 的问题
今天在写php程序的时候,发现一个问题,就是post提交到本页的表单数据,刷新后会反复提交。因此向群友请教。最终,得到了解决。如下:
吃猫的鱼Code
2023/02/02
2.5K0
PHP的安全性问题,你能说得上几个?
所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表单特别容易受到SQL注入式攻击.
全栈程序员站长
2021/12/23
8650
PHP的安全性问题,你能说得上几个?
相关推荐
php特性
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验