如果在基于cookie的访问限制的站点上使用AJAX, JavaScript需要访问cookie。HttpOnly cookie在AJAX站点上工作吗?

编辑:微软创建了一种防止XSS攻击的方法,如果指定了HttpOnly,则不允许JavaScript访问cookie。FireFox后来也采用了这种方法。所以我的问题是:如果你在一个网站上使用AJAX,比如StackOverflow, Http-Only cookie是一个选项吗?

编辑2:问题2。如果HttpOnly的目的是防止JavaScript访问cookie,并且您仍然可以通过XmlHttpRequest对象通过JavaScript检索cookie,那么HttpOnly的意义是什么?

编辑3:以下是维基百科上的一段话:

当浏览器接收到这样的cookie时,它应该在接下来的HTTP交换中像往常一样使用它,但不使它对客户端脚本可见HttpOnly标志不是任何标准的一部分,也不是在所有浏览器中都实现的。请注意,目前没有阻止通过XMLHTTPRequest读写会话cookie。[33]。

我理解这份文件。当你使用HttpOnly时,cookie会被阻塞。但是,您似乎仍然可以在XMLHttpRequest对象中读取cookie值,从而允许XSS。HttpOnly如何让你更安全?通过使cookie本质上只读?

在您的示例中,我无法写入您的文档。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的一个bug。IE6和ie7是目前唯一完全支持HttpOnly的浏览器。

重申一下我所学到的一切:

HttpOnly限制对文档的所有访问。在IE7和FireFox(不确定其他浏览器)的cookie HttpOnly从IE7中的XMLHttpObject.getAllResponseHeaders()中的响应头中删除cookie信息。 XMLHttpObjects只能提交到它们产生的域,因此没有跨域发布cookie。

编辑:此信息可能不再是最新的。


当前回答

因此,我假设JavaScript需要访问您的cookie。

来自浏览器的所有HTTP请求都会传输有关站点的cookie信息。JavaScript可以设置和读取cookie。从定义上看,Ajax应用程序并不需要cookie,但大多数web应用程序都需要cookie来维护用户状态。

对你的问题的正式回答——“如果使用AJAX, JavaScript是否需要访问cookie ?”-因此是“no”。例如,考虑使用Ajax请求提供自动建议选项的增强搜索字段。在这种情况下,不需要cookie信息。

其他回答

不一定,这取决于你想做什么。你能详细说明一下吗?AJAX不需要访问cookie来工作,它可以自己发出请求来提取信息,AJAX调用的页面请求可以访问cookie数据并将其传递回调用脚本,而无需Javascript直接访问cookie

不,AJAX调用请求的页面也可以访问cookie &那是用来检查你是否登录的。

你可以用Javascript做其他身份验证,但我不相信它,我总是喜欢把任何类型的身份验证检查在后端。

澄清一下——从服务器的角度来看,AJAX请求所请求的页面本质上与用户单击链接所完成的标准HTTP get请求没有什么不同。所有正常的请求属性:user-agent、ip、session、cookie等都被传递给服务器。

当您进行AJAX调用时,浏览器会自动处理cookie,因此Javascript不需要处理cookie。

因此,我假设JavaScript需要访问您的cookie。

来自浏览器的所有HTTP请求都会传输有关站点的cookie信息。JavaScript可以设置和读取cookie。从定义上看,Ajax应用程序并不需要cookie,但大多数web应用程序都需要cookie来维护用户状态。

对你的问题的正式回答——“如果使用AJAX, JavaScript是否需要访问cookie ?”-因此是“no”。例如,考虑使用Ajax请求提供自动建议选项的增强搜索字段。在这种情况下,不需要cookie信息。