$ _SERVER ['SERVER_NAME']是伪造/伪造的吗?

问题描述:

PHP变量$ _SERVER ['SERVER_NAME']是伪造还是伪造的?我打算将它作为表单发布的安全措施。我会检查以确保变量是我的网站名称(www.example.com)。我知道HTTP_REFERRER可能是伪造的,但我不确定这个。

谢谢!

+1

无论它将永远是相同的..你的服务器。不是请求来自的服务器。 – sachleen 2012-07-09 01:45:14

实际上$ _ SERVER [“SERVER_NAME”]可以通过什么客户端浏览器发送过来...查看http://shiflett.org/blog/2006/mar/server-name-versus-http-host为通过对问题调查的影响。

它不能伪造,persay,但它会总是返回您的网站名称。如果您使用同一个脚本运行多个站点,并根据所提供的主机名称使用其他数据库,这很有用。

PHP documentation说:

'SERVER_NAME' 
    The name of the server host under which the current script is executing. If the script is running on a virtual host, this will be the value defined for that virtual host. 
+3

“SERVER_NAME”与“HTTP_HOST”混淆。 – BalusC 2012-07-09 01:46:31

由访问者通常不能伪造。但我怀疑你会想要强制执行某个SERVER_NAME来许可脚本,以便它们只能被特定的域使用。在这种情况下答案是肯定的,这个变量肯定可以伪造

原因很简单,服务器设置这个值。在大多数情况下,您会将PHP作为Apache模块运行,但有时您还有其他Apache模块,有时候您使用NGINX或IIS以CGI模式运行PHP,有时您甚至会将PHP作为CLI作为子进程分支部署在云中的内置服务器。这些服务器将负责设置该变量。

另外,总是有人工分配。

$_SERVER['SERVER_NAME'] = ... // this can go above all your scripts