$ _SERVER ['REMOTE_USER']被认为是'安全的'吗?

时间:2017-06-29 15:47:47

标签: php apache authentication iis cgi

CGI specification定义REMOTE_USER服务器属性,其中包含经过身份验证的用户的名称。

例如,在Apache上,这可能是通过.htpasswd身份验证提供的,而在IIS上则可能是通过Active Directory处理的。在任何一种情况下,Web服务器都会处理身份验证,然后在身份验证成功后将经过身份验证的用户的名称传递回PHP。 (如果不成功或取消,脚本将永远不会运行。)

我的问题:我们可以依赖这个变量吗?即如果它存在(并且非空白,我猜)是否可以安全地假设认证已成功通过,并且提供的名称是用于认证的名称?

特别是,我担心是否有可能在没有进行身份验证的情况下将此服务器属性注入我的PHP脚本,或者欺骗该值以使其包含除通过身份验证的用户名之外的其他内容

1 个答案:

答案 0 :(得分:2)

  

我们可以依赖这个变量吗?

是的,只要您可以依赖服务器的正确配置。

  

我担心是否有可能将此服务器属性注入我的PHP脚本

它可能是欺骗性的,但仅限于服务器端。例如,通过.htaccess这样的行:

SetEnv REMOTE_USER foo

或直接在PHP中使用:

$_SERVER['REMOTE_USER'] = 'foo';

因此,如果攻击者可以远程更改.htaccess文件或PHP源代码,那么用户ID欺骗是您遇到的最少问题。