Представьте себе веб-приложение электронного банкинга в banking.example.com
со следующей формы представить сделку:
<form action="/transaction" method="post">
<input type="text" name="beneficiary"/>
<input type="text" name="amount"/>
<input type="submit" value="Pay"/>
</form>
Злоумышленник теперь может создать веб-сайт в hacker.net
со следующим:
<form action="https://banking.example.com/transaction" method="post" style="visibility:hidden">
<input type="text" name="beneficiary" value="John Doe, Account No. 34-236326-1"/>
<input type="text" name="amount" value="1000000"/>
<input type="submit" value="Pay"/>
</form>
<script>
document.forms[0].submit();
</script>
Затем злоумышленник обманул бы жертв посещения hacker.net
, что заставит браузеры жертв отправлять запрос POST в приложение электронного банкинга, делая большую транзакцию для хакера. Это работает, потому что браузер жертвы с радостью отправляет куки-файл сеанса вместе с поддельным POST-запросом в приложение электронного банкинга. Если форма была бы защищена токеном CSRF, злоумышленник не мог заставить браузер жертвы отправлять действительный запрос POST, и поэтому атака была бы невозможна.
Этот тип атаки называется атакой на межсайтовый запрос (CSRF).
Наверное, атаки CSRF также являются причиной того, что люди советуют никогда не посещать другие веб-сайты при регистрации в электронном банке или другом критическом веб-приложении.
Точки CSRF не защищают веб-форму, автоматически передаваемую постоянными авторизованными пользователями как сами. Чтобы защитить вас, вы должны использовать CAPTCHA.
@agf Я только что прочитал этот вопрос, и я не вижу дублирования ': (' –
Конечно, я читаю ответ сейчас ...;) –
Вы описываете анонимный пост. Все дело в том, чтобы защитить эту запись от реальных учетных данных пользователя. – Cheekysoft