强制使用特定url的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 … so /cart/
以及/cart/
一旦请求发送到http://www.mydomain.com/cart/
,如果请求中有敏感数据,则为时已晚。 强迫它打破! 至less,它会给你一个迹象,说明你的链接有问题。 更多细节在以前的答案:
当请求到达服务器时,已经太晚了。 如果有一个MITM,他已经做了他的攻击(或其中的一部分),然后才能得到请求。
那么你可以做的最好的是没有任何有用的内容回复。 在这种情况下,redirect(使用301或302和位置标题)可能是适当的。 但是,如果用户(甚至是开发人员)忽略警告(在这种情况下,浏览器将遵循redirect并几乎透明地重试请求),则可能会隐藏问题。
因此,我只是build议返回一个404状态:
http://yoursite/
和https://yoursite/
实际上是两个不同的站点。 没有理由期望从一个URI空间到另一个URI空间的所有资源的1:1映射(就像你对ftp://yoursite/
有完全不同的层次结构一样)。- 更重要的是,这是一个应该被上游处理的问题:使用
http://
导致用户使用这个资源的链接应该被视为破坏。 不要让它自动工作。 拥有不应该存在的资源的404状态很好。 另外,出现错误时返回一条错误消息是很好的:它会迫使你(或者至less提醒你)作为一个开发者,你需要修复导致这个问题的页面/表单/链接。
编辑:(例子)
假设您有http://example.com/
,即网站的非安全部分,允许用户浏览项目。 他们没有login在这个阶段,所以它可以通过普通的HTTP来完成。
现在是购物车/付款时间。 你需要HTTPS。 您将用户发送到https://example.com/cart/
。 如果发送用户到购物车部分的链接之一使用普通的HTTP(即http://example.com/cart/
),这是一个发展错误。 它不应该在那里。 当你认为你将要被发送到https://example.com/cart/
时,让这个过程中断,让开发者看到它(并且一旦修复,用户就不会有问题)。
如果它只是指向您网站的HTTPS部分(通常是通过某个链接进行的HTTP GET),那么这不是一个很大的风险。
自动redirect变得更加危险的地方在于它们隐藏更大的问题。
例如,您使用的是https://example.com/cart/creditcarddetails
并且已经填写了一些应该保留在SSL上的信息。 但是,开发人员犯了一个错误,在表单中使用了一个普通的http://
链接。 另外,开发者(毕竟是用户/人)在Firefox中点击“不要再显示此消息”时,它会显示“警告:您正在从安全页面转到非安全页面”(顺便说一句,不幸的是,Firefox警告后天:它已经提出了不安全的请求,当它显示用户该消息)。 现在,具有敏感数据的GET / POST请求首先被发送到不正确的普通http://
链接,自动重写通知浏览器通过https://
再次尝试请求。 看起来很好,因为就用户而言,这一切都发生在几分之一秒内。 但是,这并不是:敏感数据被明确发送。
只要通过HTTPS做简单的HTTP部分就不会做任何有用的事情,实际上可以帮助您更清楚地看到错误。 因为如果链接正确执行,用户永远不应该终止,这对他们来说不是问题。
尝试在其他规则之前添加(但在RewriteBase之后):
RewriteCond %{HTTPS} off RewriteRule ^cart/(.*)$ https://www.mydomain.com/cart/$1 [R,L]