Безопасное использование пространства имен приложения GAE - PullRequest
1 голос
/ 31 августа 2010

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

Взглянув на appengine_config.py из предложенного примера , представляется несколько предложенных способов определения того, каким должно быть пространство имен, т.е.

  1. Имя сервера
  2. Домен Служб Google
  3. Cookie

Я хотел бы выбрать пространства имен на основе поиска в хранилище данных. т.е.

namespace = user.account.name

Для некоторого объекта user, связанного с account, учетная запись которого имеет поле name. Есть несколько способов сделать это:

  1. поиск в хранилище данных по каждому запросу
  2. поиск в memcache при каждом запросе (откат к хранилищу данных по истечении срока действия memcache)
  3. безопасные данные cookie

Поиск в хранилище данных будет медленным. Есть ли такая бронь с поиском в memcache? например memcache.get('nslookup:%s' % user_id), учитывая user_id. (Я верю, что объект users работает, как ожидалось в appengine_config.py).

В качестве альтернативы, можно использовать безопасный cookie для решения этой проблемы. Я не удовлетворен безопасностью флага «Безопасный» (т. Е. Форсирование SSL). Однако я не уверен, как лучше защитить данные в куки. Я полагаю, что симметричное шифрование с подписью PyCrypto с использованием секретного ключа в GAE - это один из способов начать этот путь. Хотя этот шаблон был проверен , я был бы благодарен за любые мысли относительно этого предложенного решения, в частности.

Безопасные куки не кажутся лучшим путем с идеологической точки зрения; Я уже рассчитываю на получение идентификатора пользователя, все, что мне нужно, - это сопоставление пользователя с его учетной записью - нет логической основы для шифрования, отправки, хранения, получения и расшифровки этого сопоставления при каждом запросе. Опции memcache кажутся лучшими из трех, но я был бы благодарен за мысли и вклад. Единственная причина, по которой я могу использовать безопасные куки-файлы, - это производительность или альтернатива, если доступ к memcache был недоступен в appengine_config.py.

.

Мы приветствуем мысли, отзывы и вызовы моим предположениям.

Спасибо за чтение.

Brian

Ответы [ 2 ]

1 голос
/ 03 сентября 2010

С точки зрения производительности, все, что позволяет избежать необходимости поиска в memcache или datastore при каждом запросе, будет наилучшим вариантом.Однако вы путаете два определения «безопасного» cookie: флаг «secure» в спецификации cookie требует, чтобы cookie отправлялся только по SSL, тогда как в другом смысле «безопасный» cookie - это файл, который нельзя изменитьнезаметно для пользователя - что является наиболее важным в этом случае использования.

Однако не нужно шифровать содержимое - вы хотите предотвратить изменение, а не раскрытие - поэтому, если вы не можете использовать существующийБиблиотека, вы можете просто добавить HMAC cookie в его конец, используя секретный ключ, который вы встраиваете в свое приложение.Проверка HMAC при каждом запросе будет намного быстрее, чем при использовании memcache.

1 голос
/ 31 августа 2010

Я думаю, что безопасные куки - это путь, потому что они достаточно быстрые.Базовая реализация, извлеченная из Tornado, находится здесь (вам просто нужен класс SecureCookie и он может игнорировать «сессионный» материал):

http://code.google.com/p/webapp-improved/source/browse/extras/sessions.py#104

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