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 ...

questionAnswers(2)

yourAnswerToTheQuestion