/ / Prevenção de falsificação de solicitação entre sites usando o token struts - java, struts, domínio cruzado, struts-1

Prevenção de falsificação de solicitações entre sites usando o token do struts - java, struts, cross-domain, struts-1

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 № 1

Os 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 é:

  1. 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.
  2. O formulário no JSP deve usar o <html:form> tag.
  3. 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 retornar false. 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);
}