Cake PHP: CMS Tutorial: получение InvalidCsrfTokenException, хотя защита csrf даже не активирована - PullRequest
0 голосов
/ 25 апреля 2020

Я настроил Cake PHP 4.0.6 на моем Lubuntu. Использование локального Apache сервера. Установка прошла нормально, я вижу страницу приветствия.

Затем я запустил Учебное пособие по CMS, создал таблицы в базе данных, а затем создал все с помощью bake ./cake bake all --everything Это также хорошо работало, и я мог видеть /users/index page.

Затем, конечно, я попытался поиграть с cms, добавив пользователя, форма была показана, и я заполнил запрошенную информацию, но после отправки я получил эту ошибку: Отсутствует тело токена CSRF

Stacktrace:

[Cake \ Http \ Exception \ InvalidCsrfTokenException] Отсутствует тело токена CSRF в / home / david / Software / cakePhpTest / vendor /cakephp/cakephp/src/Http/Middleware/CsrfProtectionMiddleware.php в строке 254 Трассировка стека: - /home/david/Software/cakePhpTest/vendor/cakephp/cakephp/src/Http/Mdlefware: 133 - /home/david/Software/cakePhpTest/vendor/cakephp/cakephp/src/Http/Runner.php:73 - / home / david / Software / cakePhpTest / vendor / cakephp / cakephp / src / Http / Runner. php: 58 - / home / dav id / Software / cakePhpTest / vendor / cakephp / cakephp / src / Маршрутизация / Middleware / RoutingMiddleware. php: 162 - /home/david/Software/cakePhpTest/vendor/cakephp/cakephp/src/Http/Runner.* : 73 - /home/david/Software/cakePhpTest/vendor/cakephp/cakephp/src/Routing/Middleware/AssetMiddleware.php:68 - / home / Дэвид / Программное обеспечение / cakePhpTest / vendor / cakephp / cakephp / src / Ht /Runner.php:73 - /home/david/Software/cakePhpTest/vendor/cakephp/cakephp/créphp/src/Error/Middleware/ErrorHandlerMiddleware.php:119 - / home / david / Software / cakePhpTphp / vendor /cakephp/src/Http/Runner.php:73 - /home/david/Software/cakePhpTest/vendor/cakephp/debug_kit/src/Middleware/DebugKitMiddleware.php:60 - / home / david / Software /vendor/cakephp/cakephp/src/Http/Runner.php:73 - /home/david/Software/cakePhpTest/vendor/cakephp/cakephp/src/Http/Runner.php:58 - / home / david /Software/cakePhpTest/vendor/cakephp/cakephp/src/Http/Server.php:90 - /home/david/Software/cakePhpTest/webroot/index.php:40 Запросить URL: / users / add Referer URL: http://localhost: 8765 / users / add IP-адрес клиента: 127.0.0.1

Что меня действительно удивляет, так это то, что согласно Cake PHP Документация Защита от подделки межсайтовых запросов должна быть включена в src/Application.php, который отсутствует в недавно установленном проекте. Я проверил.

Итак, как что-то, что не включено, может вызвать ошибку.

Чтобы увидеть, что произошло, если я включу его, я скопировал код из документации:

use Cake\Http\Middleware\CsrfProtectionMiddleware;

...

$options = [
// ...
];
$csrf = new CsrfProtectionMiddleware($options);

до src/Application.php. Это приводит к той же ошибке.

1 Ответ

1 голос
/ 25 апреля 2020

В скелете приложения по умолчанию промежуточное программное обеспечение CSRF регистрируется в области маршрутизации, нечто подобное показано во втором примере связанных документов.

$routes->scope('/', function (RouteBuilder $builder) {
    // Register scoped middleware for in scopes.
    $builder->registerMiddleware('csrf', new CsrfProtectionMiddleware([
         'httpOnly' => true,
     ]));

     /*
      * Apply a middleware to the current route scope.
      * Requires middleware to be registered through `Application::routes()` with `registerMiddleware()`
      */
     $builder->applyMiddleware('csrf');

     // ...
});

https://github.com/cakephp/app/blob/4.0.3/config/routes.php#L49 -L58

Просмотрите файл config/routes.php и настройте / удалите промежуточное ПО в соответствии с вашими потребностями.

Если вы хотите использовать промежуточное программное обеспечение CSRF, убедитесь, что удалили ваши куки для домена, были внесены изменения в куки-файлы токена CSRF, которые в настоящее время несовместимы с существующими куки-файлами токена CSRF, см. https://github.com/cakephp/cakephp/issues/14471.

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