使用 $_SERVER['REQUEST_URI'] 检查 URL 字符串的风险
Risk of checking string of URL with $_SERVER['REQUEST_URI']
在网上为我的网站寻找不同的解决方案时,我总是仔细检查安全风险,尤其是当它涉及服务器全局时。
虽然我了解使用输入数据而不进行清理的风险,但我不确定是否将服务器全局变量用于简单的 PHP 函数。
我正在使用一个函数来检查我的 URL:
中是否有特定的字符串
if (strpos($_SERVER['REQUEST_URI'], 'foo') !== false) :
// do something
endif;
我是否需要担心任何 XSS 或注入的乐趣?
没有。你可以保持放松。
如果您尝试将变量作为代码求值,则很少会存在一些问题,但您的情况并非如此。
全局变量的主要安全问题存在于 年前流行的 指令 register_globals
(从 PHP 5.4.0 开始删除):启用此选项后,所有 GET 和 POST 变量都将转换为全局变量(即 $_GET['user']
可用作 $user
)。
所以,如果 index.php
是:
,那么调用 url 就像 http://example.com/index.php?destroyall=1
if( $_GET['areYouSure']==1 )
{
$destroyall = 1;
}
if( $destroyall )
{
deleteAllMyFilesNow();
}
deleteAllMyFilesNow()
被执行,即使areYouSure
为False,因为$_GET[destroyall]
直接设置了$destroyall
的值。
要了解 register_global
的受欢迎程度,请考虑 PHP site 报告:
Perhaps the most controversial change in PHP is when the default value for the PHP directive register_globals went from ON to OFF
在网上为我的网站寻找不同的解决方案时,我总是仔细检查安全风险,尤其是当它涉及服务器全局时。
虽然我了解使用输入数据而不进行清理的风险,但我不确定是否将服务器全局变量用于简单的 PHP 函数。
我正在使用一个函数来检查我的 URL:
中是否有特定的字符串if (strpos($_SERVER['REQUEST_URI'], 'foo') !== false) :
// do something
endif;
我是否需要担心任何 XSS 或注入的乐趣?
没有。你可以保持放松。
如果您尝试将变量作为代码求值,则很少会存在一些问题,但您的情况并非如此。
全局变量的主要安全问题存在于 年前流行的 指令 register_globals
(从 PHP 5.4.0 开始删除):启用此选项后,所有 GET 和 POST 变量都将转换为全局变量(即 $_GET['user']
可用作 $user
)。
所以,如果 index.php
是:
http://example.com/index.php?destroyall=1
if( $_GET['areYouSure']==1 )
{
$destroyall = 1;
}
if( $destroyall )
{
deleteAllMyFilesNow();
}
deleteAllMyFilesNow()
被执行,即使areYouSure
为False,因为$_GET[destroyall]
直接设置了$destroyall
的值。
要了解 register_global
的受欢迎程度,请考虑 PHP site 报告:
Perhaps the most controversial change in PHP is when the default value for the PHP directive register_globals went from ON to OFF