A Microsoft nos fornece funcionalidades internas que usamos em nosso aplicativo para fins de segurança, para que ninguém possa invadir nosso site ou invadir algumas informações críticas.
Uso de ValidateAntiForgeryToken
Vamos tentar com um exemplo simples para entender esse conceito. Não quero tornar isso muito complicado, é por isso que vou usar o modelo de um aplicativo MVC, já disponível no Visual Studio. Faremos isso passo a passo. Vamos começar.
Etapa 1 - Crie dois aplicativos MVC com o modelo padrão da Internet e dê esses nomes como CrossSite_RequestForgery e Attack_Application, respectivamente.
Agora, abra a Configuração da Web do aplicativo CrossSite_RequestForgery e altere a cadeia de conexão com a fornecida abaixo e salve.
`
<connectionStrings> <add name="DefaultConnection" connectionString="Data Source=local\SQLEXPRESS;Initial Catalog=CSRF;
Integrated Security=true;" providerName="System.Data.SqlClient" />
</connectionStrings>
Agora, clique em Ferramentas >> Gerenciador de Pacotes NuGet e, em seguida, Console do Gerenciador de Pacotes
Agora, execute os três comandos abaixo mencionados no Package Manager Console para criar o banco de dados.
Enable-Migrations add-migration primeiro update-database
Observações importantes - Criei um banco de dados com a primeira abordagem de código, porque quero fazer esse exemplo na maneira como os desenvolvedores trabalham. Você também pode criar banco de dados manualmente. É a sua escolha.
- Agora, abra o Account Controller. Aqui, você verá um método de registro cujo tipo é post. Acima desse método, deve haver um atributo disponível como [ValidateAntiForgeryToken]. Comente este atributo. Agora, clique com o botão direito no registro e clique em Exibir. Mais uma vez, você encontrará um auxiliar html como @ Html.AntiForgeryToken (). Comente este também. Execute o aplicativo e clique no botão registrar. O URL será aberto como:
http: // localhost: 52269 / Conta / Registro
Observações - Agora eu sei que a pergunta que está sendo levantada na mente de todos os leitores é por que esses dois auxiliares precisam ser comentados, pois todos sabem que eles são usados para validar a solicitação. Quero apenas que todos saibam que isso é apenas porque quero mostrar a diferença depois e antes de aplicar esses auxiliares.
Agora, abra o segundo aplicativo, que é Attack_Application. Em seguida, abra o método Register do Account Controller. Basta alterar o método POST pelo simples, mostrado abaixo.
Formulário de registro
- @ Html.LabelFor (m => m.UserName) @ Html.TextBoxFor (m => m.UserName)
- @ Html.LabelFor (m => m.Password) @ Html.PasswordFor (m => m.Password)
- @ Html.LabelFor (m => m.ConfirmPassword) @ Html.PasswordFor (m => m.ConfirmPassword)
7.Agora, suponha que você seja um hacker e saiba o URL de onde pode registrar o usuário no aplicativo CrossSite_RequestForgery. Agora, você criou um site Forgery como Attacker_Application e apenas colocou o mesmo URL no método post.
8.Run esta aplicação agora e preencha os campos de registro e clique em registrar. Você verá que está registrado no aplicativo CrossSite_RequestForgery. Se você verificar o banco de dados do aplicativo CrossSite_RequestForgery, verá a entrada inserida.
- Importante - Agora, abra o aplicativo CrossSite_RequestForgery e comente o token no Account Controller e registre a View. Tente se registrar novamente com o mesmo processo. Em seguida, ocorrerá um erro como abaixo.
Erro de Servidor na '/' Aplicação. ________________________________________ O cookie anti-falsificação necessário "__RequestVerificationToken" não está presente.
É isso que o conceito diz. O que adicionamos no modo de exibição, por exemplo, @ Html.AntiForgeryToken () gera __RequestVerificationToken no tempo de carregamento e [ValidateAntiForgeryToken] disponível no método Controller. Combine esse token na hora da postagem. Se o token for o mesmo, significa que esta é uma solicitação válida.