Небезопасна ли защита CSRF по умолчанию Rails?

По умолчанию защита CSRF формы post в Rails создает токен аутентификации для пользователя, который изменяется только при изменении пользовательского сеанса. Один из наших клиентов проверил аудит безопасности нашего сайта и отметил, что это проблема.

Заявление аудитора состояло в том, что, если бы у нас также была уязвимость XSS, злоумышленник мог бы захватить другой токен аутентификации пользователя и использовать его для атак CSRF до истечения срока действия пользовательского сеанса.

Но мне кажется, что если бы у нас была такая уязвимость XSS, злоумышленник мог бы так же легко захватить другой cookie сеанса пользователя и войти в систему как этот пользователь напрямую. Или даже просто звоните в наш REST Api из script, когда пользователь подвергается атаке. Возможность установки атаки CSRF в такой ситуации не кажется хуже, проблема заключается в уязвимости XSS.

Я что-то пропустил? Существует ли реальная проблема с защитой CSRF по умолчанию в Rails?

Ответ 1

Вы совершенно правы. Защита, основанная на токенах CSRF, является наиболее распространенной и до тех пор, пока вы тестируете приложение для XSS, все должно быть в порядке.

Есть случаи, когда CSRF можно остановить, независимо от XSS. Например, для вашего форума смены пароля требуется, чтобы они знали текущий пароль. Хакер не сможет подделать этот запрос, если он не знает текущий пароль, спорный вопрос.

Другой метод - потребовать, чтобы Captcha решался для этого запроса. Я рекомендую использовать reCapthca.