Подтвердить что ты не робот

Rails 4 перенаправляет на "данные:" в Chrome

В Google Chrome существует странное поведение, которое также описано в этом вопросе: рельсы перенаправляются на 'data:,

Когда создается новый ресурс и мой контроллер перенаправляется на действие show, chrome инициирует загрузку пустой страницы с 'data:,' в адресной строке. Ответ автора, который задал вышеупомянутый вопрос, следующий:

Это функция безопасности, содержимое HTML на новой странице соответствует содержимому HTML представленной формы, которое блокирует Chrome.

Однако никаких объяснений о том, как его исправить, не последовало. Поведение присутствует только в браузере Chrome.

4b9b3361

Ответ 1

Я искал его и обнаружил, что редактирование сообщений с iframe в Rails 4.0 вызывает перенаправление на "data:,"

Rails 4 теперь устанавливает заголовок X-XSS-Protection для всех запросов, поэтому iframe отключает защиту XSS в Chrome после отправки формы. (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

Ответ 2

Хорошо, думаю, я знаю, что это. Вы можете указать изображения и текст внутри протокола данных: я считаю, что 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

Ответ 3

Я не уверен, что это связано с проблемой mimetype. У меня есть эта проблема, когда пользователь публикует запись в блоге с фреймами в своем контенте. Когда запись сохраняется, она перенаправляется на действие "показать", которое будет содержать пользовательский контент (raw/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 приложение с правильным поведением (prod-сервер)



    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, при переадресации на страницу блога "показать" хром странное поведение вступает.