Подделка межсайтовых запросов (CSRF) – это атака, при которой клиенты выполняют некоторые нежелательные действия, которые они не планируют выполнять в веб-приложении, вошедшем в систему по инициативе злоумышленников. Это уязвимость веб-безопасности. И это хорошо известная атака, которая входит в топ-10 уязвимостей безопасности OWASP. Он также известен как «сессионная езда», «XSRF» или «атака в один клик». Злоумышленники могут изменить адрес электронной почты пользователя, пароль пользователя или могут осуществлять переводы средств с учетной записи пользователя, если CSRF-атака успешно проведена. Для выполнения CSRF используются некоторые вредоносные приемы социальной инженерии, такие как ссылки, электронные письма и т. д. Они обманом заставляют жертву отправить поддельный запрос на сервер.

Мы можем предотвратить атаки CSRF, используя два метода для веб-приложений. Мы можем реализовать эти шаблоны безопасности для защиты от уязвимости. Они есть,

1. Шаблон токена синхронизатора

2. Шаблон файла cookie с двойной отправкой

Теперь я собираюсь рассказать о шаблоне Synchronizer Toekn.

Synchronizer Toekn Pattern (STP) — это концепция снижения уязвимости от CSRF-атак. Этот метод имеет безопасный случайный токен (токен CSRF). Оно должно быть уникальным для сеанса пользователя, большим случайным значением, сгенерированным криптографически безопасным генератором псевдослучайных чисел (CSPRNG). Он встроен как скрытое поле в HTML-формы и проверяется на стороне сервера.

Преимущества::

Работает с Аякс

работает с формами

Недостатки::

Требует много времени на внедрение для большого сайта

Все формы должны выводить скрытое поле в HTML

Как это работает?

Когда клиент входит в веб-приложение, сервер генерирует идентификатор сеанса и токен CSRF и сохраняет их в базе данных сервера в соответствии с пользователем. Затем сервер отправляет ответ с идентификатором сеанса в виде файла cookie в браузер. После этого клиент запрашивает другую форму и ответ сервера с html-страницей. Затем клиентский браузер использует вызов ajax для получения токена CSRF с сервера. Используя вызов ajax, мы можем предотвратить атаки CSRF, потому что ответ на вызов ajax может использовать только тот же домен. После этого токен CSRF скрывается в скрытом поле формы, которую клиент снова запрашивает. После отправки формы сервер проверяет значение CSRF, которое хранится на сервере, со значением в скрытом поле в отправленной форме.

Я разработал простое веб-приложение с использованием PHP и Java Script. Вы можете получить эти исходные коды в git hub. ("кликните сюда)"

Сначала вам нужно войти в тестовое веб-приложение, указав имя пользователя и пароль. Для этой демонстрации имя пользователя — «admin», а пароль — «admin».

Пользователь отправляет эту форму входа, используя учетные данные пользователя в методе POST. После этого подтвердите учетные данные и, если пользователь прошел проверку подлинности успешно, сервер создаст идентификатор сеанса и токен CSRF и сохранит их в текстовых файлах. Затем сервер устанавливает идентификатор сеанса как файл cookie. После этого пользователь будет перенаправлен на home.php с другой html-формой.

Затем браузер отправляет вызов ajax для получения токена CSRF на сервер. Теперь сервер ответит на соответствующий токен CSRF из сохраненного файла, используя файл cookie идентификатора сеанса. После этого токен сохраняется в атрибуте value в скрытом поле, которое находится в форме обратной связи в home.php.

Теперь пользователь отправляет форму обратной связи, затем сервер проверит токен CSRF, который находится в скрытом поле в отправленной форме, с токеном CSRF, который хранится на стороне сервера.

Если эти два маркера совпадают, веб-приложение сохранит отзыв на сервере и отобразит сообщение об успешном завершении на домашней странице.

В противном случае, если он не соответствует, сервер перенаправит пользователя на страницу входа и отобразит сообщение об ошибке.

В следующей записи блога я расскажу о методе предотвращения CSRF Double Submit Cookie. Спасибо!