一旦请求发送到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执行的操作,不会做任何有用的事情,实际上可以帮助您更清楚地看到错误。因为如果链接正确实施,用户永远不会终止那里,这对他们来说不是问题。
请求中没有任何敏感数据...我一起发送的唯一内容是在URL中,它是只是一个参数,表明他们正在购买什么产品。 – dcolumbus 2012-02-02 21:24:12
@dcolumbus,请求中是否有敏感数据并不重要。重点是不应该有任何请求不通过HTTPS(如果你总是希望通过HTTPS),那么任何发送一个简单请求的东西都将是一个错误。强制中断可以帮助您检测到错误并防止错误的假设(也许有一天您会错误地将敏感数据放入请求中)。 – Bruno 2012-02-02 21:28:58
我想要做的就是确保当用户被引导到'/ cart /'时,我们强制启用SSL。如果没有SSL,他们也无法完成整个流程。 – dcolumbus 2012-02-02 21:30:43