在iframe中发布请求

在iframe中发布请求,iframe,ruby-on-rails-5,cross-domain,csrf,Iframe,Ruby On Rails 5,Cross Domain,Csrf,我正在尝试在iframe中发出POST请求 iframe位于应用程序A中,并呈现应用程序B中的表单 两个应用程序都是不同的域 两个应用程序都在使用https 应用程序A是纯HTML,应用程序B是Rails 5.0应用程序 表单加载良好,在应用程序A上可见 不幸的是,当我按“提交”在iframe中发布表单时,返回了一个错误:无法验证CSRF令牌的真实性 应用程序A上的代码为: <iframe src="https://www.app-b.com"></if

我正在尝试在iframe中发出POST请求

iframe位于应用程序A中,并呈现应用程序B中的表单

  • 两个应用程序都是不同的域
  • 两个应用程序都在使用https
  • 应用程序A是纯HTML,应用程序B是Rails 5.0应用程序
表单加载良好,在应用程序A上可见

不幸的是,当我按“提交”在iframe中发布表单时,返回了一个错误:
无法验证CSRF令牌的真实性

应用程序A上的代码为:

<iframe src="https://www.app-b.com"></iframe>
很明显,我对安全标头做了一些错误的处理,因为:

  • 如果我没有包含
    secure\u标题
    gem,则不会显示表单(正确行为)
  • 如果我包括gem,并指定一个没有任何帧祖先的空块,则将显示该表单(错误行为):
  • 如果我包括gem,并将App A作为框架祖先,则会显示表单(正确的行为)
创业板声明:

所有nil值都将回退到其默认值

这使我假设我不需要提供任何头文件(frame_祖先文件除外),因为它们只是返回到默认值。但现在我开始认为我需要提供其他标题。如果是,哪些是必要的?gem包含一个所有标题的列表,但包含它们似乎有些过分。

这有帮助吗
<form action="/url/in/app_b" method="post">
...
</form>
SecureHeaders::Configuration.default do |config|
  config.csp = {
    frame_ancestors: %w('https://www.app-a.com')
  }
end
SecureHeaders::Configuration.default do |config|
  # nothing here
end