强制HTTPS用于特定URL

时间:2012-02-02 00:30:42

标签: .htaccess redirect ssl https

这应该是一个快速的...这是我目前的.htaccess文件:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

我需要做的是确保如果达到http://www.mydomain.com/cart/,则需要强制使用HTTPS ... /cart/以及/cart/内的任何内容

2 个答案:

答案 0 :(得分:6)

请求发送到http://www.mydomain.com/cart/后,如果请求中有任何敏感数据,则为时已晚。强迫它破裂!至少,它会告诉您链接有问题。以前答案中的更多细节:

  

[...]当请求到达服务器时,   太晚了。如果有一个MITM,他已经完成了他的攻击(或部分攻击   在你收到请求之前。

     

到那时你能做的最好的事情是回复没有任何有用的内容。在   这种情况下,重定向(使用301或302和Location标头)   可能是合适的。但是,它可能会隐藏用户(或   即使你作为开发人员)也忽略了警告(在这种情况下,是   浏览器将遵循重定向并几乎重试请求   透明)。

     

因此,我只建议返回404状态:

     
      
  • http://yoursite/https://yoursite/实际上是两个不同的网站。没有理由期望所有的1:1映射   URI空间中的资源从一个到另一个(仅在同一个空间中)   因为你可以有一个完全不同的层次结构   ftp://yoursite/)。
  •   
  • 更重要的是,这是一个应该在上游处理的问题:使用http://将您的用户引导至此资源的链接   应该被认为是破碎的。不要让它自动工作。   对于不应该存在的资源具有404状态是好的。在   另外,当出现错误时返回错误消息是好的:   它会强迫你(或至少提醒你)作为你的开发者   需要修复导致此问题的页面/表单/链接。
  •   

编辑:(示例)

假设您有http://example.com/,您网站的非安全部分,允许用户浏览项目。他们在那个阶段没有登录,因此可以通过普通的HTTP进行操作。

现在,这是购物车/付款时间。你想要HTTPS。您将用户发送到https://example.com/cart/。如果将用户发送到购物车部分的其中一个链接使用普通HTTP(即http://example.com/cart/),那么这是一个开发错误。它不应该在那里。当您认为将要发送到https://example.com/cart/时让进程中断允许开发人员查看它(并且一旦修复,用户就不应该遇到问题)。

如果它只是关于您网站的HTTPS部分(通常是通过某个链接的HTTP GET),则不一定是那么大的风险。

当自动重定向变得更加危险时,它们会隐藏更大的问题。

例如,您正在https://example.com/cart/creditcarddetails,并且您已经填写了一些应该保留在SSL上的信息。但是,开发人员犯了一个错误,并在表单中使用了简单的http://链接。此外,开发人员(毕竟是用户/人)在Firefox中点击“不要再显示此消息”时显示“警告:您将从安全页面转到非安全页面”(顺便说一句,不幸的是,Firefox警告后验:它在向用户显示消息时已经提出了不安全的请求。现在,具有敏感数据的GET / POST请求首先发送到不正确的普通http://链接,并且自动重写告诉浏览器再次通过https://尝试请求。它看起来很好,因为就用户而言,这一切都发生在几分之一秒内。但事实并非如此:敏感数据已明确发送。

制作纯粹的HTTP部分应该只通过HTTPS而不做任何有用的事实上有助于你更清楚地看到错误。因为如果链接被正确实现,用户永远不应该在那里结束,这对他们来说并不是真正的问题。

答案 1 :(得分:1)

尝试在其他规则之前添加此(但在RewriteBase之后):

RewriteCond %{HTTPS} off
RewriteRule ^cart/(.*)$ https://www.mydomain.com/cart/$1 [R,L]