Por que o Express / Connect gera um novo token CSRF em cada solicitação?

Tanto quanto eu entendo, existem duas abordagens na proteção contra ataques de CSRF: 1)token por sessãoe 2)token por solicitação

1) No primeiro caso, o token CSRF está sendo gerado apenas uma vez quando a sessão do usuário é inicializada. Portanto, existe apenas um token válido para o usuário ao mesmo tempo.

2) No segundo caso, um novo token CSRF está sendo gerado em cada solicitação e depois um antigo se torna inválido. Torna mais difícil explorar a vulnerabilidade, porque mesmo se o invasor roubar um token (via XSS)expira quando o usuário passa para a próxima página. Por outro lado, essa abordagem torna o aplicativo da web menos utilizável. Aqui está uma boa citação desecurity.stackexchange.com:

Por exemplo, se eles clicarem no botão 'voltar' e enviarem o formulário com novos valores, o envio falhará e provavelmente os receberá com alguma mensagem de erro hostil. Se eles tentarem abrir um recurso em uma segunda guia, descobrirão que a sessão é interrompida aleatoriamente em uma ou nas duas guias

Ao analisar o Node.jsExpressar estrutura (baseada emConectar) Observei que um novo token CSRF é gerado em cada solicitação,mas um antigo não se torna inválido.

Minha pergunta é: qual é o motivo para fornecer um novo token CSRF em cada solicitação e não invalidar um antigo? Por que não gerar apenas um token por sessão?

Obrigado e desculpe pelo meu inglês!

questionAnswers(1)

yourAnswerToTheQuestion