2016-05-16 2 views
2

Я создаю систему сеансов для сервера Happstack, и я использую mongoDB для постоянного хранения. Мне было интересно, безопасны ли идентификаторы объектов MongoDB для использования в качестве идентификаторов сеанса.MongoDB ObjectID safe для идентификатора сеанса

ответ

2

Вообще говоря, идентификаторы объектов MongoDB уникальны во всем мире и поэтому безопасны, если вас беспокоит столкновение.

Однако, если вы говорите об идентификаторе сеанса, вопрос действительно зависит от того, как вы шифруете его на стороне клиента и как. Как правило, ответы на эти вопросы должны быть да и как зашифрованное значение cookie, непрозрачное для клиента. Обычно любой веб-сервер, который вы используете, будет иметь утилиты, чтобы помочь с этим.

Опять же, если вы просто пытаетесь убедиться, что у вас есть уникальный идентификатор и хотите использовать идентификатор объекта в качестве источника, вы в порядке.

+0

Не имеет смысла (или, по крайней мере, быть быстрее) использовать криптографически безопасное случайное значение как идентификатор вместо ObjectID? Я думаю, что шифрование и дешифрование идентификаторов все время может привести к некоторым проблемам производительности? – NatureShade

+0

Собственно, поскольку клиент никогда не имеет доступа к идентификатору сеанса (только сервер когда-либо читает его), он подвержен довольно быстрому шифрованию. Посмотрите, как это делает Rails. В качестве побочного примечания особенно полезно использовать ObjectId, если ваш магазин сеансов поддерживается чем-то вроде MongoDB (опять же, Devise in Rails - пример). – TreyE

1

MongoDB ObjectID имеет длину 12 байтов [1], а идентификатор сеанса, вероятно, реализован как 32 байта [2]. Разница в том, что злоумышленнику легче угадать свой идентификатор сеанса, если он является объектной идентификацией MongoDB, но ваша безопасность сеанса обычно не ограничивается только наличием трудноопределяемого идентификатора сеанса.

Тем не менее, есть идея, рекомендующая идентификатор сеанса, должен бить менее 16 байтов [3]. В этом случае идентификатор идентификатора Vano MongoDB не является безопасным для идентификатора сеанса.

[1]. https://godoc.org/labix.org/v2/mgo/bson#ObjectId [2]. https://astaxie.gitbooks.io/build-web-application-with-golang/content/en/06.2.html [3]. https://www.owasp.org/index.php/Session_Management_Cheat_Sheet

Смежные вопросы