Класс CsrfProtectionMiddleware
Обеспечивает защиту и валидацию CSRF.
Этот middleware добавляет токен CSRF в cookie. Значение cookie сравнивается с токеном в данных запроса или заголовке X-CSRF-Token при каждом запросе PATCH, POST, PUT или DELETE. Это известный метод "double submit 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)
В настоящее время используется 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.
Возвращает
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 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