ti-enxame.com

A verificação de token não funciona no administrador do componente personalizado

Criei um componente personalizado e tenho três formulários que executam tarefas diferentes na visualização default.php em subcontroladores dentro do administrador. Na minha exibição tmpl default.php, Cada formulário possui uma <?php echo JHtml::_('form.token'); ?> que renderiza um campo oculto com um token como o nome com um valor 1. Eu tenho uma verificação no meu subcontrolador, JSession::checkToken() or die para determinar se o token é válido.

O problema é que, ao enviar um formulário via POST, os dados POST com o token e a função JSession::checkToken() que verifica o token não são correspondentes, resultando em FALSE Depois de depurar a classe JSession, descobri que, quando ele recebe um token, NÃO é o mesmo que o token sendo postado. Pesquisei no Google, mas encontrei qualquer solução que funcionasse.

De acordo com documentação do Joomla sobre CSRF , é suposto ser tão fácil quanto adicionar <?php echo JHtml::_('form.token'); ?> e adicionar a verificação no controlador JSession::checkToken() or die.

Como os dois tokens diferem da forma POST e classe JSession? Existe algo que talvez eu esteja faltando ou que não tenha acrescentado que não esteja no documento do Joomla?

2
RNickMcCandless

Algumas coisas me ocorrem:

Tem certeza de que está enviando para um controlador "site" e não para um controlador "admin"? O token para um site x formulário de administração será diferente, pois a sessão é diferente.

Tem certeza de que está enviando por POST? Se você estiver enviando via GET, precisará verificar o token usando JSession::checkToken('get')

Tem certeza de que colocou o campo de token dentro das tags de formulário? Você pode ver a fonte para confirmar que tudo isso parece correto.

3
user101289