Как генерируется ключ хранилища данных GAE?

#google-cloud-datastore

#google-облако-хранилище данных

Вопрос:

Это случайное значение? Или пользователь может извлечь некоторые данные из этого значения?

Комментарии:

1. 2 причины, по которым я бы не стал задавать или не ответил на вопрос: неразумно для дизайна приложений, неразумно для безопасности GAE.

2. @topchef, я мог бы согласиться со второй частью, но не согласился бы с первой 😉 — Я должен понять, могу ли я использовать это как часть URL-адреса — может ли пользователь извлечь из этого что-то еще или нет.

3. @LA — тогда мы говорим только о 2d-части все вместе. Случайно, я только что разговаривал с одним из клиентов программного обеспечения, которое я поддерживаю на днях, который спросил, почему мы не предоставляем внутренние ключи в нашей модели пользовательского интерфейса (в MVC), в то время как мы активно используем его в URL. Я не мог придумать ни одной веской причины, кроме того, почему мы этого не делаем: они не имеют никакого значения для клиента, и мы предлагаем уникальные идентификаторы, которые несут бизнес-семантику, а также идентичность. И поскольку я не в состоянии дать хакерам какие-либо дополнительные шансы, я сопротивляюсь раскрытию этих ключей только потому, что могу.

Ответ №1:

ключ хранилища данных состоит из вида, имени строки или целого идентификатора и необязательного пути к родительскому объекту (docs). все они указаны пользователем, кроме идентификатора, поэтому я предполагаю, что это то, о чем вы спрашиваете.

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

более подробная информация: http://groups.google.com/group/google-appengine/browse_thread/thread/dec83c2dbd9542e4#f495648c988d758c

(что касается секретного вопроса, то безопасность App Engine не зависит от сохранения этого механизма выделения идентификаторов в секрете. возможно, вы захотите прочитать о том, почему безопасность через неизвестность обычно считается плохой вещью. : P)