ruby-on-rails Rails无效交叉源请求

oxcyiej7  于 2022-12-15  发布在  Ruby
关注(0)|答案(2)|浏览(151)

我在Rails应用程序的一个页面上有一个remote: true链接,它调用同一页面的.js版本,然后运行一个脚本来更新页面内容。
它工作得很好,但从昨天开始,我现在每次点击其中一个链接都会得到Security warning: an embedded <script> tag on another site requested protected JavaScript. If you know what you're doing, go ahead and disable forgery protection on this action to permit cross-origin JavaScript embedding.
有什么办法能阻止这一切吗?

bt1cpqcv

bt1cpqcv1#

您可以跳过“跨源”检查,而不是跳过所有防伪/真实性令牌验证。

class FooController < ApplicationController
    skip_after_action :verify_same_origin_request

您需要跳过这一步的原因是Rails的verify_same_origin_request实际上并不检查来源,而是检查(1)它是一个GET请求,(2)它不是一个XHR请求,您的用例同时满足这两个条件,因此会引发一个错误。

ccrfmcuu

ccrfmcuu2#

将其添加到呈现页面片段的控制器中

class FooController < ApplicationController
    protect_from_forgery except: :index

其中index是要跳过此保护的操作的名称

跨源策略

你得到的错误是因为所谓的跨源策略。这是一个标准存在于每一个浏览器,不允许一个网页运行来自其他域的脚本。解决这个问题的方法是添加一个头部到http请求允许您的内容在其他域运行。
维基百科对此有一个解释:
放宽同源策略的第二种技术是标准化的,名为跨源资源共享。该标准使用新的源请求报头和新的访问控制允许源响应报头扩展HTTP。它允许服务器使用报头来明确列出可能请求文件的源,或者使用通配符来允许任何站点请求文件。浏览器如Firefox 3.5、Safari 4和Internet Explorer 10使用此标头来允许具有XMLHttpRequest的跨源HTTP请求,否则同源策略将禁止这些请求。
http://en.wikipedia.org/wiki/Same-origin_policy

相关问题