$_SERVER容易被用户修改


is $_SERVER vulnerable to change by users

我真的很想使用以下问题的答案:我如何强制用户通过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环境变量,否则它是相当安全的。