Я унаследовал некоторый код, который недавно подвергся атаке, когда злоумышленник повторно отправлял удаленные формы.
Я реализовал предотвращение, используя маркер аутентификации сеанса, который я создаю для каждого пользователя (а не идентификатор сеанса). Хотя я понимаю, что эта конкретная атака не является CSRF, я адаптировал свое решение из этих сообщений (хотя и устаревших).
- https://www.owasp.org/index.php/Cross-Site_Request_Forgery_%28CSRF%29
- http://tyleregeto.com/a-guide-to-nonce
- http://shiflett.org/articles/cross-site-request-forgeries
Тем не менее, он все еще чувствует, что здесь есть некоторая уязвимость. Хотя я понимаю, что ничто не является безопасным на 100%, у меня есть несколько вопросов:
- Разве потенциальный злоумышленник не может просто начать действительный сеанс, а затем включить идентификатор сеанса (через файл cookie) в каждый из своих запросов?
- Кажется, nonce лучше, чем токен сеанса. Как лучше всего создать и отслеживать одноразовый номер?
- Я столкнулся с некоторыми моментами, когда эти решения были только одним окном. Может ли кто-нибудь уточнить этот момент?
- Всегда ли эти решения требуют сеанса? Или эти токены можно создать без сеанса? ОБНОВЛЕНИЕ, эта конкретная страница представляет собой всего лишь одностраничную форму (без входа в систему). Таким образом, запуск сеанса только для генерации токена кажется чрезмерным.
- Есть ли более простое решение (не CAPTCHA), которое я мог бы реализовать для защиты от этой конкретной атаки, которая не использует сеансы.
В конце концов, я ищу лучшее понимание, чтобы я мог реализовать более надежное решение.