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

简介:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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 ;




本文转自 IT阿飞 51CTO博客,原文链接:http://blog.51cto.com/itafei/1867584

相关文章
|
设计模式 PHP
php设计模式--观察者模式(4.1)面向过程完成页面内容切换
php设计模式--观察者模式(4.1)面向过程完成页面内容切换
176 0
|
JavaScript 前端开发 安全
php学习笔记-普通表单参数提交获取及页面的重定向和一个登录小demo-day05
本文介绍了PHP中普通表单参数的提交获取、页面重定向的方法,并通过一个登录示例演示了表单参数的封装和页面跳转处理。
|
存储 安全 PHP
PHP应用开发中的安全性考虑与实践
在当前互联网应用盛行的背景下,PHP作为一种广泛应用于Web开发的编程语言,其安全性显得尤为重要。本文探讨了PHP应用开发中的几个关键安全性考虑因素,并提供了一些实用的安全实践建议,旨在帮助开发人员构建更加安全可靠的应用程序。 【7月更文挑战第11天】
211 4
|
安全 搜索推荐 PHP
一款轻量级的PHP链接发布页面源码
一款轻量级的PHP链接发布页面源码
341 6
|
SQL 安全 JavaScript
在多用户环境中,如何确保 PHP Shell 的安全性?
在多用户环境中,如何确保 PHP Shell 的安全性?
205 1
|
搜索推荐 PHP UED
PHP中的异常处理与自定义错误页面
【8月更文挑战第33天】在PHP开发中,优雅地处理异常和错误是提升应用稳定性和用户体验的关键。本文将引导你理解PHP的异常处理机制,并教你如何创建自定义错误页面,以增强你的应用对错误的响应能力。从基本的错误类型到深入的异常捕获,再到实现个性化的用户提示,我们将一步步构建一个更加健壮的PHP应用。
234 4
|
PHP Windows
【Azure App Service for Windows】 PHP应用出现500 : The page cannot be displayed because an internal server error has occurred. 错误
【Azure App Service for Windows】 PHP应用出现500 : The page cannot be displayed because an internal server error has occurred. 错误
379 1
|
前端开发 PHP 开发者
React Server Component 使用问题之怎么使用Docker运行PHP应用
React Server Component 使用问题之怎么使用Docker运行PHP应用
178 1
|
安全 JavaScript Java
PHP与其他语言安全性对比?
【7月更文挑战第15天】PHP与其他语言安全性对比?
293 1

热门文章

最新文章