Подделка межсайтовых запросов (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. Спасибо!