如何在PHP中将页面重定向到https?

Pat*_*cow 5 php https redirect secure-coding

我有一个登录表格:

<form method =POST action="/login.php">
...
</form>
Run Code Online (Sandbox Code Playgroud)

我希望login.php页面重定向到使用https.

我不想发送用户,https://.../login.php因为他们可能会更改链接.但我想在解析登录表单数据并将用户登录之前在服务器端进行重定向.

我发现并举例:

if($_SERVER["HTTPS"] != "on") {
   header("HTTP/1.1 301 Moved Permanently");
   header("Location: "https://" . $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"]);
   exit();
}
Run Code Online (Sandbox Code Playgroud)

但我没有,$_SERVER["HTTPS"]如果我var_dump($_SERVER);

我确实有$_SERVER['SERVER_PORT']女巫是80.

有任何想法吗?

谢谢

dre*_*010 6

如果您允许它们通过普通HTTP发布到/login.php然后重定向到HTTPS,则会破坏使用HTTPS的目的,因为登录信息已经通过Internet以纯文本形式发送.

您可以采取哪些措施来阻止用户更改URL,以使登录页面拒绝登录(如果它不是通过HTTPS).

我用来检查HTTPS的使用情况如下:

if (!isset($_SERVER['HTTPS']) || !$_SERVER['HTTPS']) {
    // request is not using SSL, redirect to https, or fail
}
Run Code Online (Sandbox Code Playgroud)

如果您在默认端口443上运行安全服务器,那么您还可以检查是否是端口,但$_SERVER['HTTPS']如果使用SSL ,PHP 会将值设置为非空,因此我会检查是否存在最佳实践.

编辑:

如果包含用户手动将https更改为http并希望通过纯文本发送信息,则无法阻止它们,但如果您不允许通过HTTP登录,那么即使是正确的信息也不会登录它们,你可以强制它们使用https,使它成为唯一有效的东西.


Cro*_*tab 5

无论您使用哪个页面来显示您的登录表单,都应该在填写表单https:// 之前使用,然后将其提交到另一个https://地址.否则,您将使表单处于打开状态.

你可以看看的mod_rewrite使用自动重定向任何要求http://https://,至少你的登录页面.


Ray*_*iez 5

if($requireSSL && $_SERVER['SERVER_PORT'] != 443) {
    header("HTTP/1.1 301 Moved Permanently");
    header("Location: https://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
    exit();
}
Run Code Online (Sandbox Code Playgroud)