我使用zend 1框架,我有多次使用ajax的表单,我用csrf保证它,但在第一次请求csrf标记将过期后,我需要新的一个。从服务器端传递新的csrf标记并将其用于新的ajax调用的前端是否安全?从ajax响应中获取新的csrf哈希令牌是否安全?
回答
滚动的CSRF令牌总是一个糟糕的设计,因为如果用户打开了多个窗口,就会出现CSRF令牌当前有效的争用条件。
实施任何安全系统时,请尝试使用现有的库或有据可查的技术。不要从臀部拍摄,请阅读CSRF prevention Cheat sheet。
旋转的CSRF令牌不会提高安全性,因为相同的旁路技术总是会获得当前的CSRF令牌。所有CSRF缓解都依赖于Same-Origin Policy - 如果您的应用程序具有SOP旁路功能(例如弱crossdomain.xml文件或不安全CORS规则集或XSS),则攻击者可以使用此漏洞读取任何HTTP响应。对于任何给定的Web应用程序,某些HTTP响应必须具有CSRF标记,并且可以使用SOP旁路来读取此标记并伪造浏览器和Web应用程序之间的交互。
使用何种类型的CSRF缓解无关紧要 - 总是可以使用XSS来强制浏览器执行用户可以执行的任何操作。如果一个对反射式XSS易受攻击的请求也需要一个CSRF令牌,那么它将很难或不可能被利用。为此,CSRF & XSS有一种岩石剪刀关系。
如果您遇到防伪标记行为方面的问题,您是否考虑过使用SameSite Cookie标志?
长话短说。当您发送一个跨域请求时(例如,站点A向站点B发送请求),您的浏览器将足够友好以检查您是否拥有该站点的Cookie,因此,您可能容易受到XSRF攻击。我们使用防伪令牌在发送请求的有效实体和服务器之间创建共享密钥。但正如你所看到的,执行过程中可能会有一些问题。
另一方面,同一站点Cookie标志允许您配置Cookie如何通过跨源请求发送。有两种模式,严格模式和宽松模式。
在严格模式下,您的cookies永远不会通过跨源请求发送。这似乎是一个很好的方法,但你也需要考虑到cookie不会通过GET请求发送,所以如果有人被重定向到你的站点,他将需要再次登录,因为cookie没有被发送请求。
宽松模式几乎相同,但它允许您的cookie通过安全的HTTP动词(GET,HEAD,OPTIONS和TRACE)发送,因此您可以防止POST/PUT CSRF攻击,但是您用户通过GET请求浏览仍然会有很好的行为。
编辑:只要添加即使SameSite cookie标志听起来像是一个非常好的选项,它只能由Chrome和Opera实现,所以如果您的用户群是使用各种不同浏览器和不同浏览器的人版本,它可能不是您的应用程序的最佳选择。
- 1. CSRF令牌春季安全
- 2. csrf令牌,安全问题?
- 3. 通过AJAX获取CSRF令牌
- 4. IsInRole获取新的安全令牌
- 5. 如何从表单提交的ajax响应获取哈希url?
- 6. 响应路由器中的csrf令牌
- 7. Ajax是否要求CSRF安全?
- 8. 在Listner中获取CSRF令牌symfony
- 9. Laravel SPA应该使用CSRF令牌来保证安全吗?
- 10. Rails CSRF令牌 - 它们是否过期?
- 11. Spring安全中每个请求的不同csrf令牌
- 12. 从Ruby中的Facebook Open Graph响应获取访问令牌
- 13. Spring Security获得CSRF令牌
- 14. 如何在AJAX中使用Zend Framework窗体哈希(令牌)
- 15. 它在安全性方面是否会影响哈希和加密的顺序?
- 16. 在C#中,是否可以从文件名安全的字节数组中获取哈希值?
- 17. 使用Ajax的无效CSRF令牌
- 18. ajax请求上的CSRF令牌
- 19. Laravel CSRF令牌AJAX渲染的内容
- 20. 从QString获取Sha1哈希
- 21. 安全哈希方法
- 22. Firebase安全和哈希
- 23. Google Auth2给出“invalid_request”响应获取访问令牌和刷新令牌
- 24. 在Saml响应中从OpenAm获取身份验证令牌.id
- 25. 从JSON服务器响应中获取令牌
- 26. 笨,CSRF令牌
- 27. 如何使用Powershell获取证书的安全哈希算法
- 28. 如何在WCF soap响应中实现安全令牌?
- 29. 如何从哈希中获取下一个哈希元素?
- 30. Django的CSRF令牌
-1 SameSite是一个RFC草案,它并不是所有浏览器都支持的,并且一年四季都没有准备好生产。我将在常用的5年中删除-1。 – rook
@rook要给你这一点,我忘记澄清,至少现在,SameSite cookie标志只被Chrome和Opera实现。 –