Как разрешить пользователям зарегистрироваться с их адресами электронной почты в CouchDB безопасно - PullRequest
1 голос
/ 23 марта 2012

Я работаю над html5-приложением, созданным на CouchDB. Я хочу убедиться, что я настроил пользовательские данные наилучшим образом.

Я хотел бы использовать адрес электронной почты в поле "имя" пользовательских документов в базе данных _user. Вот так:

{
   "_id": "org.couchdb.user:John",
   "_rev": "1-e25df7d685c35dbeb8dabb2453adebe8",
   "name": "john@test.com",
   "salt": "32ef0f8b1651e0638080afc76d0111d6",
   "password_sha": "3023d37579fee19acd01d88c3ae1921a000418d7",
   "type": "user",
   "roles": [
   ]
}

Причина, по которой я хотел бы это сделать, заключается в том, что адрес электронной почты - это очень однозначная вещь, которую нужно запрашивать при регистрации, и она гарантированно уникальна среди пользователей. Это требует наименьшего количества мыслей со стороны пользователя, и это очень просто. Хотя есть проблема. Если база данных _user общедоступна, то, насколько я могу судить, адреса электронной почты в пользовательских документах тоже. Как я могу преодолеть это?

Должен ли я сделать базу данных _user частной (доступной для чтения и записи только администраторам?) Должен ли я хранить пользовательские данные в отдельных пользовательских базах данных, и если я это сделаю, как мои приложения смогут эффективно извлекать эти данные. Если у меня есть несколько данных пользователя, отображаемых на одной странице, с другими данными из других баз данных, разве это не станет действительно неэффективным?

Немного растерялся, хотелось бы узнать, как некоторые люди обращаются с личными данными пользователя.

1 Ответ

1 голос
/ 23 марта 2012

Я не использовал couchdb, но я только что прочитал в ответ на ваш вопрос ...

Я прочитал раздел «Безопасность и проверка» технического обзора .

Также вики: Security_Features_Overvie - Authentication_database

_id и имя должны совпадать Как сказано в вики:

Значение атрибута "_id" должно начинаться со строки "org.couchdb.user:", а остальные должны соответствовать значению атрибута "name".

Таким образом

{
   # won't work: "_id": "org.couchdb.user:John",
   "_id": "org.couchdb.user:john@test.com" # try this
   "_rev": "1-e25df7d685c35dbeb8dabb2453adebe8",
   "name": "john@test.com",
   "salt": "32ef0f8b1651e0638080afc76d0111d6",
   "password_sha": "3023d37579fee19acd01d88c3ae1921a000418d7",
   "type": "user",
   "roles": [
   ]
}

Однако

  1. Имя пользователя не может начинаться с подчеркивания
  2. Не ясноиз документов, если имя пользователя может включать в себя @.+ и другие символы, используемые именами электронной почты. Вам нужно будет попробовать.

Аутентификация и контроль доступа _user doc

Re: _user db должен быть закрытым?Да, это должно быть частным.Кроме того, в текущей версии CouchDB пользователь db имеет специальные средства безопасности и контроля доступа.Это было сделано для решения тех же проблем, с которыми вы боретесь.

Из той же базы данных аутентификации раздела вики:

... теперь база данных _users отличается от других баз данных:

Анонимный пользователь может создавать только новый документ.

Аутентифицированный пользователь может обновлять только свой собственный документ.

Это означает, что ваше программное обеспечение может безопасно создавать новые учетные записи.После проверки подлинности они могут только просматривать / изменять свою собственную информацию _user.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...