Являются ли идентификаторы (ObjectIds from mongo) безопасными для использования в URL-адресе?
Недавно мне сказали, что использование полей mongodb _id в URL-адресе небезопасно. Мне было интересно, правда ли это.
Мой сайт ограничен зарегистрированными пользователями, и каждый пользователь имеет свои конечные точки URL, которые содержат идентификатор от монго. Это типичное поле mongodb_id - SHA1. AFAIK, id недопустим, и даже если кто-то нажимает на кого-то другого, проверка на основе сеанса в моем приложении не разрешает доступ. Никто не имеет прямого доступа к базе данных, кроме самого приложения.
Мне любопытно узнать, нет ли чего-то, что мне не хватает.
Изменить: Уточненный вопрос. (идентификаторы объекта mongodb не являются SHA1)
Ответы
Ответ 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, он просто просит хакеров угадать следующий номер и получить информацию о случайных пользователях.