модуль ActionController::RequestForgeryProtection::ClassMethods
Открытые методы экземпляров
# File actionpack/lib/action_controller/metal/request_forgery_protection.rb, line 197
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
# File actionpack/lib/action_controller/metal/request_forgery_protection.rb, line 214
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.