評估 $_SERVER 變數的安全性
HTTP 請求標頭通常包含可由使用者控制的資訊。因此,許多 $_SERVER 變數可能會被惡意輸入污染並成為攻擊來源。
了解受控值
伺服器控制的變量,例如“SERVER_ADDR”和“SERVER_SOFTWARE”由伺服器配置設置,本質上是安全。
部分伺服器控制的變數取決於請求,且有效值有限,使其可靠。範例包括“REMOTE_ADDR”和“REQUEST_TIME”。
任意使用者控制值
相反,任意使用者控制值可以包含客戶端發送的任何輸入,包括潛在的惡意內容。 'HTTP_USER_AGENT' 和 'PHP_SELF' 等變數就屬於此類。
評估可靠性
決定 $_SERVER 變數的可靠性取決於特定的使用情況和伺服器配置。例如:
- 「REMOTE_ADDR」通常是可靠的,但可能在 DNS 攻擊中被欺騙。
- 如果伺服器拒絕具有無效主機標頭的請求,則可以認為「HTTP_HOST」是安全的。
- 如果伺服器限制允許,「REQUEST_METHOD」是可靠的
$_SERVER 變數的分類
-
伺服器受控:
- 'GATEWAY_INTERFACE'
- 'SERVER_SOFTWARE '
- ;'DOCUMENT_ROOT'
- 'SERVER_ADMIN'
- 'S ERVER_SIGNATURE'
-
部分伺服器受控:
- 'HTTPS'
- 'REQUEST_TIME'
- '偏僻的_ADDR'
- 'REMOTE_HOST'
- 'REMOTE_PORT'
- 'SERVER_PROTO COL'
- 'HTTP_HOST'
- 'SERVER_NAME'
- 'SCRIPT_FILENAME '
- 'SERVER_PORT'
- 'SCRIPT_NAME'
li>
-
完全任意的使用者控制值:
- 'argv', 'argc'
'REQUEST_METHOD '
- 'QUERY_STRING'
- 'HTTP_ACCEPT'
- 'HTTP_ACCEPT_CHARSET'
- 'HTTP_ACCEPT_ENCODING'
- 'HTTP_ACCEPT_LANGUAGE'
- 'HTTP_CONNECTION'
- 'HTTP_REFERER'
- '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_」值
在信任任何$_SERVER 變數之前請考慮上下文和潛在後果。
以上是PHP 安全性中的 $_SERVER 變數有多可靠?的詳細內容。更多資訊請關注PHP中文網其他相關文章!