Итак, что является лучшим способом предотвратить атаку XSRF для приложения GAE? Представьте себе следующее:Как лучше всего предотвратить атаки CSRF в приложении GAE?
- Любой пользователь может увидеть публичный объект пользователя, а идентификатор db.Model используется в запросе, чтобы выяснить, какой объект показывать. Вредоносный пользователь теперь имеет идентификатор.
- Вредоносный пользователь создает свой собственный объект и проверяет форму удаления. Теперь они знают, как удалить объект с определенным идентификатором.
- Вредоносный пользователь получает невиновного пользователя для отправки запроса на удаление для этого объекта пользователя.
Какие меры я могу добавить для предотвращения # 3? Обратите внимание, что когда я говорю ID, я использую фактическую идентификационную часть ключа. Одна из моих идей заключалась в том, чтобы использовать полное ключевое значение в запросах на удаление, но не позволит злоумышленнику понять это? Насколько я знаю, ключевым является некоторая комбинация типа класса модели, идентификатора приложения и идентификатора экземпляра объекта, поэтому они могли бы, вероятно, извлечь ключ из идентификатора, если захотят.
Любые другие идеи? Джефф написал a post about this и предложил пару методов - значение скрытой формы, которое изменилось бы при каждом запросе, и значение cookie, написанное через js в форме. Я не хочу исключать пользователей, не являющихся пользователями javascript, поэтому решение cookie не подходит - для значения скрытой формы мне придется записывать хранилище данных по каждому запросу, который отображает удаляемый объект, а не идеальную ситуацию для масштабируемого приложение!
Любые другие идеи?
Итак, если кто-то подключился к моему сайту через прокси-сервер и столкнулся с атакой XSRF, они были бы незащищенными? Кроме того, Джефф упомянул, что рефереры легко подделывать. Я знаю, что в качестве пользователя я могу легко это сделать, но может ли сайт каким-то образом заставить браузер сообщать о другом реферере? – 2008-10-14 13:16:14
Они были бы защищены только в том случае, если их прокси-сервер или браузер удаляет референт. Очень немногие делают это, и, защищая всех людей, которых вы защищаете, вы делаете атаку непривлекательной. И да, ссылки подделываются, но не с помощью какого-либо кода, который злоумышленник может убедить пользователя выполнить в своем браузере. – 2008-10-14 18:22:00
Не допускайте пустых заголовков Referer! Если HTTP-страница запрашивается с HTTPS-страницы, [Referer не отправляется] (http://stackoverflow.com/a/1361720/691281). Поэтому, если ваша форма находится на странице HTTP, злоумышленник может тривиально заставлять Referer быть пустым в атаке CSRF. Даже если ваша форма находится на странице HTTPS, я был бы очень подозрительным в отношении заголовков Referer. – 2013-04-06 17:37:22