问题标签 [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.
ruby-on-rails - 在 rspec 中为 API 规范存根protect_from_forgery
我正在为我的 Rails 应用程序构建一个 api,并希望保护它免受 CSRF 攻击,使用protect_from_forgery
. 我正在为 编写请求规范ApiController
,并且想为请求中的 CSRF 无效时得到的响应编写规范。我的问题是如何存根protect_from_forgery
模仿无效 CSRF 令牌的行为?
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:
ruby-on-rails - `protect_from_forgery with: :exception` 是否会崩溃?
我面临这样一种情况,即有不良行为者在敏感(注销)端点上大规模发布 JSON。
除了通过 IP 进行速率限制之外,我还想protect_from_forgery with: :exception
在 Rails 应用程序中添加一个 before_filter。
该过滤器是否返回 500 响应或实际上引发了导致 Rails 进程崩溃的未捕获异常?在本地,它似乎是后者。
我担心的是未经身份验证的机器人会通过反复崩溃进程来有效地 DDOS 服务。
security - 如何检测人员在客户端的非屏蔽字段中输入 SSN 数据?
我有一个屏幕共享应用程序,其中所有敏感数据都被屏蔽了。在某些情况下,客户将敏感数据(例如 SSN)输入到非屏蔽字段中,从而直接影响我们的解决方案。
有没有一种方法可以检测到该人正在键入 SSN 或任何敏感数据,而无需在客户端访问数据库(或任何其他服务器端信息)。
例如,考虑一个带有 SSN 和地址字段的表单。如何避免在地址字段中显示错误输入的 SSN?
编辑
我现在的方法是将所有模式存储在客户端的属性文件中。例如,我的应用程序中的典型密码是 8 个字符,具有以下规则:
我将把这个正则表达式存储在客户端。一旦用户开始输入,我将检查他输入的是密码还是用户名。同样,我可以将电话号码分解为国家/地区代码格式,并且也可以使用正则表达式。但由于 SSN 是纯 9 位随机数,我被卡住了。
通过从 DOM 中提取字段名称,我可以获得光标的确切位置和用户正在输入数据的字段名称。通过使用它们支持的数据格式类型,我可以大致了解用户是否正在输入所需的数据或其他内容。如果我错了请纠正我
9 月:14th-2016 由于我在浏览器中运行屏幕共享解决方案,它将被网站用作可插入组件。因此要求他们重新构建页面并不容易。以下是我根据您的意见最终确定的方法。我将有一个文件文件,其中存储了所有模式。1.信用相关的信息都有一定的模式,所以不会有问题 2.密码也有一些规则或模式,所以这些也可以检查
为避免数据泄露,我将在用户输入数据之前显示通用消息,例如 watsapp 显示“用户正在输入”。一旦用户选项卡或进入下一个字段,则在内联模式验证后只会显示数据。
这里唯一剩下的就是如何检测那些没有任何模式的字段,如 SSN、电话号码等。希望我们也能有一些解决方案。
问候哈利
ruby-on-rails - Ruby-on-rails 测试在渲染 JS 视图时引发 InvalidCrossOriginRequest
我正在测试一个控制器,它具有以 .js.erb 格式呈现视图的动作。对这些操作的测试会引发以下错误:
Minitest::UnexpectedError: ActionController::InvalidCrossOriginRequest: 安全警告:另一个站点上的嵌入标签请求受保护的 JavaScript。如果您知道自己在做什么,请继续并禁用此操作的伪造保护以允许跨域 JavaScript 嵌入。
伪造保护会导致此错误,因为当我对这些操作设置异常时它可以,但我不想禁用它。
这是我的控制器:
这是我对这个控制器的测试:
你们中有人知道如何纠正这个错误吗?
先感谢您
ruby-on-rails - Rails 4 升级抛出 InvalidAuthenticityToken
我的应用程序刚刚升级到 Rails 4,我们开始看到随机的 InvalidAuthenticityToken 错误。我做了一堆调查,但还没有找到解决方案。任何人都知道发生了什么以及如何解决它?
指出出现在其他类似 SO 问题中但不适用于我的事情:
我们protect_from_forgery with: :exception
在 ApplicationController 中调用,但我们也在 Rails 3 中这样做并且没有出现此错误。
我已确认这些是以标准方式使用网站的普通用户;这些不是 CSRF 尝试。
这些不是 API 调用,它们是标准的 Web 表单提交。
真实性令牌存在于表单(通过 Railsform_for
或form_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,我无法在本地复制。
ruby-on-rails - 使用protect_from_forgery时,Rails 403 会话响应过期
用户会话过期后,当向任何具有 的控制器发出POST
或请求时,服务器会以 403 响应,而不是注销用户的预期 401。PUT
protect_from_forgery
当控制器返回 401 代码时,客户端会将用户重定向回登录屏幕。
我不想在每个 403 上重定向,除非他们的会话过期,否则我不会让用户被踢出。
我尝试过谷歌搜索并使用文档中描述的不同标志,但没有任何运气。会话过期时如何使protect_from_forgery返回401?
ruby-on-rails - CSRF 在刷新网页时检测到错误消息
我正在开发一个从 facebook 获取详细信息的 Rails 应用程序。我已经从 facebook 获取了详细信息。但是当我刷新网页时,我收到了一个名为 CSRF 的错误。我使用了一些方法,但都失败了。
facebook Graph API 用于编辑操作。
这些是在员工控制器的内部类中添加的。
skip_before_action :verify_authenticity_token
skip_before_action :verify_authenticity_token, only: [:edit]
protect_from_forgery :only => [:edit]
skip_before_action :authenticate_user, only: [:edit]
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 进行集成。
ruby-on-rails-5 - 使用protect_from_forgery with: :exception 但如果会话过期则将用户重定向到登录页面
我有一个带有登录功能的 Rails 应用程序,我已经
protect_from_forgery with: :exception
设置了application_controller.rb
。
我遇到了一些用户在执行以下操作时显示异常页面的问题:
- 使用浏览器打开两个选项卡到登录屏幕。
- 使用第一个选项卡登录,然后注销。
- 切换到第二个选项卡,然后继续登录。
- 第二个选项卡导致出现异常屏幕,原因是会话 cookie 已经更改,因为用户已使用另一个选项卡登录并注销。
我也考虑改成protect_from_forgery with: :exception
,protect_from_forgery with: :reset_session
但它会允许本网站中提到的 CSRF 攻击:https ://rubyplus.com/articles/4921-Rails-Forgery-Protection-Basics
我想知道其他 Rails 应用程序如何解决这个问题。
ruby-on-rails - 嵌入式表单上的 CSRF 问题
我有一个嵌入了 Ruby on Rails 网站(这是我们的会员区,位于子域上)的一些元素的 Wordpress 网站。这些元素包括登录表单。当人们使用它时,Rails 由于 CSRF 令牌无效而返回错误。我是否必须为登录操作禁用 CSRF?我有哪些选择?如果答案是禁用它,那么 Devise 有没有一种轻松的方法呢?