如果我们所有网站都是安全的(HTTPS),那么将Cookie上的secure
标志设置为多余?
如果我们的设置中只有安全网站,是否有设置/不设置secure
的优缺点?
答案 0 :(得分:7)
不,这不是多余的。
请考虑以下情况。
情况正常:
User --> Your Website (example.com)
Man-In-The-Middle情况:
User --> MITM --> Your Website (example.com)
如果您的网站在端口80上侦听普通HTTP,而端口443在HTTPS上侦听,则MITM必须将HTTPS流量从用户传递到您的网站作为纯TCP数据,否则用户将获得证书警告到期事实上,攻击者没有example.com
SSL / TLS证书的私钥。
但是,它们仍然可以拦截端口80上的普通HTTP流量。因此,如果example.com
设置了cookie
AuthenticationSession=0d8d7050f48dc858975c48d32796cd2e5bad2d18
没有安全标志,攻击者仍然可以在端口80上拦截它。
如果您的网站在端口80上没有收听,情况如下。
User -tcp80--> MITM
User -tcp443-> MITM -tcp443-> Your Website (example.com)
所以,尽管端口80上没有任何东西在监听,但攻击者可以注入以下内容
<img src="http://example.com/foo.jpg" />
用户做出的另一个请求:
User -tcp80--> MITM --> example.org
导致以下情况发生:
User -tcp80--> MITM intercepting example.com
将Cookie发送给example.com
请注意,http://example.com:443
还会导致在服务器意识到尚未进行HTTPS握手之前发送cookie数据,并以明文形式公开cookie:
User --plain HTTP over tcp443--> example.com
在这种情况下,攻击者不必是中间人,他们可能只是被动地观察到example.com
的连接。
一旦攻击者获取了某个站点的主身份验证cookie,他们就可以有效地劫持用户的会话并以其身份登录。
如果要使安全标志冗余,请实施HSTS策略。这通知浏览器永远不会通过普通HTTP连接到您的网站,直到max-age
过期(比如180天)。
因此,任何试图在图像标记中注入普通HTTP URL的攻击者都会将此更改为HTTPS,因此除了服务器之外的其他任何内容都将使其无法读取。这是known as a 307 internal redirect:
这是[浏览器]说的 “我甚至不打算发出这个请求,而是我要改变 它到HTTPS然后再试一次“
然而,作为深度防御方法并为旧浏览器提供支持,我仍然会包含Secure标记。
缺点?您将发送字符串中的字节数&#34; ; secure
&#34;额外的,但仅限于设置cookie时。如果你需要在普通的HTTP上使用cookie,你就不能。
答案 1 :(得分:3)
如果我们所有网站都是安全的(HTTPS),那么将Cookie上的安全标记设置为多余吗?
不,不是。
安全标志可防止cookie通过HTTP发送。
即使您的服务器根本没有侦听端口80(并且大多数HTTPS站点也有一个重定向到HTTPS端的HTTP站点),尝试连接到端口的客户端80可能受到中间人攻击。
赞成
它保护cookie
缺点
它花费了无关紧要的字节数。
答案 2 :(得分:1)
安全标记的要点是浏览器永远不会通过普通的http发送cookie,无论应用程序开发人员是否打算仅通过https发送它。考虑一种攻击,例如在html编辑器表单中,攻击者可以插入图像。如果他添加了带有http://server来源的图像,则除非设置为安全,否则将以明文形式发送cookie。当然,可能有无数其他方法尝试注入简单的http请求。
如果应用程序服务器只侦听tcp / 443,那对攻击者来说就更难了(他仍然可以尝试像http://server:443这样的事情,看看服务器丢失明显无效的连接的速度有多快)。将所有cookie设置为安全仍然是最佳做法。
所以这不仅仅是关于中间人。