【发布时间】:2011-09-22 10:03:21
【问题描述】:
用户可以控制的任何变量,攻击者也可以控制,因此是攻击的来源。这被称为“污染”变量,并且是不安全的。
使用$_SERVER 时,可以控制许多变量。 PHP_SELF、HTTP_USER_AGENT、HTTP_X_FORWARDED_FOR、HTTP_ACCEPT_LANGUAGE 等许多是客户端发送的 HTTP 请求标头的一部分。
有人知道$_SERVER 变量的“安全列表”或未污染列表吗?
【问题讨论】:
-
取决于您如何定义“安全”。这些值都是安全的,它只取决于你使用它们的目的。
-
我认为在这种情况下,Rook 是在说“哪些服务器变量不能被用户欺骗”,比如
REMOTE_ADDR。 -
任何以
HTTP_开头的都是请求头,可以由浏览器或代理设置。我会将这些视为任何其他用户输入。 -
@bob-the-destroyer REMOTE_ADDR 是直接从 apache 的 TCP 套接字拉取的,这个值不能在 Internet 上被欺骗,因为是三次握手。
-
@Rook:好点。我想提到“欺骗”,我更倾向于 IP 欺骗本身的旧行为,而不是任何形式的伪造
REMOTE_ADDR的实际值。这超出了这个问题的范围。很高兴了解这个值是如何设置的,谢谢。