强制页面打破安全协议(https://> http://)

时间:2014-05-28 21:49:57

标签: php security http https protocols

我使用了这个答案中的信息(https://stackoverflow.com/a/85867/3271766 - 以及Dave1010的贡献)来允许我强制安全加载页面(https://)。这很好用!

现在,我想做相反的事情。当从安全页面单击相对链接(到正常的非安全页面)时,我想强制该页面加载不安全(http://)。我不想使用绝对链接来完成此任务。他们需要保持亲戚。相反,我宁愿使用类似于我用来强制页面安全加载的PHP代码。

如何做到这一点?提前谢谢你的帮助。

我用来强制页面安全加载的代码(在每个页面的head标签中)是:

<?php
    // WORKING: FORCE SECURE - Force page to load securely (http:// > https://)
    if(empty($_SERVER["HTTPS"]) || $_SERVER["HTTPS"] !== "on")
    {
        header("Location: https://" . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]);
        exit();
    }
?>

我尝试了以下操作,但它会阻止页面完全加载:

<?php
    // NOT WORKING: FORCE NON-SECURE - Force page to break out of secure protocol (https:// > http://)
    if(empty($_SERVER["HTTP"]) || $_SERVER["HTTP"] !== "on")
    {
        header("Location: http://" . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]);
        exit();
    }
?>

有没有办法修改它以使其有效?

(顺便说一下,如果有人想知道,我这样做是因为我的客户想要使用的第三方共享工具没有有效的安全证书。因此,部分共享工具要么不加载,我没有多次联系供应商,但他们没有回复。我已经从安全页面删除了该工具。但是,我的客户希望在所有其他页面上使用此工具,它完美地工作,所以只要没有安全访问它。): - )

此致 杰里米

1 个答案:

答案 0 :(得分:0)

更改

if(empty($_SERVER["HTTP"]) || $_SERVER["HTTP"] !== "on")

if(isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on'){
    $url = 'http://'. $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'];
    header("Location: $url");
}