Spec-Zone.ru › Ruby on Rails 7.1

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

Общедоступные методы экземпляров

protect_from_forgery(options = {}) Показать исходный код
# File actionpack/lib/action_controller/metal/request_forgery_protection.rb, line 179
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 196
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