Spec-Zone.ru › Ruby on Rails 4.2

модуль ActionController::RequestForgeryProtection

Включенные модули:
AbstractController::Helpers, AbstractController::Callbacks

Действия контроллера защищены от атак межсайтовой подделки запроса (CSRF) путём включения маркера в рендеренный HTML вашего приложения. Этот маркер хранится как случайная строка в сессии, к которой злоумышленник не имеет доступа. Когда запрос достигает вашего приложения, Rails проверяет полученный маркер с маркером в сессии. Проверка выполняется только для HTML и JavaScript запросов, поэтому это не защитит ваш XML API (предположительно, у вас будет другая схема аутентификации).

GET запросы не защищены, так как они не имеют побочных эффектов, таких как запись в базу данных, и не раскрывают конфиденциальную информацию. JavaScript запросы являются исключением: сторонний сайт может использовать тэг <script> для ссылки на JavaScript URL на вашем сайте. Когда ваш JavaScript ответ загружается на их сайте, он выполняется. При использовании тщательно составленного JavaScript на их стороне, конфиденциальные данные в вашем JavaScript ответе могут быть извлечены. Чтобы предотвратить это, разрешены только запросы XmlHttpRequest (известные как XHR или Ajax) для получения GET ответов JavaScript.

Важно помнить, что запросы XML или JSON также затронуты, и если вы разрабатываете API, вам понадобится что-то вроде:

class ApplicationController < ActionController::Base
  protect_from_forgery
  skip_before_action :verify_authenticity_token, if: :json_request?

  protected

  def json_request?
    request.format.json?
  end
end

Защита от CSRF включается с помощью метода protect_from_forgery, который проверяет маркер и сбрасывает сессию, если он не соответствует ожидаемому. Вызов этого метода генерируется по умолчанию для новых приложений Rails.

Параметр маркера по умолчанию называется authenticity_token. Имя и значение этого маркера должны быть добавлены в каждый макет, который отображает формы, включив csrf_meta_tags в HTML head.

Узнайте больше об атаках CSRF и обеспечении безопасности вашего приложения в Руководстве по безопасности Ruby on Rails.

Защищённые методы экземпляра

handle_unverified_request() Показать исходный код
# File actionpack/lib/action_controller/metal/request_forgery_protection.rb, line 208
def handle_unverified_request
  forgery_protection_strategy.new(self).handle_unverified_request
end
verify_authenticity_token() Показать исходный код
# File actionpack/lib/action_controller/metal/request_forgery_protection.rb, line 197
def verify_authenticity_token
  mark_for_same_origin_verification!

  if !verified_request?
    if logger && log_warning_on_csrf_failure
      logger.warn "Can't verify CSRF token authenticity"
    end
    handle_unverified_request
  end
end

Фактический метод before_action, используемый для проверки маркера CSRF. Не переопределяйте его напрямую. Предоставьте собственную стратегию защиты от подделки запроса. Если вы переопределите, вы отключите проверку `<script>` с одинаковым источником.

Опирайтесь на объявление protect_from_forgery, чтобы отметить, какие действия требуют проверки запросов с одинаковым источником. Если protect_from_forgery включён для действия, этот метод before_action отмечает его после_действие для проверки, что JavaScript ответы предназначены для XHR запросов, гарантируя, что они следуют политике одинакового источника браузера.

© 2004–2018 David Heinemeier Hansson
Licensed under the MIT License.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API