2015-01-17 4 views
5

Я новичок в синтаксическом анализе и задаю вопрос о безопасности данных в синтаксической разборке User «table». Я хочу хранить дополнительные данные вместе с данными пользователя. Например, номер телефона. Но по умолчанию parse устанавливает для таблицы пользователя доступ для чтения для всех. Поэтому, если кто-то просто ударит мой parse api, они смогут получить список всех пользователей и их номера телефонов. Очевидно, это не очень безопасно. Так должен ли я устанавливать пользовательские объекты, чтобы они не могли быть прочитаны кем-либо? Или я должен хранить свои данные в другой таблице? Связанный, я также думаю, что для кого-то странно просто иметь возможность в основном сбрасывать все мои столбцы по умолчанию для моих пользователей. Прямо сейчас кто-нибудь с моим ключом API может получить всех пользователей и их адреса электронной почты. Я что-то пропустил здесь о том, насколько это небезопасно?Parse User object ACL

+0

Я бы рекомендовал хранить личные данные в другом классе и связать объект с конкретным пользователем. – eth3lbert

+0

Вы когда-нибудь находили для этого ответ? Я знаю, что класс _User имеет встроенную защиту по умолчанию, но ваш вопрос о том, действительно ли вы можете сбросить все имена пользователей и адрес электронной почты, если это возможно, вызывает беспокойство. User Doc: https://parse.com/docs/ios_guide#users-security/iOS –

+0

Нет. Никогда не получал окончательного ответа. Все еще борется за лучший способ справиться с этим. Угадайте, лучший вариант - просто начать играть с настройками. Я заметил, что вы можете снять долг и найти разрешения для пользовательского объекта, но даже изменение этих прав оставляет права доступа к папкам только для реальных рядов пользователей. поэтому любые существующие разрешения на уровне элемента, похоже, не подвержены влиянию. Для меня это может быть нормально, поскольку у меня пока нет реальных пользователей. Но это может быть реальной проблемой для уже установленного приложения. – TehOne

ответ

2

Мне потребовалось некоторое время, чтобы обернуть мне голову. Во-первых, вы захотите отключить создание нового класса, а затем установите ACL на основе каждого класса (максимально) только для чтения. Вы также можете отключить чтение.

См https://parse.com/docs/data#security-classes

Затем вам нужно настроить некоторые роли и пользователей и установить списки управления соответствующим образом. Вы не можете реально настроить ACL/роли/пользователей эффективно через браузер данных, но это необходимо сделать программно. Я использовал API REST и некоторые фрагменты curl для экспериментов.

См https://parse.com/docs/rest#roles

+1

Спасибо, но я думаю, что я понимаю безопасность анализа в целом. Мой вопрос был более конкретно, прося совета о встроенной пользовательской таблице. – TehOne

+0

Я думаю, что требование разрешения GET является причиной головных болей для тех, кто хочет защитить электронные адреса пользователей. – fatuhoku

7

Ваши опасения вполне справедливы. Разрешения по умолчанию для базы данных Parse сконфигурированы для легкой разработки , поэтому без дальнейшей настройки почти тривиально для всех, кто сбрасывает всех ваших пользователей. К сожалению, реальная безопасность требует довольно значительных усилий, когда различные дефолты сразу сделают многие приложения более безопасными.

Смотрите этот блог для примера того, как легко свалка пользователь может быть: https://www.webniraj.com/2013/08/01/using-the-parse-javascript-sdk-be-careful/

ОГР-объекта списки ACL не может обеспечить доступ, который был запрещен разрешениями на уровне класса, так что даже если вы не хотите никаких общедоступных пользовательских данных, разрешения на уровне общие классы для нуждающихся Анализировать класса User, чтобы быть настроены таким образом, который позволяет SDKs взаимодействовать с ними:

  • Public «Получить» требуется для клиент, чтобы иметь возможность refre sh текущего пользователя.
  • Публичный «Создать» требуется только для того, чтобы зарегистрировать пользователя.
  • Для того, чтобы установить имя и пароль, требуется публичное обновление.

Эти общедоступные разрешения затем ограничены с помощью ACL пользователя. Встроенному классу User присваивается ACL по умолчанию с общедоступным чтением и приватным readwrite (для конкретного пользователя). Мне не нужно публичное чтение читать для пользователей, так что в hookCase Cloud Code я изменил ACL на приватный readwrite. На самом деле я даже не хотел иметь доступ к частной записи, так как я собирался использовать Cloud Code для пользовательских обновлений, но ACL всегда возвращался к частному readwrite.

Мне не нужна была возможность поиска других пользователей, поэтому я отключил общедоступную функцию «Найти», которая является быстрым решением, позволяющим не сбрасывать всю вашу информацию о пользователе. Хотя менее рискованно и требует идентификатора конкретного объекта, публичный «Get» все равно может быть подвергнут злоупотреблениям, поэтому я удалил общедоступное чтение из ACL пользователя.

UPDATE:

Настройка разрешений Класс Уровень (CLPS) публично позволить операции не обязательно означает, что какие-либо данные в открытом доступе. Эти CLP определяют, какие операции могут выполняться для каждого класса базы данных из любого клиентского SDK (что означает «public» - использование «закрытого» главного ключа все равно может переопределить все). Затем ACL для каждого объекта определяют, какие пользователям/ролям разрешено читать и писать этот объект. Я бы настоятельно рекомендовал читать их блога в блоге с 5 частями по безопасности, чтобы получить представление о взаимодействиях между CLP и ACL уровня объекта: Parse Blog: Security

CLP позволяют вам нужно заблокировать доступ клиента к целым классам в базе данных. Например, у меня есть класс, используемый только облачным кодом, поэтому я отключил все CLP (предотвращение чтения или записи этих SDK клиента), а затем код облака использует мастер-ключ для переопределения CLP для использования на сервере. У меня также есть клиентский интерфейс, но объекты частные для пользователя. Найдите CLP, но привязаны к пользователю с помощью частного ACL для чтения и записи только для этого пользователя.

Анализировать также добавил, что «разрешение указатель» в последнее время, которые выглядят полезными в ограничении доступа к «хозяину» каждого объекта, но я лично не использовал эти: Parse Pointer Permissions

+0

Насколько вы уверены в том, что вы используете Public Get, Create, Update для _User? Если так, то Parse, похоже, позволяет вам справляться с проблемами с точки зрения безопасности, сначала поощряя электронные письма для использования в качестве имен пользователей, а затем требуя, чтобы _Users были общедоступными. Это означает, что если пользователь связан, скажем, с «сообщением», то просто говоря «include (« пользователь »), вы также можете получить электронное письмо пользователя. Я отчаянно пытаюсь сделать _User как можно более приватным. Но это не похоже, что это хорошая идея! – fatuhoku

+0

Я написал проблему в ParseUI здесь: https://github.com/ParsePlatform/ParseUI-iOS/issues/200 – fatuhoku

+0

@fatuhoku Обновлено с расширенным объяснением взаимодействия CLP и ACL. –