CGI规范定义了REMOTE_USER
服务器属性,其中包含身份验证的用户的名称。
例如,在Apache上,可以通过.htpasswd身份验证提供,而在IIS上可以通过Active Directory处理。无论哪种情况,Web服务器都处理身份验证,然后如果身份验证成功,则将身份验证的用户的名称传递回PHP。(如果失败或取消,脚本将永远不会运行。(
我的问题:我们可以依靠这个变量吗?即,如果存在(我猜是非空白(是否可以安全地假设身份验证已成功通过,并且提供的名称是用于身份验证的名称?
特别是,我担心在未进行身份验证的情况下是否有可能将此服务器属性注入我的PHP脚本,或者欺骗该值,因此它包含除了通过身份验证的用户名之外的其他内容。
我们可以依靠这个变量吗?
是的,在您可以依靠服务器的正确配置的范围内。
我担心是否有可能将此服务器属性注入我的PHP脚本
它可以被欺骗,但只能从服务器端进行。例如,通过一个.htaccess行,例如:
SetEnv REMOTE_USER foo
或直接在php中:
$_SERVER['REMOTE_USER'] = 'foo';
因此,如果您的攻击者可以远程更改您的.htaccess文件或PHP源,则用户ID欺骗是您的问题中最少的。