Что такое прекращение атак на ссылку в атрибуте action в HTML-формах?
Я знаю, что название звучит запутанно, поэтому вот что мне интересно:
Допустим, у меня есть страница, на которой пользователи могут войти, https://example.com/login
, Форма на странице выглядит так:
<form method="post" action="https://example.com/api/auth/login">
<!-- input fields here -->
<button type="submit" value="Sign in">
</form>
Сценарий на https://example.com/api/auth/login
проверяет, правильно ли указано пользователем имя пользователя и пароль. Затем он отвечает с JSON соответственно.
Тем не менее, можно просто взять эту ссылку в action
атрибуты и угадать имена пользователей и пароли, выполняя повторные запросы. Что я, как разработчик, должен сделать, чтобы предотвратить такие атаки?
1 ответ
Описанная вами атака называется подделкой межсайтовых запросов, CSRF.
Вы действительно должны реализовать защиту csrf, вы можете выбрать один из нескольких вариантов. Токены синхронизатора можно использовать, если ваше приложение имеет статус (произвольный токен, сохраненный в сеансе и сгенерированный на странице html, затем отправленный и сравненный на сервере при каждом запросе на публикацию), или что-то вроде двойной публикации (установка одного и того же токена в cookie и как заголовок запроса и сравнивая их на сервере), если ваше приложение не имеет состояния.
Это влияет не только на вход в систему, но и на любое действие, которое подразумевает изменение состояния в вашем приложении (которое в основном, но не исключительно, изменение данных).
Также обратите внимание, что из-за той же политики происхождения любой злоумышленник, пытающийся использовать это, не будет напрямую знать, успешно ли выполнен вход в систему (или любое другое действие). Но часто это не имеет большого значения, они могут только догадываться.