我真的很想使用以下问题的答案:我如何强制用户通过HTTPS而不是HTTP访问我的页面?
但是我一直认为全局的$_SERVER
变量容易被用户改变,不应该依赖。这是真的吗?
if($_SERVER["HTTPS"] != "on")
{
header("Location: https://" . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]);
exit();
}
如果是易变的,为什么这么多人推荐这个答案
$_SERVER
中的值为托管web服务器设置的环境变量。这取决于HTTPS
环境变量如何准确地设置来说明它是否"安全";但通常在Apache中,当且仅当SSL模块提供SSL连接时,该值由SSL模块设置。就任何人(至少是我)所知,用户无法在请求中发送任何内容来更改此值。用户应该只能够发送HTTP头,这将结束在$_SERVER['HTTP_*']
值,从来没有普通的'HTTPS'
。
所以,除非你的web服务器中有一些未知的错误,允许用户在请求中发送信息,欺骗服务器错误地设置HTTPS
环境变量,否则它是相当安全的。