cookie必须在服务器端生成,因为会话将客户端绑定到服务器,因此令牌交换必须在某个阶段从服务器到客户端。生成cookie客户端并不会真正有用,因为该客户端 是 不受信任的远程计算机。
可以在AJAX调用期间设置cookie。对于服务器(和网络),AJAX调用只是一个HTTP调用,服务器的任何HTTP响应都可以设置cookie。因此,可以,可以响应AJAX调用而发起会话,并且该cookie将由客户端正常存储。
因此,您可以使用AJAX进行登录过程,就像通过页面上的表单依靠POST一样。服务器将以相同的方式查看它们,如果服务器设置了cookie,浏览器将对其进行存储。
基本上,客户端Javascript永远不需要能够知道cookie的值(如果不这样做,则对安全性更好,这可以使用最近的浏览器认可的“ httponly”
cookie扩展来实现)。请注意,无论是正常的页面请求还是AJAX请求,从客户端到服务器的其他HTTP调用都将自动包含该cookie,即使其标记为httponly并且浏览器采用该扩展名也是如此。您的脚本不需要“了解”
cookie。
您提到使用HTTPS(基于SSL的HTTP)-防止其他人在传输过程中读取信息或模拟服务器,因此对于防止密码或其他重要信息的纯文本传输非常方便。它也可以帮助您防范基于网络的攻击,尽管它不能使您免受CSRF可能给您带来的一切困扰,也不能完全保护您免受会话固定或XSS之类的攻击。因此,如果您使用HTTPS,我会避免将其视为固定解决方案:您
仍然 需要对跨站点脚本和跨站点请求伪造保持警惕。
(请参阅1.我将它们组合在一起)
假定cookie是由服务器在其HTTP响应标头中设置的,是的,它是可靠的。但是,要使其跨浏览器兼容,您仍然需要确保在AJAX不可用时可以登录。这可能需要实现一种替代方法,该替代方法仅在没有Javascript或AJAX不可用时才可见。( 注意:现在是2014年,您不再需要担心浏览器对AJAX的支持了 )。
它不会改变安全性。除了我之前看到过用来“模拟” AJAX的隐藏iframe(即对服务器进行异步调用)之外,将不需要它。基本上,但是您没关系,这是由服务器设置Cookie,并且无论是否通过AJAX进行操作,客户端都会接受并返回Cookie。
在大多数情况下,无论是否使用AJAX都不会对安全性造成太大的影响,因为所有真正的安全性都发生在服务器端,并且对服务器而言,AJAX调用就像非AJAX调用一样:不可信任。因此,与不使用AJAX时一样,您需要意识到诸如会话固定和登录CSRF之类的问题,以及像CSRF和XSS这样影响整个会话的问题。使用AJAX时,这些问题并没有真正改变,除了,我想,如果您对某项技术不熟悉或比较复杂,则可能会犯更多的错误。
答案于2014年9月更新