Безопасны ли идентификаторы (ObjectIds from mongo) в URL? - PullRequest
15 голосов
/ 19 декабря 2011

Мне недавно сказали, что использование полей mongodb _id в URL небезопасно. Мне было интересно, правда ли это.

Мой сайт доступен только зарегистрированным пользователям, и у каждого пользователя есть конечные точки URL, которые содержат идентификатор от mongo. Это типичное поле mongodb _id - SHA1. AFAIK, идентификатор не угадывается, и даже если кто-то нажмет на чужой идентификатор, сеансовая аутентификация в моем приложении не разрешает доступ. Никто не имеет прямого доступа к базе данных, кроме самого приложения.

Мне любопытно узнать, есть ли что-то, что я пропускаю.

Редактировать: Уточненный вопрос. (Идентификаторы mongodb не являются SHA1)

Ответы [ 2 ]

19 голосов
/ 19 декабря 2011
Поле

_id из MongoDB (по умолчанию) имеет тип ObjectID . Это не SHA1.

И его строковое представление (например, 4ed7cbfd1d96406ca0000015, безусловно, безопасно для URL. Я использую его везде.

Я имею в виду, это безопасно выставлять везде, где вы бы поместили обычный int-идентификатор (/products/3 или /users/42 или любой другой).

На вашем сайте вы должны проверить, вошел ли пользователь в систему и имеет ли он доступ к данному URL. Не следует слепо разрешать пользователям посещать URL-адреса с идентификаторами объектов в них, просто потому, что их (идентификаторы) нелегко угадать (хотя они проще, чем SHA1)

3 голосов
/ 23 октября 2013

Неплохая идея использовать на первый взгляд случайную строку как _id (или создать guid) в URL, а не в числе. Если у вас есть публичный API, user / 1001, user / 20032, он просто просит хакеров угадать следующий номер и получить случайную информацию о пользователе.

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