新标签页和浏览器窗口中的 CSRF 令牌

2024-06-19

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

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

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

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

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


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

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

附带问题:您正在使用双重提交 Cookie https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)_Prevention_Cheat_Sheet#Double_Submit_CookiesCSRF保护方法。这是......好吧......但不能保护其他方法所做的某些场景。

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

如果该网站是敏感网站,或者由于附近有其他不太受信任的应用程序而特别容易受到此影响,您可能希望考虑使用同步器令牌 https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)_Prevention_Cheat_Sheet#General_Recommendation:_Synchronizer_Token_Pattern替代方案,或加密令牌 https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)_Prevention_Cheat_Sheet#Encrypted_Token_Pattern(也可以通过签名来完成;如果您不使用任何类型的会话存储,这是一个不错的选择)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

新标签页和浏览器窗口中的 CSRF 令牌 的相关文章

  • Mac 应用程序商店 - 尝试让加密发挥作用。 。 。我缺少什么?

    我正在尝试使用 Alan Quartermain 的解决方案 如该问题所链接 Mac App Store 收据验证码 https stackoverflow com questions 4261348 mac app store recei
  • Chrome开发者工具中不显示cookie

    i am using node express server and angularjs as frontend server sets the cookie and is shown correctly in the network re
  • Lisp reader 输入中的关键字有危险吗?

    在 Doug Hoyte 的 Let Over Lambda 的第 102 页上 作者这样描述他的安全读取字符串函数 这意味着向量 位向量 gensym 循环引用 和所有其他的都被淘汰了 安全读取字符串甚至不允许关键字或外国包符号 我绞尽脑
  • 使用 cookie 制作 Ruby Net::HTTP::Get 请求

    我想通过 ruby 打开我的 stackoverflow com 页面 我希望看到它就好像我已经过身份验证一样 I took usr来自 Google Chrome 的 cookie 并创建了以下代码片段 require net http
  • $.Post 不包含任何回复

    我有一个 php来自另一台处理数据的服务器的文件 该数据已制成表格 所以每当我使用调用此页面时 post如果参数正确 它的反应就不会是什么 我检查了我的代码 也许标题是对此负责的 我实际上想要的是返回我的表格数据 以便我可以将其填充到另一个
  • 有没有办法强制apache返回404而不是403?

    有没有办法将 Apache Web 服务器配置为返回 404 未找到 错误代码 而不是对于我想要禁止访问的某些特定目录返回 403 禁止 我发现一些建议使用 mod rewrite 的解决方案 例如 RewriteEngine On Rew
  • 如何将 openssl_pkey_get_public 和 openssl_verify 转换为 C# .NET

    PHP 代码验证来自银行的 iPizza 签名 key openssl pkey get public file get contents preferences bank certificate if openssl verify dat
  • 如果有人提交“恶意软件”nuget 包怎么办?

    我检查了Nuget提交流程 http docs nuget org docs creating packages creating and publishing a package 并且没有找到任何有关基本检查或审查流程的信息 那么 如果有
  • 应用程序网关前面的 Azure 前门

    我已在应用程序网关的前面部署了 Azure Front Door 现在 我想通过 Front Door 路由所有流量 并限制对应用程序网关的公共 IP 地址的直接访问 怎么做 这就是我想做的 https i stack imgur com
  • ColdFusion 管理员登录和密码恢复

    我最近接手了 CF 网站的开发 但在获取 CF 管理员的登录名和密码时遇到了一些问题 我希望另一个 StackOverflower 能够对获取访问权限有一些见解 我们可以访问 FTP 和任何其他托管相关详细信息 任何有用的见解将不胜感激 打
  • PHP 会话 ID——它们是如何生成的? [复制]

    这个问题在这里已经有答案了 当我打电话时session start or session regenerate id PHP 为会话 ID 生成看似随机的字符串 我想知道的是 它只是一个随机的字符序列 还是像uniqid 功能 因为如果只是
  • PHP 中的 MD5 替代方案? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 与 Postgres 的 TCP 连接安全吗?需要 SSL 吗?

    早上好 我正在浏览 Postgresql 配置文件 最近注意到有一个ssl选项 我想知道什么时候需要这样做 假设您有一个应用程序服务器和一个数据库服务器 不在专用网络内运行 如果用户尝试登录 如果未启用 SSL 应用程序服务器在查找用户密码
  • 获取 get 或 post 请求的响应的响应字符集

    我正在努力在 java web 应用程序中提取响应字符集 我在其中使用 Apache HTTP 客户端 例如 从 Content Type 标头获得的一个可能值是 text html charset UTF 8 然后我的代码将提取 符号之后
  • 使用 MongoDB PHP 驱动程序时的安全问题

    我有在 MYSQL 上保护 sql 注入的经验 但是在使用 php 驱动程序的 MongoDB 上我应该注意什么 在大多数页面中 我通过 GET POST 和搜索 插入系统获取数据 我通过 UDID 其他字段进行搜索 并且可以插入任何字符串
  • 客户端和服务器之间的安全连接

    我正在开发一个服务器组件 它将为嵌入式客户端的请求提供服务 这也在我的控制之下 现在一切都是测试版 安全性是这样的 客户端通过 https 发送用户名 密码 服务器返回访问令牌 客户端使用自定义标头中的访问令牌通过 http 发出进一步请求
  • 使用存储过程访问数据可以提供哪些安全优势?

    我看到一些指南建议您通过存储过程对所有数据访问进行分层来保护数据库 我知道对于 SQL Server 您可以保护表甚至列免受 CRUD 操作的影响 例如 Logged in as sa USE AdventureWorks GRANT SE
  • 用于存储和检索每个用户敏感数据的.Net 设计模式

    Net 服务器应用程序是否有与存储和检索敏感的每个用户信息 例如第 3 方凭据 相关的参考模式 我的初步设计思路是 生成具有适当强私钥的自签名 X509 证书 导出证书和密钥并将其存储在 USB 密钥中 该 USB 密钥将被锁在宝箱中并由龙
  • 如何使用 HTTP 标头发送非英语 unicode 字符串?

    我是 HTTP 相关问题的新手 我的问题是在 iOS 开发中 我想使用 HTTP 标头发送一个字符串 所以我使用 httpRequest setValue nonEnglishString forHTTPHeaderField custom
  • 阻止对单个 Mercurial 存储库中特定分支的写访问

    是否可以在 Mercurial 中编写某种方式的钩子来拒绝影响存储库中特定命名分支的变更集 我们有一个托管项目 并希望允许任何开发人员将他们的更改推送到我们的存储库 只要他们位于他们自己的命名分支中 这使我们能够在同一存储库中管理单个构建机

随机推荐

  • putc 和 ungetc 和有什么区别?

    int ungetc int c FILE fp 将字符 c 推回 fp 并返回 c 或EOF对于一个错误 其中 intputc int c FILE fp 将字符 c 写入文件 fp 并返回写入的字符 或者EOF对于一个错误 这些是 K
  • jQuery Mobile - 停止缓存

    就我而言 链接加载到特殊 div 的包装器中 这些包装器是其链接的父级 我通过pageload event 当 JQuery Mobile 执行 AJAX 请求时一切正常 但是如果我点击访问的链接 jquery mobile不会发送请求 而
  • 缓存 firestore 中 get 的第一个实现

    我希望 firestore 每次都先从缓存中获取数据 根据 Firestore 文档 传递 缓存 或 服务器 选项必须启用相同的功能 下面的例子 db collection cities where capital true get cac
  • 如何模拟OutOfMemory异常

    我需要重构我的项目以使其免受OutOfMemory例外 我的项目中使用了巨大的集合 通过更改一个参数 我可以使我的程序更加准确或使用更少的内存 好吧 这就是背景 我想做的是循环运行例程 使用默认参数运行子例程 抓住OutOfMemory异常
  • 未来如何开发旧版 Firefox 插件?

    火狐浏览器正朝着网络扩展 https developer mozilla org en US Add ons WebExtensions标准承诺提高稳定性 跨浏览器兼容性和更高的安全性 与此同时 他们逐渐放弃对旧版附加组件 引导扩展 附加
  • Google Charts(AreaChart)如何检测缩放变化

    我正在画一个面积图 在覆盖层上有一些标记 我正在使用explorer选项 仅限水平 以便用户放大和缩小 问题是我找不到一种方法来通知缩放更改 以便有机会更新制造商位置 有一个图表范围变化事件 但它不是由 AreaChart 触发的 我尝试检
  • Streamjs和linqjs有什么关系

    读完SICP后 我最近发现streamjs https github com dionyziz stream js 开发商参考linqjs http linqjs codeplex com 作为具有不同语法的替代实现 但我无法建立连接 St
  • ngx-DataTable 对列进行排序无法正常工作 Angular 4

    虽然我对角度非常陌生 但我在使用 ngx DataTable 时遇到了一些困难 我使用简单的 ngx DataTable 进行简单的操作 问题出在列上 尽管我已将 attr 声明为 sortable true 但排序不起作用 这是代码 表定
  • 正确使用 JDBC 连接池 (Glassfish)

    我需要在 Java Web 服务中作为会话 bean 实现数据库连接 但我不确定我这样做是否正确 我创建了一个类 public final class SQLUtils private static DataSource m ds null
  • Python Selenium 打印另存为 PDF 等待文件名输入

    我正在尝试通过打印对话框将网站另存为 PDF 我的代码允许我另存为pdf 但要求我输入文件名 我不知道如何将文件名传递到弹出框 附上我的代码 import time from selenium import webdriver import
  • 当页面上已有tinymce实例时,动态添加tinymce编辑器

    这是我已经问过的这个问题的后续 动态添加tinymce编辑器 https stackoverflow com questions 19157574 add a tinymce editor dynamically 我有一个包含编辑器的页面
  • 具有材料设计的Angularjs无法实例化模块ngMaterial

    我已经使用 Bower 安装了 AngularJS 和 MaterialJS 凉亭安装角材料 并将 ngMaterial 注入我的应用程序 但出现此错误 Uncaught Error injector modulerr Failed to
  • 限制数据框中所有单元格的字符串长度?

    您好 有没有一种方法可以限制 data frame 中所有列的字符串文本大小 而不必循环遍历每一列并一次使用 str trunc 之类的东西 例如下面的数据框 我可以将所有文本大小限制为仅 5 个字符 而不必一次只执行一列吗 如果有 50
  • 如何修复 Android 7.0 的 Spinner 模式下的 DatePickerDialog?

    我目前正在开发一个简单的项目 其中包含一个包含在 Web 视图中的网站 具有少量交互 以提高网站本身和 Android 移动设备之间的交互性 由于该网站包含用户生日的日期输入字段 因此我希望实现一个与所有设备兼容的旋转格式的日期选择器 我尝
  • 使用 Gradle 进行 Travis-CI Android 测试总是超时

    我正在尝试在 Travis CI 上构建和测试我的项目 它每次都会在我的所有存储库上向我显示相同的重复输出 这是我的 travis ymlhttps github com carts uiet cartsbusboarding blob m
  • 动态表中每个按钮的 Jquery-Ui 对话框表单

    我正在生成一个 HTML 表 每行都有一个按钮 必须打开 Jquery ui 对话框表单 The table table class table table reporting table condensed table striped t
  • 通过 jquery/javascript 在警报或确认对话框中单击“确定”?

    我正在考虑在backbone js 和jquery 中编写一些UI 测试 它们可能不是最好的方法 但这是我正在考虑的事情 通过纯代码自动化测试而无需记录和回放 使用这种方法唯一让我摸不着头脑的是 在某些 用例流程 执行的 中 会出现确认 警
  • 使用 Pandas 从 csv 文件读取标题信息

    我有一个包含 14 行标题的数据文件 在标头中 有经纬度坐标和时间的元数据 我目前正在使用 pandas read csv filename delimiter header 14 读取文件 但这只是获取数据 我似乎无法获取元数据 有人知道
  • javascript 和 PHP 中的正则表达式有什么区别吗?

    这是在 javascript 中验证电子邮件地址的正则表达式 我不确定是否可以直接在 PHP 中使用它 a z d u00A0 uD7FF uF900 uFDCF uFDF0 uFFEF a z d u00A0 uD7FF uF900 uF
  • 新标签页和浏览器窗口中的 CSRF 令牌

    我通过以下方式在我的nodejs服务器上实现了CSRF攻击预防 登录时的用户会收到 CSRF 令牌和 cookie 存储在 cookie 中的基于 JWT 的令牌 CSRF 令牌将成为客户端发送的所有未来请求标头的一部分 ajaxSetup