Должен ли я зашифровать поля username / email в моем MongoDB? - PullRequest
0 голосов
/ 13 октября 2019

Итак, я шифрую поля в базе данных, но не думаю, что смогу зашифровать пользователя username или email, потому что я использую эти поля, чтобы найти пользователя. Вместо этого я мог бы их хешировать, но так как я не думаю, что могу использовать уникальную соль для каждого имени пользователя / электронной почты, кто-то может просто использовать радужную таблицу, чтобы найти скрытое имя пользователя / электронную почту.

Полагаю, это нормально - не шифровать их? Я хотел бы сделать сайт максимально безопасным. Будет ли их хеширование иметь смысл? Я мог бы найти пользователя по его _id вместо username / email, но у меня не было бы его _id, пока я не найду пользователя.

Что я сейчас делаю:

const user = await new db.userModel({
    email: email,
    username: username,
    stuff: cryptr.encrypt(stuff),
});

////

const user = await db.userModel.findOne({
    email: email
}).exec();

РЕДАКТИРОВАТЬ: я думаю, что хеширование не имеет смысла, так как я не могу отменить хэширование имени пользователя / электронной почты. Не уверен, о чем я думал.

Ответы [ 2 ]

1 голос
/ 13 октября 2019

Этот вопрос действительно следует задавать в Infosec Stackexchange.

Шифрование обычно бессмысленно в качестве защиты от хакеров, поскольку вам необходим доступ к ключу для использования зашифрованной базы данных. Это означает, что вам нужно сохранить его рядом с базой данных. Если ваш сервер будет взломан, то хакер просто расшифрует базу данных с помощью ключа. Конечно, это лучше, чем ничего не делать, потому что возможно (возможно, невероятно), что хакер скомпрометирует только базу данных. Horatiu Jeflea Hovewer упоминает о других важных причинах шифрования базы данных, которые следует особенно учитывать, если вы не работаете над проектом в одиночку.

Хеширование имен пользователей возможно только в том случае, если вам не нужно их отображать, но имена пользователейобычно в любом случае общедоступны, поэтому это очень мало повышает безопасность.

Хеширование электронных писем - интересная проблема. Вы попросили их по причине. Вероятно, вам нужно связаться с вашими пользователями. Если вы их хешируете, вы не сможете это сделать, а если вам не нужно это делать, то вам не нужно (и не нужно) сохранять их в первую очередь. Однако, если они являются только частью процесса аутентификации, то это было бы возможным решением.

Радужные таблицы не могут реально сломать современные алгоритмы хеширования, хотя самое большое смягчение - это вышеупомянутая соль, которая сделает ее НАМНОГО сложнее для большинства атак на хеш. Вы также должны убедиться, что вы не используете уязвимые, такие как md5, но безопасные, такие как sha256 или достаточный bcrypt. Вы должны хешировать пароли с одним из них. Также обратите внимание, что вы можете использовать одну и ту же соль для всех полей хэширования, и соль может даже быть (это немного снизит безопасность) одним из открытых полей (имя пользователя?). Существует очень мало оправданий для того, чтобы не использовать соль.

В заключение: вы не можете их хэшировать, и шифрование, вероятно, не стоит, если вы не можете достаточно изолировать ключ, или вам это нужно из-за чего-то другого, чем внешние хакеры

1 голос
/ 13 октября 2019

Полагаю, это нормально - не шифровать их?

В большинстве случаев да. Пароли должны быть хэшированы (+ соль), а конфиденциальные данные должны быть зашифрованы. Но имя пользователя или адрес электронной почты в большинстве случаев не должны быть конфиденциальными.


Но давайте предположим, что они будут зашифрованы в БД.

Вы храните encrypt(username) в своей БД, так что по порядкучтобы найти это, вместо использования username используйте encrypt(username). Конечно, сортировка может вызвать некоторые головные боли, но поиск пользователя должен быть эффективным.


Подумайте о шифровании (в вашем случае) не о хакерах, а о людях, которые читают эти записи. Например, разработчики, которые занимаются производственной проблемой или администратором баз данных, вы хотите, чтобы некоторые (не все) поля были для них трудными для чтения. Хранение ключа на другом компьютере, лучше всего в инструменте управления ключами, добавит дополнительный уровень безопасности.

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