Spec-Zone.ru › CakePHP 4.2

Класс CsrfProtectionMiddleware

Обеспечивает защиту и валидацию CSRF.

Этот middleware добавляет токен CSRF в cookie. Значение cookie сравнивается с токеном в данных запроса или заголовке X-CSRF-Token при каждом запросе PATCH, POST, PUT или DELETE. Это известный метод "double submit cookie".

Если данные запроса отсутствуют или не совпадают с данными cookie, будет выброшено исключение InvalidCsrfTokenException.

Этот middleware автоматически интегрируется с FormHelper, и при совместном использовании формы будут автоматически содержать токены CSRF, когда $this->Form->create(...) используется в представлении.

Пространство имен: Cake\Http\Middleware
См.: https://cheatsheetseries.owasp.org/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.html#double-submit-cookie

Константы

  • int
    TOKEN_VALUE_LENGTH
    16
  • int
    TOKEN_WITH_CHECKSUM_LENGTH
    56

    Токены имеют сгенерированный hmac, что позволяет гарантировать, что токены были сгенерированы нашим приложением.

    Должен быть равен TOKEN_VALUE_LENGTH + strlen(hmac)

    В настоящее время используется sha1 для hmac, что создаёт 40 байтов.

Краткое описание свойств

  • $_config protected
    array

    Настройки обработки CSRF.

  • $skipCheckCallback protected
    callable|null

    Обработчик для принятия решения о пропуске проверки токена для конкретного запроса.

Краткое описание методов

  • __construct() public

    Конструктор

  • _addTokenCookie() protected

    Добавить токен CSRF в куки ответа.

  • _createCookie() protected

    Создать куки ответа

  • _createToken() protected deprecated

    Создать новый токен для защиты от CSRF.

  • _unsetTokenField() protected

    Удалить токен защиты от CSRF из данных запроса.

  • _validateToken() protected

    Проверить данные запроса на соответствие токену в куки.

  • _verifyToken() protected

    Проверить, что токен CSRF был первоначально сгенерирован принимающим приложением.

  • createToken() public

    Создать новый токен для защиты от CSRF.

  • isHexadecimalToken() protected

    Проверить, является ли токен токеном, предшествующим засоленным токенам.

  • process() public

    Проверяет и устанавливает токен CSRF в зависимости от HTTP-метода.

  • saltToken() public

    Применить энтропию к токену CSRF.

  • skipCheckCallback() public

    Установить обратный вызов для пропуска проверки токена для определённого запроса.

  • unsaltToken() public

    Удалить соль из токена CSRF.

  • whitelistCallback() public deprecated

    Установить обратный вызов для пропуска проверки токена для определённого запроса.

Подробное описание методов

__construct() public

__construct(array $config = [])

Конструктор

Параметры

array $config optional

Настройки конфигурации. Смотрите $_config для допустимых ключей.

_addTokenCookie() protected

_addTokenCookie(string $token, Psr\Http\Message\ServerRequestInterface $request, Psr\Http\Message\ResponseInterface $response): Psr\Http\Message\ResponseInterface

Добавить токен CSRF в куки ответа.

Параметры

string $token

Токен для добавления.

Psr\Http\Message\ServerRequestInterface $request

Запрос для проверки.

Psr\Http\Message\ResponseInterface $response

Ответ.

Возвращает

Psr\Http\Message\ResponseInterface

_createCookie() protected

_createCookie(string $value, Psr\Http\Message\ServerRequestInterface $request): Cake\Http\Cookie\CookieInterface

Создать куки ответа

Параметры

string $value

Значение куки

Psr\Http\Message\ServerRequestInterface $request

Объект запроса.

Возвращает

Cake\Http\Cookie\CookieInterface

_createToken() protected

_createToken(): string

Создать новый токен для защиты от CSRF

Возвращает

string

_unsetTokenField() protected

_unsetTokenField(Psr\Http\Message\ServerRequestInterface $request): Psr\Http\Message\ServerRequestInterface

Удалить токен защиты от CSRF из данных запроса.

Параметры

Psr\Http\Message\ServerRequestInterface $request

Объект запроса.

Возвращает

Psr\Http\Message\ServerRequestInterface

_validateToken() protected

_validateToken(Psr\Http\Message\ServerRequestInterface $request): void

Проверить данные запроса на соответствие токену в куки.

Параметры

Psr\Http\Message\ServerRequestInterface $request

Запрос для проверки.

Возвращает

void

Выбрасывает

Cake\Http\Exception\InvalidCsrfTokenException
При невалидном или отсутствующем токен CSRF.

_verifyToken() protected

_verifyToken(string $token): bool

Проверить, что токен CSRF был первоначально сгенерирован принимающим приложением.

Параметры

string $token

Токен CSRF.

Возвращает

bool

createToken() public

createToken(): string

Создать новый токен для защиты от CSRF

Возвращает

string

isHexadecimalToken() protected

isHexadecimalToken(string $token): bool

Проверить, является ли токен токеном, предшествующим засоленным токенам.

Эти токены являются шестнадцатеричными значениями и равны токену с длиной контрольной суммы. Хотя они уязвимы для BREACH, они должны обновляться со временем, и поддержка будет удалена в 5.x.

Параметры

string $token

Токен для проверки.

Возвращает

bool

process() public

process(ServerRequestInterface $request, RequestHandlerInterface $handler): Psr\Http\Message\ResponseInterface

Проверяет и устанавливает токен CSRF в зависимости от HTTP-метода.

Обрабатывает входящий запрос сервера, чтобы сгенерировать ответ. Если не может сгенерировать ответ самостоятельно, может делегировать задачу обработчику запросов.

Параметры

ServerRequestInterface $request

Запрос.

RequestHandlerInterface $handler

Обработчик запросов.

Возвращает

Psr\Http\Message\ResponseInterface

saltToken() public

saltToken(string $token): string

Применить энтропию к токену CSRF

Для предотвращения BREACH примените случайное значение соли к токену. При сравнении токена с сессией, токен необходимо сделать без соли.

Параметры

string $token

Токен для добавления соли.

Возвращает

string

skipCheckCallback() public

skipCheckCallback(callable $callback): $this

Установить обратный вызов для пропуска проверки токена для определённого запроса.

Обратный вызов получит экземпляр запроса в качестве аргумента и должен вернуть true если нужно пропустить проверку токена для текущего запроса.

Параметры

callable $callback

Вызываемый объект.

Возвращает

$this

unsaltToken() public

unsaltToken(string $token): string

Удалить соль из токена CSRF.

Если длина токена не равна TOKEN_VALUE_LENGTH * 2, это старый токен без соли, который поддерживается для обратной совместимости.

Параметры

string $token

Токен, который может быть с солью.

Возвращает

string

whitelistCallback() public

whitelistCallback(callable $callback): $this

Установить обратный вызов для пропуска проверки токена для определённого запроса.

Обратный вызов получит экземпляр запроса в качестве аргумента и должен вернуть true если нужно пропустить проверку токена для текущего запроса.

Параметры

callable $callback

Вызываемый объект.

Возвращает

$this

Подробное описание свойства

$_config protected

Настройки обработки CSRF.

  • cookieName Имя cookie для отправки.
    • expiry Значение, совместимое с strotime, определяющее, как долго должен действовать токен CSRF. По умолчанию — сеанс браузера.
    • secure Устанавливать ли cookie с флагом Secure. По умолчанию — false.
    • httponly Устанавливать ли cookie с флагом HttpOnly. По умолчанию — false.
    • samesite Атрибут "SameSite" для cookie. По умолчанию — null. Допустимые значения: CookieInterface::SAMESITE_LAX, CookieInterface::SAMESITE_STRICT, CookieInterface::SAMESITE_NONE или null.
    • field Поле формы для проверки. Изменение этого значения также требует настройки FormHelper.

Тип

array

$skipCheckCallback protected

Обратный вызов для решения вопроса о пропуске проверки токена для определённого запроса.

Проверка токена CSRF будет пропущена, если обратный вызов вернёт true.

Тип

callable|null

© 2005–present The Cake Software Foundation, Inc.
Licensed under the MIT License.
CakePHP is a registered trademark of Cake Software Foundation, Inc.
We are not endorsed by or affiliated with CakePHP.
https://api.cakephp.org/4.2/class-Cake.Http.Middleware.CsrfProtectionMiddleware.html

Spec-Zone.ru

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