Вот чего вам не хватает :)
Ключи Parse.com REST/JavaScript предназначены для использования «в дикой природе». С этими ключами невозможно обойти правила доступа к объектам или проверки перед сохранением. Это может сделать только мастер-ключ. Защитите главный ключ. Полезной аналогией является шифрование с открытым ключом: вам нужно поделиться своим открытым ключом, но защитить закрытый ключ.
Кто-нибудь может изменить ваши данные? Да, но только если вы им позволите. Могут ли пользователи запрашивать данные, принадлежащие другим пользователям? Да, но опять же, только если вы им позволите. У Parse есть несколько способов обеспечить целостность и безопасность данных.
Во-первых, это разрешения для каждого объекта. Используйте веб-интерфейс Parse.com, чтобы задать а) возможность создания классов на лету и б) разрешения CRUD для существующих классов. Один из самых простых шагов для защиты приложения — отключить любые разрешения класса, которые не требуются явно. Например, объекты, созданные на сервере, которые не должны быть доступны для записи (или, возможно, чтения) конечными пользователями.
Второй — списки управления доступом (ACL). ACL устанавливаются для каждой записи. Они определяют, какие пользователи или роли могут читать или записывать запись. Записи без ACL являются общедоступными (любой пользователь может найти их). Если Сью создает запись, которая должна быть для нее личной, установите ACL как таковой. Том не сможет найти его без отмычки.
Третий — облачный код. Вы можете применять критически важные бизнес-правила и проверки данных, используя функции beforeSave/afterSave. Определите, что действительно важно, и убедитесь, что это проверено в этих функциях. Также рекомендуется явно установить ACL в этих функциях. ACL могут быть переданы при создании объекта, но конечный пользователь может изменить их.
Вот краткое практическое правило безопасности и целостности.
Разрешения на доступ к объектам должны быть настолько открытыми, насколько это необходимо для поддержки ваших требований.
Каждая запись должна иметь ACL, если вы не уверены, что это не так.
Большинство ACL должны быть установлены с функциями before/afterSave.
Любые проверки, которые должны выполняться, должны проверяться в функциях before/afterSave.
И последнее: заманчиво думать обо всей бизнес-логике как о «важной» и настаивать на «совершенной целостности». Это избыточно для многих приложений. Убедитесь, что у вас есть достаточная защита на стороне сервера, чтобы один пользователь никогда не мог причинить вред вам или другим вашим пользователям. Особо переживать за это (кроме расходов на поддержку) особого смысла нет. Если кто-то экспериментирует с вашим приложением, но не может преднамеренно или непреднамеренно мешать другим, возможно, они найдут совершенно новый способ его использования :).
person
Drew Goodwin
schedule
06.08.2013