С# mongodb Риски использования ObjectId

Я наблюдал за объектом Mongodb ObjectId. Кажется, это небезопасный объект для моего клиента (даже его собственный SessionId). Хотя я использую следующий код для генерации случайных ObjectId:

var timestamp = DateTime.UtcNow;
        var machine = _random.Next(10000, 75757575);
        var pid = (short)_random.Next(10000, 75757575);
        var increment = _random.Next(10000, 75757575);

        return new ObjectId(timestamp, machine, pid, increment);

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

Есть ли способ по-прежнему использовать mongodb на С# и поддерживать безопасный идентификатор? Теперь некоторые говорят «используйте https», но это не проблема. Кто-то может войти в сеть, получить идентификатор сеанса типа ObjectId и попытаться угадать.

Как я могу уменьшить вероятность того, что что-то подобное произойдет?


person Ori Refael    schedule 18.02.2016    source источник


Ответы (1)


Если у вас есть какая-либо конфиденциальная информация, хранящаяся в БД, вы должны применить некоторые правила ACL в своем приложении, чтобы решить, может ли пользователь извлекать данные по objectId или нет.

person Alex Blex    schedule 18.02.2016
comment
Можете ли вы привести простой пример правила ACL, если я использую ObjectId в качестве токена пользователя для запросов от клиента к серверу? - person Ori Refael; 18.02.2016
comment
Ага, понятно. Итак, вы используете ObjectId для идентификации пользователя. Не делай этого. Для этого выдайте случайный токен сеанса при входе в систему. - person Alex Blex; 18.02.2016
comment
Да, конечно. Я использую это. Сеанс жив в течение месяца бездействия в основном. Если пользователь возвращается через месяц, он заменяется. Но все же, достаточно ли? Код, который я приложил, — это то, что создает идентификатор случайного сеанса. Является ли ObjectId безопасным броском здесь? - person Ori Refael; 18.02.2016
comment
Нет, ObjectId не добавляет безопасности. Почему бы не использовать стандартную криптобиблиотеку? Что-то вроде msdn.microsoft .com/ru-ru/library/. Особенно с учетом чрезвычайно длительного ttl. - person Alex Blex; 19.02.2016
comment
Я это сделаю. Тоже подумал об этом, просто подумал, правильно ли обрабатывать строки в каждом запросе и не расточительно ли - person Ori Refael; 19.02.2016