当前位置: 首页 > 知识库问答 >
问题:

新选项卡和浏览器窗口中的CSRF令牌

韦飞尘
2023-03-14

我已通过以下方式在我的nodejs服务器上实施了CSRF攻击预防—

登录时的用户收到CSRF令牌和cookie(基于JWT的令牌存储在cookie中)。CSRF令牌是使用$从客户端发送的所有未来请求头的一部分。ajaxSetup

每当用户发出请求(GET或POST)时,我都会将客户端发送的cookie和csrf令牌(在标题中)与服务器上存储的cookie和csrf令牌进行比较,应用程序工作正常

但是,当登录用户打开新选项卡或新浏览器窗口时,客户端具有cookie,但其请求头中没有CSRF令牌。因此,服务器将此视为CSRF攻击并阻止请求

我的问题是——在不损害CSRF安全性的情况下,如何在多个浏览器选项卡和窗口上运行相同的会话,而不需要用户多次登录?

共有2个答案

赏成益
2023-03-14

我决定使用x-request-with标题。默认情况下,此标头是jquery中所有AJAX请求的一部分更多详细信息-
X-request-With头的意义是什么
https://security.stackexchange.com/questions/107906/alternative-to-anti-csrf-tokens-for-ajax-request-same-origin-policy这允许跨选项卡、跨窗口浏览,其中cookie用于用户身份验证,并检查x-request-with头以防止CSRF攻击。

杜焕
2023-03-14

不要对GET请求使用CSRF保护。要在GET请求中传递CSRF令牌,您必须将其放在URL本身中(例如在查询参数中),URL不是放置安全敏感信息的好地方。它们倾向于通过各种方式泄漏,尤其是在跟踪链接或从受保护的页面获取资源时发送的Referer标头。

您应该确保所有具有活动效果的操作(即,更改数据库中某些内容、写入文件系统或发送邮件的操作)仅通过POST请求公开,并使用CSRF令牌进行适当保护。没有任何积极影响的视图(如查看页面、搜索内容)应该可以通过GET访问,不需要CSRF保护。然后,用户可以打开一个新选项卡,浏览到带有表单的页面,而不会出现错误;表单将使用正确的参数生成,因此将提交OK。

附带问题:您正在使用CSRF保护的双重提交Cookie方法。这是。。。可以但不能像其他方法那样保护某些场景。

(具体来说,如果攻击者可以执行cookie固定攻击——例如通过利用邻居/子域上易受攻击的应用程序,或者通过HTTP对HTTPS站点的MitM攻击——他们可以通过让用户在请求参数中发送相同的值来绕过CSRF保护他们在上一步推送到用户。)

如果站点是敏感的,或者由于附近其他不太可信的应用程序而特别容易受到攻击,那么您可能希望考虑使用同步令牌替代方案,或者加密令牌(也可以仅用签名来完成;如果您不使用任何类型的会话存储,这是一个很好的选择)。

 类似资料:
  • 问题内容: 我想在网页上创建一个链接,该链接将关闭浏览器中当前活动的选项卡,而不关闭浏览器中的其他选项卡。 当用户单击关闭链接时,将出现一条警告消息,要求用户使用两个按钮“是”和“否”进行确认。如果用户单击“是”,则关闭该页面,如果“否”,则不执行任何操作。 怎么做到呢?有什么建议么? 问题答案: 您将需要Javascript来执行此操作。用途: 注意: 隐含当前选项卡。这等效于: 或者您可以指定

  • 我试图编写一个函数,它将接收一个“浏览器实例”(我指的是),并打开一个带有特定URL的新选项卡。 这是函数: 返回True(如果URL有效) 如果有人能告诉我我做错了什么,我将非常感激。如果您有其他方法来完成打开新选项卡的任务,这是可以的。顺便说一下,我曾尝试使用:,但没有成功(我没有得到新的选项卡,也没有异常)

  • 我试图在Chrome中使用Webdriver 2.0添加一个新选项卡,但无法获得结果。我关注了不同论坛上提供的几个答案。由于我对java非常陌生,而且可用的答案更具体到java脚本,因此我发布了这个查询,以尽可能获得一个简单的解决方案。 以下语句不触发任何操作,但Selenium中的结果显示通过。driver.find元素(By.tag名称("body")). sendKeys(Keys.控制"t

  • 本文向大家介绍关闭浏览器窗口/选项卡时如何删除localStorage项目?,包括了关闭浏览器窗口/选项卡时如何删除localStorage项目?的使用技巧和注意事项,需要的朋友参考一下 要在浏览器关闭时清除localStorage数据,可以使用window.onunload事件检查选项卡关闭。 假设为了这个示例,您有一个名为MyStorage的本地存储对象作为全局对象。然后您可以编写一个事件处理

  • 我遇到了一个有用的PDF生成代码,用于在Spring MVC应用程序中向客户机显示文件(“使用Spring MVC返回生成的PDF”): 我添加了一个声明,该方法返回一个PDF文件(“Spring 3.0 Java REST return PDF Document”):。 我的问题是,当上面的代码执行时,它立即要求客户机保存PDF文件。我希望PDF文件首先在浏览器中查看,这样客户端就可以决定是否保

  • 问题内容: 我有来自第三方开发人员的JavaScript文件。它具有一个具有链接的链接,该链接将当前页面替换为目标页面。我想在新标签页中打开此页面。 这是我到目前为止所拥有的: 谁能帮我吗? 问题答案: