Token de formulário exclusivo desativa a multitarefa para o usuário
Se eu quiser proteger meu site e usuários contra ataques de Cross Site Forgery (CSRF), posso gerar um token exclusivo$token = md5( time() * rand );
emtoda página que tem um formulário. O token é enviado em um campo de entrada ocultoecho '<input type="hidden" name="token" value="'.$token.'">';
e ao mesmo tempo armazenado em uma variável de sessão$_SESSION['token'] = $token;
.
Vou verificar se em algum formulário enviadoif($_POST['token'] == $_SESSION['token'])
e proceda de acordo.
No entanto, alguns usuários podem executar várias tarefas. O que é algo que estou fazendo agora, enquanto estou postando isso.
Ao compor meu post, abro janelas / abas diferentes para possivelmente pesquisar informações ou ver algumas outras perguntas sobre estouro de pilha. O estouro de pilha permite enviar o formulário sem problemas.
Mas se eu fizesse isso no meu site fazendo isso - o que significa navegar por outras páginas enquanto ainda compõe um post / formulário - meu$token
seria regenerado cada vez que eu puxar uma página diferente do meu site. Fazendo o ocultoinput
token no formulário em que estou trabalhando e, eventualmente, deseja enviarincorretaporque não combinará com o$_SESSION['token']
variável mais, que foi regenerada quando visitei uma página diferente ...
Alguma boa idéia de como evitar esse problema, ou quaisquer soluções melhores para interromper o CSRF?
Quero permitir que meus usuários executem várias tarefas E desejem estar protegidos contra CSRF ...