Как токены CSRF защищаются от вредоносного GET с последующим POST в другой вкладке
Я знаю, что что-то упустил, но, пожалуйста, помогите мне понять. Рассмотрим ситуацию: у меня есть веб-сайт goodbank.com. URL http://goodbank.com/transfer/ содержит HTML-страницу на GET с формой для перевода денег на другой счет. Форма имеет случайный токен для предотвращения атаки CSRF. На сервере проверка подлинности токена проверяется на POST, и соответствующий контроллер допускает только аутентифицированные сеансы.
Допустим, в моем браузере я захожу на goodbank.com/. В другой вкладке я захожу на robgoodbank.com. Как часть обслуживаемой страницы, он имеет JavaScript для выполнения AJAX-запроса к goodbank.com/transfer/, чтобы получить действующую форму. Затем он заполняет другие поля в форме и делает POST. Мой аккаунт вычищен:(
Как существующие схемы защиты защищают от такой атаки?
Заранее спасибо.
1 ответ
Если ваш сервер не разрешает общий доступ к ресурсам, браузер будет отклонять XMLHttpRequest
, По ссылке, XMLHttpRequest
отправляет Origin
заголовок, содержащий домен, из которого исходит запрос. Если сервер не отвечает Access-Control-Allow-Origin
содержащий подстановочный знак этого домена, браузер отклонит запрос. Есть на самом деле ряд Access-Control-
заголовки для контроля доступа, включая допустимые методы и т. д.
Для дополнительной защиты ваш сервер должен проверить Origin
если он присутствует и Referer
Заголовок HTTP, который в вашем примере будет " http://robgoodbank.com/", и вы также можете отклонить запрос.
Они ни в коем случае не являются надежными, но обеспечивают дополнительные уровни защиты. Существуют механизмы (такие как расширения), чтобы подделать Referer, но они были бы использованы пользователем, если бы их браузер не был скомпрометирован каким-либо образом. Если их браузер был взломан, у них гораздо больше проблем...