我真的想使用以下问题的答案:How can I force users to access my page over HTTPS instead of HTTP?
但我总是认为全局$_SERVER
变量易受用户更改,不应该依赖。这是真的吗?
if($_SERVER["HTTPS"] != "on")
{
header("Location: https://" . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]);
exit();
}
如果它容易发生变化,为什么会有这么多人推荐这个答案。
答案 0 :(得分:1)
$_SERVER
中的值是托管Web服务器设置的环境变量。这取决于HTTPS
环境变量的准确程度,以确定它是否安全"或不;但通常在Apache中,该值由SSL模块设置,当且仅当它为SSL连接提供服务时。至于任何人都知道(或至少是我),用户无法在请求中发送任何内容来更改此值。用户应该只能发送HTTP标头,这些标头最终都会以$_SERVER['HTTP_*']
值结束,而不是'HTTPS'
。
因此,除非您的网络服务器中存在一些未知错误,这些错误允许用户在请求中将信息发送到设置HTTPS
环境变量设置不正确,否则它非常安全。< / p>