仅在PHP的某些页面上强制使用SSL

时间:2015-02-11 14:46:36

标签: php wordpress ssl https

我找到了一个解决方案,用于在我的WordPress网站上设置一个页面以使用https,但我尝试将ssl应用于两个页面而不是一个页面。我尝试了各种if或语句,但似乎无法使语法正确。

以下是我在一个页面上完美运行的if语句:

if (!empty($_SERVER['HTTPS']) && !empty($_SERVER['REQUEST_URI']))
   { 
   if ($_SERVER['HTTPS'] == 'on' && $_SERVER['REQUEST_URI'] != '/bill-pay/')
       {
         header("Location:http://example.com{$_SERVER['REQUEST_URI']}", 301);
         exit;
       }
   elseif ($_SERVER['HTTPS'] != 'on' && $_SERVER['REQUEST_URI'] == '/bill-pay/') 
       {
         header("Location: https://example.com{$_SERVER['REQUEST_URI']}", 301);
         exit;
       }
   }

为了清楚起见,我只添加了适用于一页的版本。

2 个答案:

答案 0 :(得分:2)

请记住,只有有效保护网站的一部分才意味着几乎没有任何安全措施。通过MITM或其他漏洞,攻击者可以在攻击者的控制下轻松地将指向安全页面的链接重写到外部页面。

请记住,SSL不仅关于安全连接,还关于证明您(=您的网站)的真实身份。请确保您的整个网站安全,通过SSL Labs运行,并按照其建议操作。这对每个人都有好处,尤其是对你的客户。

答案 1 :(得分:1)

会想到一个直截了当的......

if (!empty($_SERVER['HTTPS']) && !empty($_SERVER['REQUEST_URI']))
{ 
   if ($_SERVER['HTTPS'] == 'on' && !($_SERVER['REQUEST_URI'] == '/bill-pay/' || $_SERVER['REQUEST_URI'] == '/other-page/'))
   {
     header("Location:http://example.com{$_SERVER['REQUEST_URI']}", 301);
     exit;
   }
   elseif ($_SERVER['HTTPS'] != 'on' && ($_SERVER['REQUEST_URI'] == '/bill-pay/' || $_SERVER['REQUEST_URI'] == '/other-page/')) 
   {
     header("Location: https://example.com{$_SERVER['REQUEST_URI']}", 301);
     exit;
   }
}

......应该做的伎俩

修改

考虑到以下评论,此代码可能更合适:

if (isset($_SERVER['REQUEST_URI']) && ($_SERVER['REQUEST_URI'] == '/bill-pay/' || $_SERVER['REQUEST_URI'] == '/other-page/'))
{
   if (!isset($_SERVER['HTTPS']) || empty($_SERVER['HTTPS'])) 
   {
      header("Location: https://example.com{$_SERVER['REQUEST_URI']}", 301);
      exit;
   }
} 
else 
{
   if (isset($_SERVER['HTTPS']) && !empty($_SERVER['HTTPS'])) 
   {
      header("Location: http://example.com{$_SERVER['REQUEST_URI']}", 301);
      exit;
   }
}

如果未设置值,请记住empty()解析为false;)