问题标签 [protect-from-forgery]

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 投票
1 回答
1215 浏览

ruby-on-rails - 在 rspec 中为 API 规范存根protect_from_forgery

我正在为我的 Rails 应用程序构建一个 api,并希望保护它免受 CSRF 攻击,使用protect_from_forgery. 我正在为 编写请求规范ApiController,并且想为请求中的 CSRF 无效时得到的响应编写规范。我的问题是如何存根protect_from_forgery模仿无效 CSRF 令牌的行为?

0 投票
1 回答
1373 浏览

ruby-on-rails - InvalidAuthenticityToken errors in mobile

I have read multiple questions and answers here on StackOverflow about InvalidAuthenticityToken and protect_from_forgery but get none the wiser.

I have a website that get hundreds of these errors every day. They seem to be mainly (only?) from mobile but I have only verified that through samples.

I understand why there is an AuthenticityToken and the need for adding

in the application.html (which I have) as well as having protect_from_forgery in the application controller. I have both the csrf_meta_tags and:

in my Application controller, as is default.

I realize I can "solve" the problem by removing protect_from_forgery but that would make me vulnerable for CSRF-attacks so that is not really a solution, is it? I could add an "except" for protect_from_forgery for the form posts that take place but that would leave me just as vulnerable, right?

Edit: I tried accessing the form with my mobile with cookies disabled and experienced a 422 error. Couldn't get it to cause the exception though. Adding an exception for my "result" function removed that, but that makes it vulnerable I guess?

Edit2: I have several forms on the same page (e.g. a search form). Perhaps this could affect the issue?

I am now in a position where I can't have it since it causes error for hundreds of users per day and I can't remove it because I am afraid that it will make my website vulnerable for hacks.

So, what can I do? Is there a decent middle ground?

Is there any way I can alter the protect_from_forgery and still feel fairly confident that I will not have my database destroyed by hackers?

I am not using any API for the site and all of the errors come from the same type of form. I understand there is a javascript part to this problem but not really how I can use that information to solve the problem.

Thanks in advance!

Example of exception that I get:

0 投票
1 回答
166 浏览

ruby-on-rails - `protect_from_forgery with: :exception` 是否会崩溃?

我面临这样一种情况,即有不良行为者在敏感(注销)端点上大规模发布 JSON。

除了通过 IP 进行速率限制之外,我还想protect_from_forgery with: :exception在 Rails 应用程序中添加一个 before_filter。

该过滤器是否返回 500 响应或实际上引发了导致 Rails 进程崩溃的未捕获异常?在本地,它似乎是后者。

我担心的是未经身份验证的机器人会通过反复崩溃进程来有效地 DDOS 服务。

0 投票
1 回答
163 浏览

security - 如何检测人员在客户端的非屏蔽字段中输入 SSN 数据?

我有一个屏幕共享应用程序,其中所有敏感数据都被屏蔽了。在某些情况下,客户将敏感数据(例如 SSN)输入到非屏蔽字段中,从而直接影响我们的解决方案。

有没有一种方法可以检测到该人正在键入 SSN 或任何敏感数据,而无需在客户端访问数据库(或任何其他服务器端信息)。

例如,考虑一个带有 SSN 和地址字段的表单。如何避免在地址字段中显示错误输入的 SSN?


编辑

我现在的方法是将所有模式存储在客户端的属性文件中。例如,我的应用程序中的典型密码是 8 个字符,具有以下规则:

我将把这个正则表达式存储在客户端。一旦用户开始输入,我将检查他输入的是密码还是用户名。同样,我可以将电话号码分解为国家/地区代码格式,并且也可以使用正则表达式。但由于 SSN 是纯 9 位随机数,我被卡住了。

通过从 DOM 中提取字段名称,我可以获得光标的确切位置和用户正在输入数据的字段名称。通过使用它们支持的数据格式类型,我可以大致了解用户是否正在输入所需的数据或其他内容。如果我错了请纠正我

9 月:14th-2016 由于我在浏览器中运行屏幕共享解决方案,它将被网站用作可插入组件。因此要求他们重新构建页面并不容易。以下是我根据您的意见最终确定的方法。我将有一个文件文件,其中存储了所有模式。1.信用相关的信息都有一定的模式,所以不会有问题 2.密码也有一些规则或模式,所以这些也可以检查

为避免数据泄露,我将在用户输入数据之前显示通用消息,例如 watsapp 显示“用户正在输入”。一旦用户选项卡或进入下一个字段,则在内联模式验证后只会显示数据。

这里唯一剩下的就是如何检测那些没有任何模式的字段,如 SSN、电话号码等。希望我们也能有一些解决方案。

问候哈利

0 投票
2 回答
855 浏览

ruby-on-rails - Ruby-on-rails 测试在渲染 JS 视图时引发 InvalidCrossOriginRequest

我正在测试一个控制器,它具有以 .js.erb 格式呈现视图的动作。对这些操作的测试会引发以下错误:

Minitest::UnexpectedError: ActionController::InvalidCrossOriginRequest: 安全警告:另一个站点上的嵌入标签请求受保护的 JavaScript。如果您知道自己在做什么,请继续并禁用此操作的伪造保护以允许跨域 JavaScript 嵌入。

伪造保护会导致此错误,因为当我对这些操作设置异常时它可以,但我不想禁用它。

这是我的控制器:

这是我对这个控制器的测试:

你们中有人知道如何纠正这个错误吗?

先感谢您

0 投票
0 回答
240 浏览

ruby-on-rails - Rails 4 升级抛出 InvalidAuthenticityToken

我的应用程序刚刚升级到 Rails 4,我们开始看到随机的 InvalidAuthenticityToken 错误。我做了一堆调查,但还没有找到解决方案。任何人都知道发生了什么以及如何解决它?

指出出现在其他类似 SO 问题中但不适用于我的事情:

我们protect_from_forgery with: :exception在 ApplicationController 中调用,但我们也在 Rails 3 中这样做并且没有出现此错误。

我已确认这些是以标准方式使用网站的普通用户;这些不是 CSRF 尝试。

这些不是 API 调用,它们是标准的 Web 表单提交。

真实性令牌存在于表单(通过 Railsform_forform_tag生成)和提交的请求中。

我的会话不应该设置过期时间,因为我没有设置过期时间,而且 Rails 默认是永久的,而且我的用户不经常登录或退出(所以过期的令牌不太可能,就像“打开一个选项卡,登录到单独的选项卡,返回打开标签并尝试操作”)。

生成与我的csrf_meta_tag表单相同的令牌并删除它没有帮助。

我的用户确认他们至少在 Firefox、Chrome 和 Safari 上体验过这种情况。

所有代码都可以在 Github 上找到。

可能相关:如果我secret_key_base在 secrets.yml 中更改我的开发并更改我的session_store.rb文件以使用: Rails.application.config.session_store :cookie_store, key: '_glowfic_constellation_' + Rails.env, domain: 'glowfic.com', tld_length: 2并重新启动服务器,我将注销并且可以在尝试登录时 100% 可靠地遇到此错误。

编辑调出更多的东西:

我无法强制清除所有会话,因为我使用 cookie 存储,但是我已经在生产中重置了 secret_key_base 和 cookie 名称,这(很难说,但我认为)有帮助吗?但没有解决问题。

“可能相关”似乎无关,并且与不支持“localhost”的域“glowfic.com”相关;如果我改用域 localhost,我无法在本地复制。

0 投票
1 回答
364 浏览

ruby-on-rails - 使用protect_from_forgery时,Rails 403 会话响应过期

用户会话过期后,当向任何具有 的控制器发出POST或请求时,服务器会以 403 响应,而不是注销用户的预期 401。PUTprotect_from_forgery

当控制器返回 401 代码时,客户端会将用户重定向回登录屏幕。

我不想在每个 403 上重定向,除非他们的会话过期,否则我不会让用户被踢出。

我尝试过谷歌搜索并使用文档中描述的不同标志,但没有任何运气。会话过期时如何使protect_from_forgery返回401?

0 投票
2 回答
3146 浏览

ruby-on-rails - CSRF 在刷新网页时检测到错误消息

我正在开发一个从 facebook 获取详细信息的 Rails 应用程序。我已经从 facebook 获取了详细信息。但是当我刷新网页时,我收到了一个名为 CSRF 的错误。我使用了一些方法,但都失败了。

facebook Graph API 用于编辑操作。

这些是在员工控制器的内部类中添加的。

  1. skip_before_action :verify_authenticity_token

  2. skip_before_action :verify_authenticity_token, only: [:edit]

  3. protect_from_forgery :only => [:edit]

  4. skip_before_action :authenticate_user, only: [:edit]

  5. skip_before_action :authenticate_user!

当使用 authenticate_user(第 4 和第 5 种情况)时,我得到一个参数错误, Before process_action callback :authenticate_user has not been defined.

在所有其他情况下,使用 facebook 更新页面后刷新页面时的错误是 OmniAuth::Strategies::OAuth2::CallbackError

csrf_detected | CSRF detected

PS:我使用 'omniauth-facebook' 和 'koala' gem 进行集成。

0 投票
1 回答
415 浏览

ruby-on-rails-5 - 使用protect_from_forgery with: :exception 但如果会话过期则将用户重定向到登录页面

我有一个带有登录功能的 Rails 应用程序,我已经 protect_from_forgery with: :exception设置了application_controller.rb

我遇到了一些用户在执行以下操作时显示异常页面的问题:

  1. 使用浏览器打开两个选项卡到登录屏幕。
  2. 使用第一个选项卡登录,然后注销。
  3. 切换到第二个选项卡,然后继续登录。
  4. 第二个选项卡导致出现异常屏幕,原因是会话 cookie 已经更改,因为用户已使用另一个选项卡登录并注销。

我也考虑改成protect_from_forgery with: :exceptionprotect_from_forgery with: :reset_session但它会允许本网站中提到的 CSRF 攻击:https ://rubyplus.com/articles/4921-Rails-Forgery-Protection-Basics

我想知道其他 Rails 应用程序如何解决这个问题。

0 投票
1 回答
130 浏览

ruby-on-rails - 嵌入式表单上的 CSRF 问题

我有一个嵌入了 Ruby on Rails 网站(这是我们的会员区,位于子域上)的一些元素的 Wordpress 网站。这些元素包括登录表单。当人们使用它时,Rails 由于 CSRF 令牌无效而返回错误。我是否必须为登录操作禁用 CSRF?我有哪些选择?如果答案是禁用它,那么 Devise 有没有一种轻松的方法呢?