Quero implementar falsificação de solicitação entre sitesprevenção para o meu aplicativo da web que é baseado no framework struts 1.x. Eu sei que a estrutura do struts 2 fornece interceptador de token para isso e posso implementar funcionalidades semelhantes usando filtros.
Estou um pouco confuso sobre alguns pensa 1) como posso gerar token exclusivo de maneira direta? (posso usar o token da classe Action para esse fim, que é usado para evitar o envio duplicado de formulários)
Existe algum problema no uso do mecanismo de token de estrutura struts 1.x para a prevenção de CSRF
Respostas:
17 para resposta № 1Os métodos do token do Struts 1 Action funcionam como oO interceptador de toques do Struts 2, na medida em que adicionará um token à sua sessão e o verificará no envio do formulário, mas é um processo muito mais manual. O fluxo de trabalho básico é:
- O usuário acessa o formulário por meio de uma Ação do Struts (não diretamente para o JSP). A ação Struts chamará
saveToken(request)
antes de encaminhar para o JSP que contém o formulário. - O formulário no JSP deve usar o
<html:form>
tag. - Sua ação à qual o formulário envia chama primeiro
isTokenValid(request, true)
, e você deve redirecionar de volta para a primeira ação com uma mensagem de erro se ela retornarfalse
. Isso também redefine o token para a próxima solicitação.
Fazer isso não apenas impedirá o formulário duplicadoenvios, mas qualquer script precisará acessar a primeira ação do Struts e obter uma sessão antes de poder enviar para a segunda ação do Struts para enviar o formulário. Como um site não pode definir uma sessão para outro site, isso deve impedir o CSRF.
Se você costuma enviar usuários diretamente para seu JSP, não. Em vez disso, crie uma nova classe herdada de ActionForward
e defina isso como é execute()
método:
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
saveToken(request);
return super.execute(mapping, form, request, response);
}