Laravel - Proteção CSRF
CSRF refere-se a ataques de falsificação de site cruzado em aplicativos da web. Ataques CSRF são as atividades não autorizadas que os usuários autenticados do sistema executam. Como tal, muitos aplicativos da web estão sujeitos a esses ataques.
O Laravel oferece proteção CSRF da seguinte maneira -
O Laravel inclui um plug-in CSRF embutido, que gera tokens para cada sessão de usuário ativa. Esses tokens verificam se as operações ou solicitações são enviadas pelo usuário autenticado em questão.
Implementação
A implementação da proteção CSRF no Laravel é discutida em detalhes nesta seção. Os pontos a seguir são notáveis antes de prosseguir na proteção contra CSRF -
O CSRF é implementado em formulários HTML declarados nos aplicativos da web. Você deve incluir um token CSRF validado oculto no formulário, para que o middleware de proteção CSRF do Laravel possa validar a solicitação. A sintaxe é mostrada abaixo -
<form method = "POST" action="/profile">
{{ csrf_field() }}
...
</form>
Você pode construir convenientemente aplicativos baseados em JavaScript usando a biblioteca JavaScript HTTP, pois isso inclui o token CSRF para cada solicitação de saída.
O arquivo é resources/assets/js/bootstrap.js registra todos os tokens para aplicativos Laravel e inclui meta marcar quais lojas csrf-token com Axios HTTP library.
Formulário sem token CSRF
Considere as seguintes linhas de código. Eles mostram um formulário que leva dois parâmetros como entrada:email e message.
<form>
<label> Email </label>
<input type = "text" name = "email"/>
<br/>
<label> Message </label> <input type="text" name = "message"/>
<input type = ”submit” name = ”submitButton” value = ”submit”>
</form>
O resultado do código acima é o formulário mostrado abaixo, que o usuário final pode visualizar -
O formulário mostrado acima aceitará qualquer informação de entrada de um usuário autorizado. Isso pode tornar o aplicativo da web sujeito a vários ataques.
Observe que o botão de envio inclui funcionalidade na seção do controlador. opostContactfunção é usada em controladores para essas visualizações associadas. É mostrado abaixo -
public function postContact(Request $request) {
return $request-> all();
}
Observe que o formulário não inclui tokens CSRF, portanto as informações confidenciais compartilhadas como parâmetros de entrada estão sujeitas a vários ataques.
Formulário com token CSRF
As linhas de código a seguir mostram o formulário redesenhado usando tokens CSRF -
<form method = ”post” >
{{ csrf_field() }}
<label> Email </label>
<input type = "text" name = "email"/>
<br/>
<label> Message </label>
<input type = "text" name = "message"/>
<input type = ”submit” name = ”submitButton” value = ”submit”>
</form>
A saída obtida retornará JSON com um token conforme fornecido abaixo -
{
"token": "ghfleifxDSUYEW9WE67877CXNVFJKL",
"name": "TutorialsPoint",
"email": "[email protected]"
}
Este é o token CSRF criado ao clicar no botão enviar.