Spec-Zone.ru › Ruby on Rails 8.1

модуль ActionController::RequestForgeryProtection::ClassMethods

Открытые методы экземпляра

protect_from_forgery (options = {}) Показать исходный код
# File actionpack/lib/action_controller/metal/request_forgery_protection.rb, line 206
def protect_from_forgery(options = {})
  options = options.reverse_merge(prepend: false)

  self.forgery_protection_strategy = protection_method_class(options[:with] || :null_session)
  self.request_forgery_protection_token ||= :authenticity_token

  self.csrf_token_storage_strategy = storage_strategy(options[:store] || SessionStore.new)

  before_action :verify_authenticity_token, options
  append_after_action :verify_same_origin_request
end

Включает защиту от подделки запросов. Обратите внимание, что запросы GET и HEAD не проверяются.

class ApplicationController < ActionController::Base
  protect_from_forgery
end

class FooController < ApplicationController
  protect_from_forgery except: :index
end

Защиту от подделки запросов для контроллера можно отключить с помощью skip_forgery_protection:

class BarController < ApplicationController
  skip_forgery_protection
end

Допустимые параметры:

  • :only / :except — применять защиту от подделки запросов только к некоторым действиям. Например, only: [ :create, :create_all ].

  • :if / :unless — полностью отключить защиту от подделки запросов в зависимости от переданного Proc или ссылки на метод.

  • :prepend — по умолчанию проверка токена аутентичности добавляется в позицию вызова protect_from_forgery в вашем приложении. Это означает, что все обратные вызовы, добавленные ранее, выполняются первыми. Это полезно, если вы хотите, чтобы защита от подделки запросов зависела от других обратных вызовов, например методов аутентификации (OAuth или аутентификация с помощью cookie).

    Чтобы добавить проверку в начало цепочки обратных вызовов, используйте prepend: true.

  • :with — задаёт метод обработки непроверенного запроса. Обратите внимание: если default_protect_from_forgery имеет значение true, Rails вызывает protect_from_forgery с параметром with :exception.

Встроенные методы обработки непроверенных запросов:

  • :exception — вызывает исключение ActionController::InvalidAuthenticityToken.

  • :reset_session — сбрасывает сессию.

  • :null_session — предоставляет пустую сессию на время запроса, но не сбрасывает её полностью. Используется по умолчанию, если параметр :with не задан.

Вы также можете реализовать собственные классы стратегий для обработки непроверенных запросов:

class CustomStrategy
  def initialize(controller)
    @controller = controller
  end

  def handle_unverified_request
    # Custom behavior for unverfied request
  end
end

class ApplicationController < ActionController::Base
  protect_from_forgery with: CustomStrategy
end
  • :store — задаёт стратегию хранения и извлечения токенов CSRF.

Встроенные стратегии хранения токенов в сессии:

  • :session — сохраняет токен CSRF в сессии. Используется по умолчанию, если параметр :store не задан.

  • :cookie — сохраняет токен CSRF в зашифрованной cookie.

Вы также можете реализовать собственные классы стратегий для хранения токенов CSRF:

class CustomStore
  def fetch(request)
    # Return the token from a custom location
  end

  def store(request, csrf_token)
    # Store the token in a custom location
  end

  def reset(request)
    # Delete the stored session token
  end
end

class ApplicationController < ActionController::Base
  protect_from_forgery store: CustomStore.new
end
skip_forgery_protection (options = {}) Показать исходный код
# File actionpack/lib/action_controller/metal/request_forgery_protection.rb, line 223
def skip_forgery_protection(options = {})
  skip_before_action :verify_authenticity_token, options.reverse_merge(raise: false)
end

Отключает защиту от подделки запросов. Это обёртка для:

skip_before_action :verify_authenticity_token

Допустимые параметры см. в skip_before_action.

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

Spec-Zone.ru

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