问题标签 [csrf-protection]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
5791 浏览

php - CSRF 令牌与多个选项卡发生冲突

我在我的应用程序中构建了CSRF保护,只需在每次页面加载时生成一个随机令牌,将其放入会话中,然后将令牌绑定到<body>tag 属性,如:

然后在每个表单操作或 ajax 请求上,我只需从 body 标记中获取令牌并将其发送。

这很好用,除了一个大问题。用户正在打开应用程序的多个选项卡,我看到了令牌冲突。例如,用户加载第一个页面并生成一个令牌,然后他们切换选项卡,加载另一个页面,这会生成一个新令牌。最后他们切换回第一页并提交格式操作。这会导致无效的 CSRF 令牌错误。

什么是重新设计它以防止与多个选项卡发生冲突,同时保持它尽可能安全的最佳方法。

是在登录正确的解决方案时简单地生成一个令牌,而不是在每次页面加载时生成一个新令牌?

0 投票
1 回答
306 浏览

ruby-on-rails - 如何从一个 Rails 应用程序向另一个应用程序发出 POST 请求?

我有 2 个 ruby​​ on rails 项目,一个有表格并将其发布到另一个项目。然后,另一个项目应将其转换为模型、报价并保存。

我用 create 方法制作了一个报价资源和一个控制器。表单的操作是其他项目/报价和方法发布。据我了解,这应该调用报价控制器中的 create 方法。

但是我收到此错误:

有谁知道是什么导致了这个错误?是heroku引起的还是与我的应用程序有关?我对 rails/heroku 还很陌生,所以我不确定,任何帮助都将不胜感激。

编辑 1 经过一些研究,我似乎需要真实性令牌来匹配。但是,由于我有两个应用程序,这是如何实现的?

0 投票
1 回答
1879 浏览

asp.net-mvc - WebAPI 的条件过滤器提供程序

我有一个 ASP.NET MVC / WebAPI / AngularJS 应用程序,我想在其中实现 CSRF 保护。我已经找到了一些很好的解决方案,但我错过了一个难题。我希望能够自动将自定义 AuthorizationAttribute 应用于 API 非安全方法(POST、PUT 等)。我希望有人能帮帮忙。

在 MVC 方面,我将 MVC AntiForgeryToken 与Phil Haacked 的 ConditionalFilterProvider结合使用,配置为将 ValidateAntiForgeryToken 属性应用于所有 POST 方法。该技术在这篇文章中进行了解释。下面列出了 ConditionalFilterProvider 的代码:

对于 WebAPI,我使用了AngularJS 的 CSRF 保护机制,将其与一些帮助类打包在一起以便在服务器上轻松实现,并且我使用自定义 AuthorizeAttribute 装饰 API 方法,如此所述。

所有这些都按预期工作,但我想更进一步。按照用于 MVC 控制器的模式,我想创建一个可与 WebAPI 控制器一起使用的 ConditionalFilterProvider,以便我可以确保所有 POST 方法都使用我的自定义 AuthorizeAttribute 自动修饰。

但是,尽管我已经尝试为 WebAPI 创建 ConditionalFilterProvider,但我不确定我是否正确,也无法测试它,因为我不知道如何注册它。我想出的是:

并在 Application_Start 中注册它(这不起作用):

0 投票
2 回答
1455 浏览

angularjs - 文件上传帖子的 CSRF 保护

我有一个 angularJS 应用程序,在该应用程序中,我对所有 POST、PUT 和其他非安全 Web 服务调用使用Angular 的 CSRF 保护机制。除了一种情况外,它运行良好:将文件上传到服务器的 multipart/form-data POST。

在这种情况下,当我将表单和文件数据直接发布到 Web 服务时,不涉及角度 $http 服务,因此不会像处理 XHR 请求那样将 CSRF 标头附加到请求中。

我有一些问题:

  • 我需要保护这个帖子免受 CSRF 的影响吗(我想我需要)
  • 我可以/如何让 Angular 将 CSRF 标头添加到 POST 请求中?
0 投票
1 回答
1514 浏览

node.js - 如何在 express3 中启用 csrf?

一般来说,我对表达和 nodejs 很陌生。我想知道如何启用 csrf 保护?问题是对于不同的版本有很多不同的教程,而且它完全不能向后兼容。

我已经尝试了几种方法,但它们似乎不起作用,这就是我现在所拥有的。问题是在我的表单中,csrf 值为空。

应用程序.js

admin/login.jade

0 投票
1 回答
458 浏览

php - 如何在 facebook 和 Google 等 php 中创建静态 CSRF 令牌?

我正在尝试用 PHP 构建一个受 CSRF 保护的 Web 应用程序。我试图在会话中保留一个令牌供用户使用一次,以保护他们的安全。现在的问题是,每当我刷新页面或访问另一个页面时,我的令牌都会更改。我不希望它发生。我想设置单个会话令牌,以便用户可以访问网站而不会出现任何令牌不匹配的问题。我的会话代码是

现在,每当我刷新此会话页面时,它都会生成新令牌,我不希望令牌在每次刷新或新页面视图时都被更改。那么有人可以帮我解决这个问题吗?

0 投票
1 回答
155 浏览

php - 这如何使我的表单免受 csrf 攻击?

我有这个表格

令牌对每个用户都是唯一的。现在假设攻击者已登录并打开此页面。现在他知道当前会话令牌是什么,通过复制上面的值,攻击者拥有身份验证令牌。他可以轻松攻击我的网站。这个程序如何防止 csrf 攻击?

0 投票
1 回答
5558 浏览

django - csrf_exempt 不适用于 django auth

我正在为移动应用程序制作后端,并使用 Django 和 Userena 进行用户管理。我使用 Django REST 框架登录并注册,一切正常。我现在唯一需要做的就是实现“忘记密码”功能。我想使用 Userena 中已经实现的一个,但即使在使用 dectorator 之后,我也无法摆脱错误“CSRF 令牌丢失或不正确” csrf_exempt。我在做什么?

网址.py

passowrd_reset_form.html

0 投票
3 回答
20476 浏览

security - 单独使用 nginx 进行简单的 CSRF 保护

我有一个提供纯 HTML 和 JS 文件的 nginx 服务器。

然后,js 代码调用各种 REST API 从 API 服务器获取/发布数据。

如果 nginx 收到对 /api/ 位置的请求,它会将请求转发到另一个处理所有 API 的服务器。这个 api 服务器是用 Ruby on Rails 构建的。

由于我所有的纯 HTML 页面都是由 nginx 直接提供的,因此在呈现它们时我不能有服务器端会话。

我可以做些什么来防止 CSRF 攻击?

0 投票
1 回答
323 浏览

csrf - 使用会话令牌实现 CSRF 保护

我试图在我的新项目中实施 CSRF 保护。我使用为每个表单创建会话令牌来执行相同的操作,并且该令牌存储在表单的隐藏字段中。每次提交表单时,我都会检查 POST 中的令牌和会话中的令牌是否相同。如果它们相同,则完成所需的操作并更新会话令牌。

它工作得很好,但是当我们刷新提交的页面时会出现实际问题。然后发生令牌不匹配。

我的问题是,为每个表单使用单个令牌并且不为每个表单提交更新令牌是否安全?这能防止 CSRF 吗?