PHP 变量 $_SERVER['SERVER_NAME'] 可以伪造或伪造吗?我正计划将其用作表单发布的安全措施。我会检查以确保该变量是我的站点名称(www.example.com)。我知道 HTTP_REFERRER 可以伪造,但我不确定这个。
谢谢!
PHP 变量 $_SERVER['SERVER_NAME'] 可以伪造或伪造吗?我正计划将其用作表单发布的安全措施。我会检查以确保该变量是我的站点名称(www.example.com)。我知道 HTTP_REFERRER 可以伪造,但我不确定这个。
谢谢!
实际上 $_SERVER['SERVER_NAME'] 可能会受到客户端浏览器发送的内容的影响......请参阅http://shiflett.org/blog/2006/mar/server-name-versus-http-host以了解有关的全面调查问题。
访客通常无法伪造它。但我怀疑您会想要强制执行某个 SERVER_NAME 来许可脚本,以便它们只能由特定域使用。在这种情况下,答案是肯定的,这个变量肯定是可以伪造的。
原因很简单,服务器设置了这个值。在大多数情况下,您会将 PHP 作为 Apache 模块运行,但有时您有其他 Apache 模块,有时您使用 NGINX 或 IIS 在 CGI 模式下运行 PHP,有时您甚至将 PHP 作为 CLI 运行为自定义的子进程- 构建部署在云中的服务器。这些服务器将负责设置该变量。
另外,总是有手动分配。
$_SERVER['SERVER_NAME'] = ... // this can go above all your scripts
persay,它不能被伪造,但它总是会返回您的站点名称。如果您从同一个脚本运行多个站点,例如,根据提供的主机名使用不同的数据库,这将很有用。
PHP文档说:
'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.