Подтвердить что ты не робот

Являются ли идентификаторы (ObjectIds from mongo) безопасными для использования в URL-адресе?

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

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

Мне любопытно узнать, нет ли чего-то, что мне не хватает.

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

4b9b3361

Ответ 1

Поле

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

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

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

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

Ответ 2

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