当前位置:  开发笔记 > 编程语言 > 正文

登录/会话cookie,Ajax和安全性

如何解决《登录/会话cookie,Ajax和安全性》经验,为你挑选了1个好方法。

我正在尝试为基于ajax的登录表单确定最安全的方法来进行身份验证并设置客户端cookie.我见过有关XSS攻击的事情,比如:

HttpOnly cookie如何处理AJAX请求?

http://www.codinghorror.com/blog/archives/001167.html

所以,我想我的核心问题是......

1)使用纯粹的ajax来设置cookie是否安全,如果是,那么最安全的方法是什么(httpOnly + SSL +加密值等)?

2)纯粹的ajax方法是否涉及设置cookie客户端?这一切都安全吗?

3)在所有主流浏览器/操作系统中以这种方式设置cookie是否可靠?

4)使用隐藏的IFrame是否更安全(调用网页来设置cookie)?

5)如果可能的话,是否有人为此编写代码(PHP是我的后端)?

我的目标是设置cookie并让它们可用于下次调用服务器而无需离开页面.

我真的想要确定共识,最安全的方式来做到这一点.最终,这个代码计划成为开源的,所以请不要使用商业代码(或者没有任何不能经得起公众监督的代码)

谢谢, - 托德



1> thomasrutter..:

    cookie需要在服务器端生成,因为会话将客户端绑定到服务器,因此令牌交换必须在某个阶段从服务器转到客户端.生成cookie客户端并不是真正有用,因为客户端不受信任的远程机器.

    可以在AJAX调用期间设置cookie.对于服务器(和网络),AJAX调用只是一个HTTP调用,服务器的任何HTTP响应都可以设置cookie.所以是的,可以启动会话以响应AJAX调用,并且cookie将由客户端正常存储.

    因此,您可以使用AJAX来执行登录过程,就像您可能只依赖于页面上的表单中的POST一样.服务器将以相同的方式看到它们,如果服务器设置cookie,浏览器将存储它.

    基本上,客户端Javascript永远不需要能够知道cookie的价值(如果没有,则更好的安全性,这可以通过最近的浏览器所尊重的"httponly"cookie扩展来实现).请注意,从客户端到服务器的进一步HTTP调用,无论是正常的页面请求还是AJAX请求,都会自动包含该cookie,即使它被标记为httponly且浏览器也会尊重该扩展.您的脚本无需"了解"cookie.

    您提到使用HTTPS(HTTP over SSL) - 阻止其他人在传输过程中读取信息或模拟服务器,因此防止密码或其他重要信息的纯文本传输非常方便.它还可以帮助防范基于网络的攻击,虽然它不会让你免疫CSRF可以引发你的一切,并且它根本不能保护你免受会话固定或XSS的攻击.因此,如果您使用HTTPS,我会避免将HTTPS视为修复程序:您需要对跨站点脚本和跨站点请求伪造保持警惕.

    (见1.我把它们结合起来)

    鉴于cookie是由服务器在其HTTP响应头中设置的,是的,它是可靠的.但是,为了使其跨浏览器兼容,您仍需要确保在AJAX不可用时可以登录.这可能需要实现仅在没有Javascript或AJAX不可用时才能看到的替代方案.(注意:现在在2014年,您不再需要担心AJAX的浏览器支持了).

    它不会改变安全性.没有必要,除了我之前看到之前使用隐藏的iframe'模拟'AJAX - 即对服务器进行异步调用.基本上,无论你做什么都没关系,它是服务器设置cookie,客户端将接受并返回cookie,无论它是否由AJAX执行.

在大多数情况下,无论您是否使用AJAX都不会影响安全性,因为所有真正的安全性都发生在服务器端,而对于服务器而言,AJAX调用就像非AJAX调用:不可信任.因此,您需要了解会话固定和登录CSRF等问题,以及影响整个会话的问题,如CSRF和XSS,就像您没有使用AJAX一样.使用AJAX时问题并没有真正改变,除了,我想,如果你不太熟悉它或者它更复杂,你可能会犯一个技术更多的错误.

答案于2014年9月更新


谢谢,这个回应正是我所寻找的 - 周到而且简直太棒了.我很感激. - 托德
推荐阅读
mobiledu2402852413
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有