如果在基于cookie的访问限制的站点上使用AJAX, JavaScript需要访问cookie。HttpOnly cookie在AJAX站点上工作吗?
微软创建了一种防止XSS攻击的方法,如果指定了HttpOnly,则不允许JavaScript访问cookie。FireFox后来也采用了这种方法。所以我的问题是:如果你在一个网站上使用AJAX,比如StackOverflow, Http-Only cookie是一个选项吗?
问题2。如果HttpOnly的目的是防止JavaScript访问cookie,并且您仍然可以通过XmlHttpRequest对象,HttpOnly的意义是什么?
下面是来自维基百科的一段话:
当浏览器接收到这样的cookie时,它应该在接下来的HTTP交换中像往常一样使用它,但不使它对客户端脚本可见
HttpOnly
标志不是任何标准的一部分,也不是在所有浏览器中都实现。请注意,目前没有阻止通过XMLHTTPRequest读写会话cookie。[33]。
我理解当你使用HttpOnly时,document.cookie
被阻塞。但是,您似乎仍然可以在XMLHttpRequest对象中读取cookie值,从而允许XSS。HttpOnly如何让你更安全?通过使cookie本质上只读?
在你的例子中,我不能写入你的document.cookie
,但我仍然可以窃取你的cookie,并使用XMLHttpRequest对象将其发布到我的域。
<script type="text/javascript">
var req = null;
try { req = new XMLHttpRequest(); } catch(e) {}
if (!req) try { req = new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) {}
if (!req) try { req = new ActiveXObject("Microsoft.XMLHTTP"); } catch(e) {}
req.open('GET', 'http://stackoverflow.com/', false);
req.send(null);
alert(req.getAllResponseHeaders());
</script>
编辑4:对不起,我的意思是你可以发送XMLHttpRequest到StackOverflow域,然后保存getAllResponseHeaders()的结果到一个字符串,regex出cookie,然后发布到一个外部域。看来维基百科和哈。在这一点上,很多人都同意我的观点,但我想接受再教育……
啊哈,显然两个站点都错了,这实际上是一个FireFox漏洞。IE6,7实际上是目前唯一完全支持HttpOnly的浏览器。
重申一下我所学到的一切:
编辑:此信息可能不再是最新的。