可以伪造/伪造$ _SERVER ['SERVER_NAME']吗?

时间:2012-07-09 01:43:17

标签: php http-referer server-name

PHP变量$ _SERVER ['SERVER_NAME']可以伪造或伪造吗?我计划将其用作表单发布的安全措施。我会检查以确保该变量是我的站点名称(www.example.com)。我知道HTTP_REFERRER可以伪造,但我不确定这个。

谢谢!

3 个答案:

答案 0 :(得分:7)

实际上,$ _ SERVER ['SERVER_NAME']会受到客户端浏览器发送的内容的影响...请参阅http://shiflett.org/blog/2006/mar/server-name-versus-http-host以了解有关此问题的调查。

答案 1 :(得分:3)

访客通常无法伪造。但我怀疑您希望强制执行某个SERVER_NAME来许可脚本,因此它们只能由特定域使用。在这种情况下答案是肯定的,这个变量绝对可以伪造

原因很简单,服务器设置此值。在大多数情况下,您将PHP作为Apache模块运行,但有时您有其他Apache模块,有时您使用NGINX或IIS在CGI模式下运行PHP,有时您甚至可以通过自定义运行作为子进程的CLI分叉的PHP - 部署在云中的构建服务器。那些服务器将负责设置该变量。

另外,总是手动分配。

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

答案 2 :(得分:2)

它不能伪造,坚持,但总是返回您的网站名称。如果您从同一个脚本运行多个站点,并且例如根据提供的主机名使用不同的数据库,则非常有用。

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.