使用$ _SERVER ['REQUEST_URI']检查URL字符串的风险

时间:2016-01-31 00:24:10

标签: php xss

在网上浏览我的网站的不同解决方案时,我总是仔细检查安全风险,特别是当它涉及服务器全局时。

虽然我理解在没有清理的情况下使用输入数据的风险,但我不确定将服务器全局变量用于简单的PHP函数。

我正在使用一个函数检查我的URL中是否有特定的字符串:

if (strpos($_SERVER['REQUEST_URI'], 'foo') !== false) :
// do something
endif;

我是否需要担心任何XSS或注射乐趣?

1 个答案:

答案 0 :(得分:1)

没有。你可以保持放松。

如果您尝试将变量作为代码进行评估,则很少会出现某些问题,但不是您的情况。

全局变量的主要安全问题在于一年前流行的指令register_globals(从PHP 5.4.0开始删除):此选项处于活动状态,所有GET和POST变量在全局变量中转换(即$_GET['user']可用$user)。

因此,如果http://example.com/index.php?destroyall=1index.php,则调用if( $_GET['areYouSure']==1 ) { $destroyall = 1; } if( $destroyall ) { deleteAllMyFilesNow(); } 之类的网址:

deleteAllMyFilesNow()
即使areYouSure为False,也会执行

$_GET[destroyall],因为$destroyall直接设置register_global的值。

要了解datepicker()受欢迎程度,请考虑PHP site报告:

  

PHP中最有争议的变化可能是PHP指令register_globals的默认值从ON变为OFF