Итак, что является лучшим способом предотвратить атаку XSRF для приложения GAE? Представьте себе следующее:
- Любой пользователь может видеть публичный объект пользователя, а в запросе используется идентификатор db.Model, чтобы выяснить, какой объект показывать. Вредоносный пользователь теперь имеет идентификатор.
- Вредоносный пользователь создает свой собственный объект и проверяет форму удаления. Теперь они знают, как удалить объект с определенным идентификатором.
- Вредоносный пользователь получает невиновного пользователя для отправки запроса на удаление для этого пользовательского объекта.
Какие шаги я могу добавить для предотвращения # 3? Обратите внимание, что когда я говорю ID, я использую фактическую идентификационную часть ключа. Одна из моих идей заключалась в том, чтобы использовать полное ключевое значение в запросах на удаление, но не позволит злоумышленнику понять это? Насколько я знаю, ключевым является некоторая комбинация типа класса модели, идентификатора приложения и идентификатора экземпляра объекта, поэтому они могли бы, вероятно, извлечь ключ из идентификатора, если захотят.
Любые другие идеи? Джефф написал сообщение об этом и предложил пару методов - значение скрытой формы, которое будет меняться при каждом запросе, и значение cookie, написанное через js к форме. Я не хочу исключать пользователей, не являющихся пользователями javascript, поэтому решение cookie не подходит - для значения скрытой формы мне придется записывать хранилище данных по каждому запросу, который отображает удаляемый объект, а не идеальную ситуацию для масштабируемого приложение!
Любые другие идеи?