Php 哪些$\u服务器变量是安全的?
用户可以控制的任何变量,攻击者也可以控制,因此是攻击源。这称为“受污染”变量,是不安全的 使用时,许多变量都可以控制Php 哪些$\u服务器变量是安全的?,php,security,Php,Security,用户可以控制的任何变量,攻击者也可以控制,因此是攻击源。这称为“受污染”变量,是不安全的 使用时,许多变量都可以控制PHP\u SELF,HTTP\u USER\u AGENT,HTTP\u X\u FORWARDED\u FOR,HTTP\u ACCEPT\u LANGUAGE以及许多其他内容都是客户端发送的HTTP请求头的一部分 有人知道服务器变量的“安全列表”或未受污染列表吗?没有“安全”或“不安全”值。只有服务器控制的值和用户控制的值,您需要知道值来自何处,从而知道它是否可以用于特定目的
PHP\u SELF
,HTTP\u USER\u AGENT
,HTTP\u X\u FORWARDED\u FOR
,HTTP\u ACCEPT\u LANGUAGE
以及许多其他内容都是客户端发送的HTTP请求头的一部分
有人知道服务器变量的“安全列表”或未受污染列表吗?没有“安全”或“不安全”值。只有服务器控制的值和用户控制的值,您需要知道值来自何处,从而知道它是否可以用于特定目的<代码>$\u服务器['HTTP\u FOOBAR']例如,存储在数据库中是完全安全的,但我肯定不会评估它
因此,让我们将这些值分为三类:
服务器控制
这些变量由服务器环境设置,完全取决于服务器配置
“网关接口”
“服务器地址”
“服务器软件”
'DOCUMENT\u ROOT'
“服务器管理”
“服务器签名”
部分服务器控制
这些变量取决于客户端发送的特定请求,但只能接受有限数量的有效值,因为web服务器应拒绝所有无效值,而不会导致脚本的调用。因此,可以认为它们是可靠的
'HTTPS'
“请求时间”
“远程地址”
*
“远程主机”
*
“远程端口”
*
“服务器协议”
“HTTP\u主机”
†
“服务器名称”
†
“脚本文件名”
“服务器端口”
“
“脚本名称”
*通过TCP/IP握手验证,远程
值保证为客户端的有效地址。这是任何响应都将发送到的地址REMOTE_HOST
依赖反向DNS查找,因此可能会受到针对您服务器的DNS攻击的欺骗(在这种情况下,您会遇到更大的问题)。这个值可能是一个代理,这是TCP/IP协议的一个简单现实,您对此无能为力
†如果您的web服务器响应任何请求,而不考虑主机
标题,则这也应视为不安全。请参阅。
另见
"看,
完全任意的用户控制值
这些值根本不需要检查,也不依赖于任何服务器配置,它们完全是客户端发送的任意信息
'argv'
,'argc'
(仅适用于CLI调用,通常不涉及web服务器)
“请求方法”
§
“查询字符串”
'HTTP\u ACCEPT'
'HTTP\u ACCEPT\u CHARSET'
“HTTP\u接受\u编码”
“HTTP\u接受语言”
“HTTP\u连接”
'HTTP\u REFERER'
“HTTP\u用户\u代理”
'AUTH_TYPE'
/
“PHP身份验证摘要”
'PHP\u AUTH\u USER'
/
'PHP\u AUTH\u PW'
/
“路径信息”
“原始路径信息”
“请求URI”
(可能包含受污染的数据)
'PHP_SELF'
(可能包含受污染的数据)
“路径翻译”
- 任何其他
'HTTP.'
值
§只要web服务器只允许某些请求方法,就可以认为是可靠的
如果身份验证完全由web服务器处理,则可以认为是可靠的
超级全局$\u服务器
还包括几个环境变量。它们是否“安全”取决于它们的定义方式(和位置)。它们可以是完全由服务器控制的,也可以是完全由用户控制的。在PHP中,每个$\u服务器
变量(以HTTP.
开头)都会受到用户的影响。例如,变量$\u SERVER['HTTP\u REINERS']
可以通过将HTTP头REINERS
设置为HTTP请求中的任意值而受到污染。取决于您如何定义“安全”。这些值都是安全的,这只取决于您使用它们的目的。我认为在这种情况下,Rook说的是“哪些服务器变量不能被用户欺骗”,例如REMOTE\u ADDR
。任何以HTTP\u
开头的内容都是请求头,可以由浏览器或代理在两者之间进行设置。我会把这些当作其他用户输入。@ Bob驱逐舰Read Tead AdDR是直接从Apache的TCP套接字中提取的,这个值不会因为三路握手而在互联网上被欺骗。我想提到“欺骗”,我更倾向于旧的ip欺骗行为本身,而不是伪造REMOTE\u ADDR
的实际价值。这将超出这个问题的范围。很高兴了解这个值是如何设置的,所以谢谢你。@Rook,但正如我所说的,这完全取决于你如何使用它。价值观本身既不安全也不安全,这取决于你使用它们的目的。即使是从恶意用户发送的数据也是完全安全的,只要您不做任何可能危害您安全的事情。@Rook:您对“安全”的想法使这个问题看起来有点武断,特别是因为它完全与一个模糊的扩展或自定义版本的PHP相关联。当你说“不应该有”的时候