识别安全的 $_SERVER 变量
攻击者可以利用用户可以控制的变量,使它们不安全或“被污染”。本文旨在提供 $_SERVER 变量及其各自安全级别的完整列表。
服务器控制
这些变量由服务器设置,不受用户影响输入:
- 'GATEWAY_INTERFACE'
- 'SERVER_ADDR'
- 'SERVER_SOFTWARE'
- 'DOCUMENT_ROOT'
- 'SERVER_ADMIN'
- 'SERVER_SIGNATURE'
部分服务器控制
这些变量取决于客户端的请求,但有效值有限,使其可靠:
- 'HTTPS'
- 'REQUEST_TIME'
- 'REMOTE_ADDR'(通过 TCP/IP 握手验证)
- 'REMOTE_HOST'(可能是欺骗性的) )
- 'REMOTE_PORT'
- 'SERVER_PROTOCOL'
- 'HTTP_HOST'(如果服务器未处理)
- 'SERVER_NAME'
- 'SCRIPT_FILENAME'
- 'SERVER_PORT'
- 'SCRIPT_NAME'
完全任意用户控制
这些变量是容易受到用户操纵:
- 'argv'、'argc'
- 'REQUEST_METHOD'
- 'QUERY_STRING'
- 'HTTP_ACCEPT'
- 'HTTP_ACCEPT_CHARSET'
- 'HTTP_ACCEPT_ENCODING'
- 'HTTP_ACCEPT_LANGUAGE'
- 'HTTP_CONNECTION'
- 'HTTP_REFERER'
- ' HTTP_USER_AGENT'
- 'AUTH_TYPE'
- 'PHP_AUTH_DIGEST'
- 'PHP_AUTH_USER'
- 'PHP_AUTH_PW'
- 'PATH_INFO'
- 'ORIG_PATH_INFO'
- 'REQUEST_URI'(可能包含受污染的数据)
- 'PHP_SELF'(可能包含受污染的数据)
- 'PATH_TRANSLATED'
- 任何其他“HTTP_”值
环境变量
环境变量的安全性取决于其来源。它们的范围可以从完全服务器控制到完全用户控制。
以上是PHP 中哪些 $_SERVER 变量可以安全使用?的详细内容。更多信息请关注PHP中文网其他相关文章!