【问题标题】:Invalid Cross Origin Request After Upgrading to Rails 4.1升级到 Rails 4.1 后跨域请求无效
【发布时间】:2025-12-04 10:05:01
【问题描述】:

从 Rails 3.2 升级到 Rails 4.1 后,我开始收到以下错误:

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

它们主要来自 Windows XP 上的 Internet Explorer 6 或 8 浏览器,并且从不附带用户信息,即使它们正在访问仅向已登录用户显示的控制器操作。

如何解决或解决此问题?

(另请参阅升级前的相关问题:Why does Rails Fail to access the Session in an Ajax request from Internet Explorer?

【问题讨论】:

  • 在 IE 的 javascript 控制台中检查 javascript 错误(按 F12 并找到“控制台”选项卡)。我敢打赌,有一些错误会阻止普通 JS 在 IE 中正常工作。
  • 您是在访问自己的服务器,还是访问其他服务器?
  • @RichPeck,一个 javascript 文件调用我自己的服务器。
  • 我正在查看 CORs 问题的相关来源并在此处进行了问答...*.com/questions/24707336/…

标签: ruby-on-rails forms internet-explorer ruby-on-rails-4 antiforgerytoken


【解决方案1】:

根据 Rails 指南中的“CSRF 保护远程标签”:

在测试的情况下,你也做客户端,从:

获取:索引,格式::js

收件人:

xhr :get, :index, 格式: :js

http://edgeguides.rubyonrails.org/upgrading_ruby_on_rails.html#csrf-protection-from-remote-script-tags

如果您想让该路由跳过 csrf 检查,请使用以下内容将该路由列入白名单:

protect_from_forgery :except => :create

【讨论】:

  • JAR.JAR.beans,放置这个 :except => :create 有什么潜在的安全风险?
  • 添加到 :except => :new 后错误消失。我们正试图找出与此相关的潜在风险,除了。有人有想法吗?
  • 顺便说一句,我们应用程序中的错误是由创建新日志的 ajax 调用引起的。所有 js 代码都驻留在同一个应用程序中,据我了解,没有交叉引用。