在网上浏览我的网站的不同解决方案时,我总是仔细检查安全风险,尤其是当涉及到服务器全局时。
虽然我理解在不清理的情况下使用输入数据的风险,但我不确定是否将服务器全局变量用于简单的 PHP 函数。
我正在使用一个函数来检查我的 URL 中是否有特定的字符串:
if (strpos($_SERVER['REQUEST_URI'], 'foo') !== false) :
// do something
endif;
我必须担心任何XSS或注入的乐趣吗?
No.你可以保持放松。
如果您尝试将变量作为代码进行评估,则很少会出现一些问题,但事实并非如此。
全局变量的主要安全问题存在于一年前流行的指令register_globals
(从 PHP 5.4.0 开始删除):当此选项处于活动状态时,所有 GET 和 POST 变量都转换为全局变量(即 $_GET['user']
$user
提供)。
因此,调用像 http://example.com/index.php?destroyall=1
这样的 url ,如果index.php
是:
if( $_GET['areYouSure']==1 )
{
$destroyall = 1;
}
if( $destroyall )
{
deleteAllMyFilesNow();
}
即使areYouSure
为 False,也会执行deleteAllMyFilesNow()
,因为$_GET[destroyall]
直接设置 $destroyall
的值。
要了解该register_global
的受欢迎程度,请考虑PHP站点报告:
也许 PHP 中最具争议的变化是 PHP 指令的默认值register_globals从 ON 变为 OFF