Para começar com o segundo plano, este post é o que Jeff Atwood diz sobre os tokens de CSRF. Nesta mesma página, ele continua dizendo:
Um método de prevenção ainda mais forte, embora mais complexo, é alavancar o estado do servidor - gerar (e rastrear, com tempo limite) uma chave aleatória exclusiva para cada FORMULÁRIO HTML enviado para o cliente. Usamos uma variante desse método no Stack Overflow com grande sucesso.
Mas neste post em si, Jeff nunca comenta sobre quando e como os tokens devem ser atualizados.
Eu estava usando uma técnica semelhante em um aplicativo da web em que estava trabalhando. Funciona assim:
- Sempre que o usuário
POST
fornecer dados ao meu servidor, um token csrf é enviado junto. - Esse token CSRF é armazenado em um cookie criptograficamente forte na sessão do usuário.
- Se o token for válido, a solicitação do usuário é processada e vice-versa.
- Se a solicitação for válida, descarte o token antigo no lado do servidor e crie um novo token. A resposta do servidor contém um novo token csrf para ser usado na próxima solicitação. O token antigo em todos os formulários de uma página é atualizado com o novo, para que a próxima solicitação seja processada corretamente.
É aconselhável atualizar os tokens após qualquer POST
solicitação ou a atualização deve ser feita apenas quando o usuário faz uma GET
solicitação e mantém o mesmo token até a próxima solicitação GET ser feita?