Para prevenir ataques CSRF, asp.net mvc oferece o recurso anti-contrafação ValidateAntiForgeryToken e, na nova versão do framework central asp.net, a Microsoft oferece o recurso AutoValidateAntiforgeryToken, especificamente ValidateAntiForgeryToken e AutoValidateAntiforgeryToken e AutoValidateAntiforgeryToken Qual é a diferença, este artigo vai explicar em detalhes.
Conceito CSRF
A falsificação de solicitação cruzada CSRF, assim como ataques XSS, é extremamente prejudicial, você pode entender assim: o atacante rouba sua identidade e envia uma solicitação maliciosa em seu nome, que é totalmente legítima para o servidor, mas completa uma ação que o atacante espera, como enviar e-mails e mensagens em seu nome, roubar sua conta, adicionar administradores de sistema ou até mesmo comprar mercadorias, Transferências de moeda virtual, etc. Web A é um site com vulnerabilidade CSRF, Web B é um site malicioso criado por um atacante, e o Usuário C é um usuário legítimo da Web A.
ASP.NET MVC contra ataques da CSRF
Na página de visualização, use @Html.AntiForgeryToken() para adicionar uma tag e, quando o usuário acessar a página, o backend gerará automaticamente um código html oculto com a tag, conforme segue:
<nome de entrada="__RequestVerificationToken" tipo="oculto" value="CfDJ8FBn4LzSYglJpE6Q0fWvZ8WDMTgwK49lDU1XGuP5-5j4JlSCML_IDOO3XDL5EOyI_mS2Ux7lLSfI7ASQnIIxo2ScEJvnABf9v51TUZl_iM2S63zuiPK4lcXRPa_KUUDbK-LS4HD16pJusFRppj-dEGc" /> O controlador em segundo plano precisa ser configurado [ValidateAntiForgeryToken] para evitar a falsificação de envios de formulários.
ValidateAntiForgeryToken e AutoValidateAntiforgeryToken são diferentes
AutoValidateAntiforgeryTokenAuthorizationFilter herda o ValidateAntiforgeryTokenAuthorizationFilter, mas apenas reescreve o método ShouldValidate nele.
Propriedade AutoValidateAntiforgeryToken que causa validação de tokens anti-falsificação para todos os métodos HTTP inseguros.Métodos HTTP diferentes de GET, HEAD, OPTIONS e TRACE requerem um token anti-falsificação。 Isso pode ser aplicado como um filtro global para acionar a validação de token anti-falsificação da aplicação por padrão.
O login do hiperlink está visível.
AutoValidateAntiforgeryTokenAttribute valida a chamada para AutoValidateAntiforgeryTokenAuthorizationFilter, que herda de ValidateAntiforgeryTokenAuthorizationFilter,O método ShouldValidate foi reescrito, retornando true significa que precisa ser validado, e retornando false não será validado, como mostrado na figura abaixo:
Analise o código-fonte:
AutoValidateAntiforgeryTokenAttribute permite que a validação de tokens anti-falsificação seja aplicada globalmente a todos os métodos inseguros, como POST, PUT, PATCH e DELETE. Então você não precisa adicionar a propriedade [ValidateAntiForgeryToken] a toda ação que a exija por isso.
Para usá-lo, adicione o seguinte código ao método de classe Inicialização do seu ConfigureServices:
Se você precisar ignorar a autenticação anti-falsificação, pode adicionar [IgnorarAntifalsificaçãoTokenatribuo à ação.
Às vezes, você pode precisar marcar múltiplas requisições em um controlador, enquanto algumas requisições não precisam ser forjadas, como várias operações baseadas em GET. Existem várias ferramentas que você pode usar para tornar o processo mais conveniente e confortável. A primeira é a propriedade AutoValidateAntiforgeryToken. Ele se comporta como a propriedade ValidateAntiForgeryToken. No entanto, ele automaticamente ignorará as ações chamadas por métodos projetados para recuperação de dados: GET, HEAD, OPTIONS e TRACE. Isso permite adicionar rápida e facilmente métodos anti-falsificação a todos os métodos que podem alterar dados sem afetar a forma como os dados são recuperados.
O código a seguir é um exemplo da propriedade AutoValidateAntiforgeryToken:
Neste exemplo, ambas as operações normais de Índice (GET) funcionarão independentemente da fonte, enquanto tanto a operação de Índice com o método POST quanto a operação RemoveUser como método Delete exigirão que o cliente use um token anti-falsificação.
Personalize as informações relevantes
Muitas pessoas podem se perguntar se o nome do domínio oculto gerado pode ser substituído pelo seu próprio, e se o nome do cookie pode ser alterado para o deles.
A resposta é sim, vamos demonstrar brevemente:
No método ConfigureServices da Startup, adicione o seguinte para modificar o nome padrão de acordo.
Nota: A maior diferença entre asp.net core e asp.net é,O Core suporta a passagem de parâmetros de validação solicitando um cabeçalho, não para formar formulários!
cadeia de const privada AntiforgeryTokenFieldName = "__RequestVerificationToken"; string const privado AntiforgeryTokenHeaderName = "RequestVerificationToken";
Você pode ver o código-fonte:O login do hiperlink está visível.
Código de teste:
Resultado: Tentar acessar o método test1 retorna um erro 400, acessar o método test2 retorna o parâmetro str que passamos, e você pode ver que o recurso AutoValidateAntiforgeryToken não intercepta a solicitação GET.
(Fim)
|