Класс CsrfProtectionMiddleware
Обеспечивает защиту от CSRF и валидацию.
Этот middleware добавляет токен CSRF в cookie. Значение cookie сравнивается с токеном в данных запроса или с заголовком X-CSRF-Token при каждом запросе PATCH, POST, PUT или DELETE. Это известен как техника «двойной отправки cookie».
Если данные запроса отсутствуют или не совпадают с данными cookie, будет возбуждено исключение InvalidCsrfTokenException.
Этот middleware автоматически интегрируется с FormHelper, и при совместном использовании ваши формы будут автоматически содержать токены CSRF при использовании $this->Form->create(...) в представлении.
См.: https://cheatsheetseries.owasp.org/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.html#double-submit-cookie
Константы
-
intTOKEN_VALUE_LENGTH16
-
intTOKEN_WITH_CHECKSUM_LENGTH56
Токены имеют сгенерированный hmac, чтобы мы могли убедиться, что токены были сгенерированы нашим приложением.
Должно быть TOKEN_VALUE_LENGTH + strlen(hmac)
В настоящее время для hmac используется sha1, который создаёт 40 байт.
Краткое описание свойств
- $_config protected
array<string, mixed>Конфигурация обработки 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<string, mixed> $config = [])
Конструктор
Параметры
-
array<string, mixed>$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.
Возвращает
boolcreateToken() public
createToken(): string
Создать новый токен для защиты от CSRF
Возвращает
stringisHexadecimalToken() protected
isHexadecimalToken(string $token): bool
Проверить, является ли токен токеном, предшествующим засоленным токенам.
Эти токены являются шестнадцатеричными значениями и равны токену с длиной контрольной суммы. Хотя они уязвимы для BREACH, они должны обновляться со временем, и поддержка будет удалена в 5.x.
Параметры
-
string$token Токен для проверки.
Возвращает
boolprocess() public
process(ServerRequestInterface $request, RequestHandlerInterface $handler): Psr\Http\Message\ResponseInterface
Проверяет и устанавливает токен CSRF в зависимости от HTTP-метода.
Обрабатывает входящий запрос сервера, чтобы сгенерировать ответ. Если не может сгенерировать ответ самостоятельно, может делегировать задачу обработчику запросов.
Параметры
-
ServerRequestInterface$request Запрос.
-
RequestHandlerInterface$handler Обработчик запросов.
Возвращает
Psr\Http\Message\ResponseInterfacesaltToken() public
saltToken(string $token): string
Применить энтропию к токену CSRF
Для предотвращения BREACH примените случайное значение соли к токену. При сравнении токена с сессией, токен необходимо сделать без соли.
Параметры
-
string$token Токен для добавления соли.
Возвращает
stringskipCheckCallback() public
skipCheckCallback(callable $callback): $this
Установить обратный вызов для пропуска проверки токена для определённого запроса.
Обратный вызов получит экземпляр запроса в качестве аргумента и должен вернуть true если нужно пропустить проверку токена для текущего запроса.
Параметры
-
callable$callback Вызываемый объект.
Возвращает
$thisunsaltToken() public
unsaltToken(string $token): string
Удалить соль из токена CSRF.
Если длина токена не равна TOKEN_VALUE_LENGTH * 2, это старый токен без соли, который поддерживается для обратной совместимости.
Параметры
-
string$token Токен, который может быть с солью.
Возвращает
stringwhitelistCallback() public
whitelistCallback(callable $callback): $this
Установить обратный вызов для пропуска проверки токена для определённого запроса.
Обратный вызов получит экземпляр запроса в качестве аргумента и должен вернуть true если нужно пропустить проверку токена для текущего запроса.
Параметры
-
callable$callback Вызываемый объект.
Возвращает
$thisПодробное описание свойства
$_config защищенное
Настройка обработки CSRF.
-
cookieNameИмя cookie для отправки.-
expiryЗначение, совместимое со строtime, определяющее, как долго должен действовать 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<string, mixed>$skipCheckCallback защищенное
Обратный вызов для определения необходимости пропуска проверки токена для определенного запроса.
Проверка 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.4/class-Cake.Http.Middleware.CsrfProtectionMiddleware.html