Laravel - Защита от CSRF
CSRF относится к атакам с межсайтовой подделкой на веб-приложения. CSRF-атаки - это несанкционированные действия, которые выполняют аутентифицированные пользователи системы. Таким образом, многие веб-приложения подвержены этим атакам.
Laravel предлагает защиту CSRF следующим образом:
Laravel включает встроенный CSRF-плагин, который генерирует токены для каждой активной пользовательской сессии. Эти токены подтверждают, что операции или запросы отправляются соответствующим аутентифицированным пользователем.
Реализация
В этом разделе подробно обсуждается реализация защиты CSRF в Laravel. Прежде чем перейти к защите CSRF, следует обратить внимание на следующие моменты:
CSRF реализован в HTML-формах, объявленных внутри веб-приложений. Вы должны включить скрытый проверенный токен CSRF в форму, чтобы промежуточное ПО защиты CSRF Laravel могло проверить запрос. Синтаксис показан ниже -
<form method = "POST" action="/profile">
{{ csrf_field() }}
...
</form>
Вы можете удобно создавать приложения на основе JavaScript с помощью библиотеки JavaScript HTTP, поскольку она включает токен CSRF для каждого исходящего запроса.
Файл а именно resources/assets/js/bootstrap.js регистрирует все токены для приложений Laravel и включает meta тег, который хранит csrf-token с участием Axios HTTP library.
Форма без токена CSRF
Рассмотрим следующие строки кода. Они показывают форму, которая принимает на вход два параметра:email и 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>
Результатом приведенного выше кода является форма, показанная ниже, которую может просматривать конечный пользователь -
Форма, показанная выше, будет принимать любую вводимую информацию от авторизованного пользователя. Это может сделать веб-приложение уязвимым для различных атак.
Обратите внимание, что кнопка отправки включает функции в разделе контроллера. ВpostContactФункция используется в контроллерах для связанных представлений. Это показано ниже -
public function postContact(Request $request) {
return $request-> all();
}
Обратите внимание, что форма не включает токены CSRF, поэтому конфиденциальная информация, передаваемая в качестве входных параметров, подвержена различным атакам.
Форма с токеном CSRF
В следующих строках кода показана форма, переработанная с использованием токенов 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>
Достигнутый результат вернет JSON с токеном, как указано ниже -
{
"token": "ghfleifxDSUYEW9WE67877CXNVFJKL",
"name": "TutorialsPoint",
"email": "[email protected]"
}
Это токен CSRF, созданный при нажатии кнопки отправки.