18

谷歌浏览器中有一个奇怪的行为,在这个问题中也有描述:rails redirects to 'data:,'

当创建新资源并且我的控制器重定向到 show 操作时, chrome会在地址栏中启动加载空白页面'data:,'。提出上述问题的作者的答复如下:

这是一项安全功能,新页面的 HTML 内容与 Chrome 阻止的提交表单的 HTML 内容相匹配。

然而,没有解释如何修复它。该行为仅存在于 Chrome 浏览器中。

4

3 回答 3

10

我一直在谷歌搜索,发现在 Rails 4.0 中使用 iframe 编辑帖子会导致重定向到“data:”

Rails 4 现在为所有请求设置 X-XSS-Protection 标头,因此 iframe 在提交表单后会触发 Chrome 中的 XSS 保护。(https://github.com/elektronaut/sugar/issues/41#issuecomment-25987368

解决方案,将其添加到您的控制器:

before_filter :disable_xss_protection

protected
def disable_xss_protection
  # Disabling this is probably not a good idea,
  # but the header causes Chrome to choke when being
  # redirected back after a submit and the page contains an iframe.
  response.headers['X-XSS-Protection'] = "0"
end
于 2014-01-24T19:45:17.160 回答
0

我不相信它与 mimetype 问题有关。当用户发布其内容中包含 iframe 的博客条目时,我会遇到此问题。保存条目后,它会重定向到“显示”操作,该操作将包含用户的内容(原始/html_safe)。Chrome 将显示该页面片刻,然后由于某种原因再次重定向到空白的“数据:”页面(在历史上它只会留下数据:和提交页面)。

这是我注册的响应标头:

Ruby 2.0.0 / Rails 4 迁移的应用程序行为不正确(登台服务器)



    Cache-Control:max-age=0, no-cache, no-store
    Cache-Control:max-age=0, private, must-revalidate
    Connection:Keep-Alive
    Content-Encoding:gzip
    Content-Length:25359
    Content-Type:text/html; charset=utf-8
    Date:Thu, 23 Jan 2014 16:37:11 GMT
    ETag:"6d9d4961ea2df12de67f8a92c43579fb"
    Server:Apache
    Set-Cookie: _**********_session_dev=1774518c571bf4e65189d607b276e65e; domain=*********.com; path=/; expires=Thu, 23 Jan 2014 18:37:11 -0000; HttpOnly
    Status:200 OK
    Vary:Accept-Encoding
    X-Content-Type-Options:nosniff
    X-Frame-Options:SAMEORIGIN
    X-Mod-Pagespeed:1.6.29.7-3566
    X-Request-Id:9f5314a5-ad01-4aec-bd0f-04e8afd9bdac
    X-UA-Compatible:chrome=1
    X-XSS-Protection:1; mode=block


具有正确行为的 Ruby 1.8.7 / Rails 2 应用程序(产品服务器)



    HTTP/1.1 200 OK
    Date: Thu, 23 Jan 2014 16:32:53 GMT
    Server: Apache
    ETag: "f12135ddd373205352f9754328368217"
    Cache-Control: private, max-age=0, must-revalidate
    Status: 200
    X-Mod-Pagespeed: 1.4.26.5-3533
    Cache-Control: max-age=0, no-cache, no-store
    Vary: Accept-Encoding
    Content-Length: 27167
    X-Cnection: close
    Content-Type: text/html; charset=utf-8
    Connection: Keep-Alive
    Content-Encoding: gzip


还尝试将其作为初始 html:



    <!DOCTYPE html>
    <html>
    <head>...


也只是(作为随机测试来检测可能出现的问题)



    <!DOCTYPE html>
    <head>...


我所知道的是,如果提交的内容有 iframe,当重定向到博客“显示”页面时,chrome 的奇怪行为就会出现。

于 2014-01-23T16:56:34.017 回答
0

好的,我想我知道这是什么。您可以在 data: 协议中指定图像和文本,我相信 Chrome 会看到转义的 HTML 并认为它是数据。由于未指定 mime 类型,因此在冒号后将 mime 类型留空,并仅打印逗号。

http://guides.rubyonrails.org/security.html#redirection

Rails 4 会自动转义 HTML,因此如果您尝试呈现 HTML,则必须指明不要转义它。查看渲染选项:

http://guides.rubyonrails.org/security.html#redirection

您可以使用raw()直接呈现 HTML。

http://www.webbydude.com/posts/9-the-h-helper-in-rails-3

于 2014-01-23T06:20:02.770 回答