2012-02-02 32 views
2

这应该是一个快速...这里是我目前的.htaccess文件:力HTTPS为特定的URL

# 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/

回答

5

一旦请求发送到http://www.mydomain.com/cart/,如果请求中有任何敏感数据,则为时已晚。强制它打破!至少,它会给你一个指示,说明你的链接有问题。在以前的答案更多细节:

[...]由请求到达服务器, 为时已晚的时间。如果有MITM,那么在你收到请求之前,他已经完成了他的攻击(或者是其中的一部分)。

那么你最好能做的就是回复没有任何有用的内容。在 这种情况下,重定向(使用301或302和位置标头) 可能是合适的。但是,如果用户(或者作为开发人员,即使您是 )忽略警告(在这种情况下, 浏览器将遵循重定向并以几乎 透明地重试请求),它可能会隐藏问题。

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

  • http://yoursite/https://yoursite/是有效的两个不同的网站。没有理由期待从一个URI空间到另一个URI空间的所有 资源的1:1映射(就像您可以拥有完全不同的层次结构的 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执行的操作,不会做任何有用的事情,实际上可以帮助您更清楚地看到错误。因为如果链接正确实施,用户永远不会终止那里,这对他们来说不是问题。

+0

请求中没有任何敏感数据...我一起发送的唯一内容是在URL中,它是只是一个参数,表明他们正在购买什么产品。 – dcolumbus 2012-02-02 21:24:12

+0

@dcolumbus,请求中是否有敏感数据并不重要。重点是不应该有任何请求不通过HTTPS(如果你总是希望通过HTTPS),那么任何发送一个简单请求的东西都将是一个错误。强制中断可以帮助您检测到错误并防止错误的假设(也许有一天您会错误地将敏感数据放入请求中)。 – Bruno 2012-02-02 21:28:58

+0

我想要做的就是确保当用户被引导到'/ cart /'时,我们强制启用SSL。如果没有SSL,他们也无法完成整个流程。 – dcolumbus 2012-02-02 21:30:43

1

尝试添加该之前其他规则(但RewriteBase后)内的任何:

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

我得到310“太多重定向”错误。啊。有任何想法吗? – dcolumbus 2012-02-02 21:22:15

+0

有什么重定向https回http?你的日志说什么? – 2012-02-02 21:26:57

+0

/home/108777/domains/mydomain.com/html/.htaccess:重定向到非URL – dcolumbus 2012-02-02 21:44:08