$ _SERVER变量的可移植性:REMOTE_USER,AUTH_USER和PHP_AUTH_USER

时间:2017-06-30 15:12:46

标签: php apache authentication iis cgi

获取HTTP身份验证的用户名以确保跨不同Web服务器(Apache,IIS,Nginx等)的完全可移植性的最佳方法是什么?

我的理解是$_SERVER['REMOTE_USER']是CGI标准,但可以安全地假设所有Web服务器都支持这个吗?

至少有两个其他变体:Apache上的$_SERVER['PHP_AUTH_USER']和IIS上的$_SERVER['AUTH_USER']。如果$_SERVER['REMOTE_USER']是要使用的正确变量,为什么存在这些特定于服务器的变体?

相关主题,仅涵盖IIS / Coldfusion,而不是* / PHP:Difference between AUTH_USER and REMOTE_USER cgi variables

1 个答案:

答案 0 :(得分:1)

REMOTE_USER变量(对应于PHP中的$ _SERVER ['REMOTE_USER'])是CGI 1.1标准,但假设所有Web服务器都支持它甚至以相同的方式使用它是不安全的。事实上,只有当身份验证方案是Basic或Digest时才有意义,而在IIS中,您可以使用集成Windows身份验证或其他类型的身份验证(例如基于证书或带有ASP页面的Forms身份验证)。其他Web服务器可能有自己的类似方案。

This section of the PHP Manual州:

  

$ _ SERVER是一个包含标题,路径和脚本位置等信息的数组。此阵列中的条目由Web服务器创建。无法保证每个Web服务器都能提供这些服务;服务器可以省略一些,或提供此处未列出的其他服务器。也就是说,在»CGI / 1.1规范中考虑了大量这些变量,因此您应该能够期待这些变量。