Problemas com CSRF

44 views
Skip to first unread message

ebiagi

unread,
Jan 9, 2020, 3:12:07 PM1/9/20
to CakePHP Tuga
Olá, amigos!
Voltando ao cake depois de um tempo sem programar... Tô utilizando a versão 3.8 e me deparei com um probleminha de CSRF.
Utilizando o ACL aqui pra fazer permissões de usuários, no momento que fui iniciar meus testes de cadastro no banco deu o erro: "Missing CSRF token cookie".

Já olhei na documentação (https://book.cakephp.org/3/en/controllers/middleware.html) e também procurei algo na net, mas até agora não consegui resolver essa.
Se alguém puder dar uma força!
Valeu. 

Rafael Queiroz

unread,
Jan 9, 2020, 3:16:27 PM1/9/20
to cakep...@googlegroups.com
Olá,

Esse tipo de problema acontece, ao tentar submeter formulários que não foram criados com helper Form. Você pode mostrar o código ?

--
--
CakePHP Tuga (cakephp-pt)
 
Utilize http://bin.cakephp.org para códigos
Cookbook: http://book.cakephp.org
 
Website do CakePHP: http://cakephp.org/
Website do grupo: http://groups.google.com/group/cakephp-pt?hl=pt-PT
---
Recebeu esta mensagem porque subscreveu ao grupo "CakePHP Tuga" do Grupos do Google.
Para anular a subscrição deste grupo e parar de receber emails do mesmo, envie um email para cakephp-pt+...@googlegroups.com.
Para ver este debate na Web, visite https://groups.google.com/d/msgid/cakephp-pt/f57d70a1-1b5a-4469-9680-c78d48c8d5f7%40googlegroups.com.


--
Best Regards,

Rafael F. Queiroz

ebiagi

unread,
Jan 9, 2020, 9:42:36 PM1/9/20
to CakePHP Tuga
Rafael, 

meu formulário é simples, um campo apenas e está dessa forma:

<?= $this->Form->create($grupo) ?>
    <fieldset>
        <legend><?= __('Add Grupo') ?></legend>
        <?php
            echo $this->Form->control('nome');
        ?>
    </fieldset>
    <?= $this->Form->button(__('Submit')) ?>
    <?= $this->Form->end() ?>

Rafael Queiroz

unread,
Jan 10, 2020, 6:54:39 AM1/10/20
to cakep...@googlegroups.com
Como está a action do seu controlador ?

--
--
CakePHP Tuga (cakephp-pt)
 
Utilize http://bin.cakephp.org para códigos
Cookbook: http://book.cakephp.org
 
Website do CakePHP: http://cakephp.org/
Website do grupo: http://groups.google.com/group/cakephp-pt?hl=pt-PT
---
Recebeu esta mensagem porque subscreveu ao grupo "CakePHP Tuga" do Grupos do Google.
Para anular a subscrição deste grupo e parar de receber emails do mesmo, envie um email para cakephp-pt+...@googlegroups.com.

ebiagi

unread,
Jan 10, 2020, 11:04:05 AM1/10/20
to CakePHP Tuga
Rafael, 

Assim está o método para adicionar um novo grupo:

    public function add()
    {
        $grupo = $this->Grupos->newEntity();
        if ($this->request->is('post')) {
            $grupo = $this->Grupos->patchEntity($grupo, $this->request->getData());
            if ($this->Grupos->save($grupo)) {
                $this->Flash->success(__('The grupo has been saved.'));

                return $this->redirect(['action' => 'index']);
            }
            $this->Flash->error(__('The grupo could not be saved. Please, try again.'));
        }
        $this->set(compact('grupo'));
    }

=========================
No appController eu carrego o componente dessa forma:

$this->loadComponent('Csrf');

=========================

No routes.php tem essas duas referências:

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


Em quinta-feira, 9 de janeiro de 2020 16:42:07 UTC-3:30, ebiagi escreveu:

Rafael Queiroz

unread,
Jan 10, 2020, 11:38:25 AM1/10/20
to cakep...@googlegroups.com
Csrf Component não deve está presente no AppController

Obsoleto desde a versão 3.5.0: Você deve usar Cross Site Request Forgery (CSRF) Middleware ao invés do CsrfComponent.



--
--
CakePHP Tuga (cakephp-pt)
 
Utilize http://bin.cakephp.org para códigos
Cookbook: http://book.cakephp.org
 
Website do CakePHP: http://cakephp.org/
Website do grupo: http://groups.google.com/group/cakephp-pt?hl=pt-PT
---
Recebeu esta mensagem porque subscreveu ao grupo "CakePHP Tuga" do Grupos do Google.
Para anular a subscrição deste grupo e parar de receber emails do mesmo, envie um email para cakephp-pt+...@googlegroups.com.

ebiagi

unread,
Jan 14, 2020, 4:58:37 PM1/14/20
to CakePHP Tuga
Olá, Rafael. Realmente... na versão que estou utilizando eu resolvo isso através do Cross Site Request Forgery (CSRF) Middleware. No documentação fala que através do código abaixo, eu consigo proteger todas as ações do sistema.

// in src/Application.php
use Cake\Http\Middleware\CsrfProtectionMiddleware;

public function middleware($middlewareQueue) {
    $options = [
        // ...
    ];
    $csrf = new CsrfProtectionMiddleware($options);

    $middlewareQueue->add($csrf);
    return $middlewareQueue;
}

Sendo as opções são: 

  • cookieNameO nome do cookie a ser enviado. O padrão é csrfToken.
  • expiryQuanto tempo o token CSRF deve durar. O padrão é a sessão do navegador.
  • secureSe o cookie será ou não definido com o sinalizador Secure. Ou seja, o cookie será definido apenas em uma conexão HTTPS e qualquer tentativa no HTTP normal falhará. O padrão é false.
  • httpOnlySe o cookie será ou não definido com o sinalizador HttpOnly. O padrão é false.
  • fieldO campo do formulário a ser verificado. O padrão é _csrfTokenAlterar isso também exigirá a configuração do FormHelper.

Ainda não consegui resolver o "CSRF token mismatch" mesmo com o código, mas sigo tentando...





Em quinta-feira, 9 de janeiro de 2020 16:42:07 UTC-3:30, ebiagi escreveu:

Rafael Queiroz

unread,
Jan 14, 2020, 6:13:27 PM1/14/20
to cakep...@googlegroups.com
Removesse o load do component ?
--
--
CakePHP Tuga (cakephp-pt)
 
Utilize http://bin.cakephp.org para códigos
Cookbook: http://book.cakephp.org
 
Website do CakePHP: http://cakephp.org/
Website do grupo: http://groups.google.com/group/cakephp-pt?hl=pt-PT
---
Recebeu esta mensagem porque subscreveu ao grupo "CakePHP Tuga" do Grupos do Google.
Para anular a subscrição deste grupo e parar de receber emails do mesmo, envie um email para cakephp-pt+unsubscribe@googlegroups.com.
Para ver este debate na Web, visite https://groups.google.com/d/msgid/cakephp-pt/dcd3c999-c91e-4666-a204-b4186c955811%40googlegroups.com.

ebiagi

unread,
Jan 14, 2020, 8:11:48 PM1/14/20
to CakePHP Tuga
Faltava  isso, Valeu Rafael!
removi e agora exibe meu formulário de login, por exemplo, normalmente. Mas vejo que falta ainda alguma configuração no middleware. Não redireciona ao efetuar login!


Em quinta-feira, 9 de janeiro de 2020 16:42:07 UTC-3:30, ebiagi escreveu:
print.png
Reply all
Reply to author
Forward
0 new messages