Форма без токена CSRF: каковы риски

Какие именно риски я подвергаю себе, если я не использую токены csrf в своих формах? Я не ищу простые ярлыки или названия рисков, потому что они могут ввести в заблуждение. Мне нужно понять, что именно может сделать атакующий, и только при каких обстоятельствах они могут это сделать, на простом английском языке.

Уязвимость CSRF – это тот, который позволяет злоумышленнику (или веб-сайту) заставить ничего не подозревающего пользователя выполнить действие на вашем сайте, которое они не хотели.

Некоторые примеры в реальном мире были бы такими, как если бы вы разрешили пользователю удалять учетную запись через GET вместо POST, кто-то мог опубликовать следующий комментарий на вашем сайте (предполагая, что сайт имеет способ опубликовать комментарии или другой ввод и т. Д.),

Я думал, что сделаю комментарий на вашем сайте. Посмотрите это крутое изображение!
<img src = 'http: //example.com/delete_my_account.php "/>

И теперь, в любое время, когда зарегистрированный пользователь загружает эту страницу, их учетная запись будет удалена. Если бы это было сделано через POST вместо GET, кто-то мог создать форму и подтолкнуть пользователей к ее подаче, и такой же результат произойдет. Если бы вы использовали токен CSRF, это было бы невозможно.

Другим примером может быть то, что внешний сайт может создать форму, которая POST на ваш сайт, и выполнить нежелательное действие. Итак, скажем, на вашем сайте есть корзина для покупок, которая не использует токены CSRF. Злоумышленный сайт может создать форму с кнопкой, которая говорит «Нажмите здесь, чтобы зарегистрироваться», но на самом деле заказывает 1000 вещей с вашего сайта. Если зарегистрированный пользователь с вашего сайта посещает этот вредоносный сайт и нажимает кнопку, они получат приятный сюрприз по почте.

Очевидно, что есть другие случаи, это всего лишь несколько примеров. Поиск Google должен содержать множество статей и руководств, многие из которых, вероятно, будут иметь некоторые другие примеры. На странице Википедии также есть некоторые примеры, которые могут показаться вам интересными.

Основная идея примеров состоит в том, что кто-то может обмануть ваш сайт в выполнении действия, как если бы он пришел от пользователя, когда действительно пользователь не знал, что это происходит или не хочет, чтобы это произошло. Если у вас есть какие-либо действия на вашем сайте, которые являются деструктивными (т. Е. Могут удалять вещи из учетной записи пользователя, выходить из системы и т. Д.) Или критически (т.е. иметь дело с деньгами), вы должны, вероятно, использовать токены CSRF. Если ваш сайт является просто фотоальбом для друзей и т. Д., То вам, вероятно, не нужно беспокоиться о токенах CSRF (хотя всегда полезно попрактиковаться, когда вы создаете сайт, который им нужен).

Если вы не добавите токен, чтобы убедиться, что запрос пришел из формы, которую ваш сайт представил пользователю намеренно, у вас действительно нет способа узнать, намерен ли пользователь выполнить действие.

Таким образом, вы всегда хотите использовать уникальный токен в каждой форме, которую вы создаете, для POST, и для проверки любых запросов, которые были отправлены на ваш сайт, имеют действительный токен для текущего пользователя. Также удостоверьтесь, что истекли токены через некоторое время, чтобы они не длились вечно.

Я бы посоветовал вам прочитать эту замечательную статью, объясняющую, что такое CSRF и как вы могли бы наилучшим образом защитить себя от этого.