Segurança do Web UI Framework - Falsificação de Solicitação entre Sites

O Web UI Framework fornece proteção para o aplicativo contra falsificação de solicitação entre sites (CSRF), que explora maliciosamente um website em que comandos não autorizados são transmitidos de um usuário que o website confia. O CSRF (também chamado XSRF) é diferente do cross-site scripting (CSS ou XSS), que explora a confiança que um usuário possui em um determinado site. O CSRF também é conhecido como um ataque de um só clique, sidejacking ou riding de sessão.

O CSRF funciona incluindo um link ou script em uma página que acessa um site em que o usuário é conhecido ou (supostamente) foi autenticado. Por exemplo, o Usuário A pode estar navegando em um fórum em que o Usuário B postou uma mensagem. Com o CSRF, o Usuário B pode criar o elemento de imagem HTML a seguir que, ao invés de ser um arquivo de imagem, referencia um script no website do banco do Usuário A e solicita um saque de $1 milhão:

<img src="http://bank.example/withdraw?amount=1000000&for=USER-B">

Se o banco do Usuário A mantiver suas informações de autenticação em um cookie, e se o cookie não expirar, quando o navegador do Usuário A tentar carregar a imagem, será enviado um formulário de saque com o cookie de autenticação autorizando a transação sem a aprovação do Usuário A.

Neste cenário, o problema pode ser agravado nos três pontos a seguir:
  • Devido à política do navegador, os cookies de autenticação são enviados para o servidor do banco mesmo que a solicitação tenha se originado a partir de um website diferente.
  • O banco do Usuário A armazena informações de autenticação em um cookie e depende completamente do cookies para fins de autenticação.
  • O banco do Usuário A não diferencia entre solicitações GET e POST.
A proteção de CSRF no Web UI Framework não se aplica ao primeiro ponto, pois ela é uma política de navegador. Porém essa proteção se aplica ao segundo e terceiro pontos por usar um cookie e um token adicional para autenticação. Ataques CSRF são normalmente evitados ao se verificar sempre por um token exclusivo em cada solicitação que chega ao servidor. No Web UI Framework, o token é usado da seguinte forma:
  1. Quando o login é concluído, um token recém-criado é configurado para a sessão (para finalidades de validação). Este token está disponível no lado cliente do aplicativo.
  2. O token é usado nas seguintes formas:
    • Este token é usado para todas as solicitações AJAX e nos utilitários do Web UI Framework.
    • Quando uma solicitação POST ou GET é feita para o servidor, o aplicativo valida automaticamente que o token CSRF está disponível na solicitação.