Я работаю на совершенно АЯКС-ориентированное приложение, где все запросы проходят через то, что в основном сводится к главному контроллеру, который, на его голые кости, выглядит примерно так:Является ли сервер заголовка X-Requested-With достаточным для защиты от CSRF для приложения, управляемого ajax?
if(strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
fetch($page);
}
Является ли это обычно достаточно, чтобы защитить против подделок поддельных запросов?
Это неудобно иметь вращающийся токен, когда вся страница не обновляется с каждым запросом.
Я предполагаю, что могу передать и обновить уникальный токен как глобальную переменную javascript с каждым запросом, но так или иначе чувствует себя неуклюжим и, по-видимому, по своей сути является небезопасным.
EDIT - Возможно, статический токен, такой как UUID пользователя, будет лучше, чем ничего?
EDIT # 2 - As The Rook указал, что это может быть вопрос, связанный с волосами. Я читал спекуляции в обоих направлениях и слышал отдаленные шепоты о более старых версиях флеш-памяти, которые можно использовать для таких махинаций. Поскольку я ничего не знаю об этом, я предлагаю щедрость всем, кто может объяснить, как это риск CSRF. В противном случае, я даю это Artefacto. Благодарю.
для записи Артефакто был верным. Вы должны прочитать руководство по безопасности браузера, а не спрашивать SO. Многие из ответов на SO неверны, особенно для таких разделов волос. – rook
В старых версиях флэш-памяти действительно существовали некоторые уязвимости (http://code.google.com/p/browsersec/wiki/Part2#Same-origin_policy_for_Flash). Тем не менее, для пользователей, которые действительно используют эти старые версии Flash, я бы сказал, что атаки CSRF являются меньшими из их проблем при столкновении с произвольными уязвимостями выполнения кода. – Artefacto
http://stackoverflow.com/questions/17478731/whats-the-point-of-the-x-requested-with-header | http://security.stackexchange.com/questions/23371/csrf-protection-with-custom-headers-and-without-validating-token –