Стоит ли шифровать адреса электронной почты в базе данных?

StackOverflow https://stackoverflow.com/questions/70450

  •  09-06-2019
  •  | 
  •  

Вопрос

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

Хотя у меня была мысль:что, если кто-то завладеет моей базой данных?Он содержит адреса электронной почты пользователей.Я не могу их хэшировать, потому что буду использовать их для отправки уведомлений по электронной почте и т. д.

Должен ли я их зашифровать?

Это было полезно?

Решение

У Брюса Шнайера есть хороший ответ на такого рода проблемы.

Криптография не является решением ваших проблем безопасности.Это может быть частью решения, а может быть частью проблемы.Во многих ситуациях криптография сначала усугубляет проблему, и совсем не очевидно, что использование криптографии является улучшением.

По сути, шифрование вашей электронной почты в базе данных «на всякий случай» на самом деле не делает базу данных более безопасной.Где хранятся ключи базы данных?Какие права доступа к файлам используются для этих ключей?Доступна ли база данных публично?Почему?Какие ограничения действуют для этих учетных записей?Где хранится машина, кто имеет физический доступ к этому ящику?А как насчет удаленного входа в систему/доступа по SSH и т. д.и т. д.и т. д.

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

Конечно, это может быть частью обширной политики безопасности вашей системы – если да, то отлично!

Я не говорю, что это плохая идея — но зачем на двери замок от Deadlocks'R'us, который стоит 5000 долларов, если они могут прорезать фанеру вокруг двери?Или войти через окно, которое вы оставили открытым?Или, что еще хуже, они находят ключ, оставленный под ковриком.Безопасность системы зависит от самого слабого звена.Если у них есть root-доступ, они могут делать все, что хотят.

Стив Морган подчеркивает, что даже если они не могут понять адреса электронной почты, они все равно могут причинить большой вред (который можно было бы смягчить, если бы у них был только доступ SELECT)

Также важно знать, по каким причинам вы вообще сохраняете адрес электронной почты.возможно я немного переборщил с этот ответ, но я хочу сказать, действительно ли вам нужно хранить адрес электронной почты для учетной записи?Самые безопасные данные — это данные, которых не существует.

Другие советы

Я понимаю, что это мертвая тема, но я согласен с логикой Арьяна.Есть несколько вещей, которые я хотел бы отметить:

Кто-то может получить данные из вашей базы данных, не запрашивая исходный код (т.SQL-инъекция, сторонние базы данных).Учитывая это, разумно рассмотреть возможность использования шифрования с ключом.Хотя это всего лишь дополнительная мера безопасности, а не защита... это для тех, кто хочет, чтобы электронная почта была более конфиденциальной, чем обычный текст. На случай, если что-то будет упущено во время обновления или злоумышленнику удастся получить электронные письма.

ИМХО: Если вы планируете зашифровать электронное письмо, сохраните также его соленый хеш.Затем вы можете использовать хеш для проверки и сэкономить на постоянном использовании шифрования для поиска огромной строки данных.Затем создайте отдельную приватную функцию для получения и расшифровки ваших писем, когда вам понадобится ее использовать.

Как и в большинстве требований безопасности, вам необходимо понимать уровень угрозы.

Какой ущерб может быть нанесен, если адреса электронной почты будут скомпрометированы?

Какова вероятность того, что это произойдет?

Ущерб, нанесенный в случае ЗАМЕНЫ адресов электронной почты, может быть намного больше, чем в случае их РАСКРЫТИЯ.Особенно, если вы, например, используете адрес электронной почты для проверки сброса пароля в защищенной системе.

Вероятность замены или раскрытия паролей значительно снижается, если вы их хешируете, но это зависит от того, какие другие элементы управления у вас есть.

Я бы сказал, что это зависит от применения вашей базы данных.

Самая большая проблема: где хранить ключ шифрования?Потому что, если у хакера есть что-то большее, чем ваша БД, все ваши усилия, вероятно, будут потрачены впустую.(Помните, что вашему приложению понадобится этот ключ шифрования для расшифровки и шифрования, поэтому в конечном итоге хакер найдет ключ шифрования и использованную схему шифрования).

Плюсы:

  • Утечка вашей БД только не будет раскрывать адреса электронной почты.

Минусы:

  • Шифрование означает потерю производительности.
  • Выделить действия с базой данных будет сложнее, если не невозможно.

Не путайте случайно шифрование с обфускацией.Мы обычно запутываем электронные письма, чтобы предотвратить спам.Многие веб-сайты будут иметь «веб-мастер _at_ mysite.com», чтобы замедлить анализ сканерами адреса электронной почты как потенциальной цели для спама.Это следует сделать в шаблонах HTML — в постоянном хранилище базы данных делать это не имеет смысла.

Мы ничего не шифруем, если только нам не нужно сохранить это в секрете во время передачи.Когда и куда будут передаваться ваши данные?

  1. Операторы SQL передаются от клиента к серверу;это на том же ящике или через защищенное соединение?

  2. Если ваш сервер взломан, у вас произошла непреднамеренная передача.Если вас это беспокоит, возможно, вам следует защитить свой сервер.У вас есть внешние угрозы, а также внутренние угрозы.ВСЕ ли пользователи (внешние и внутренние) надлежащим образом аутентифицированы и авторизованы?

  3. Во время резервного копирования происходит преднамеренная передача данных на резервный носитель;это делается с использованием безопасной стратегии резервного копирования, которая шифрует по ходу работы?

И SQL Server, и Oracle (а, я думаю, и другие БД) поддерживают шифрование данных на уровне базы данных.Если вы хотите что-то зашифровать, почему бы просто не абстрагировать доступ к данным, которые могут быть зашифрованы на стороне сервера базы данных, и оставить пользователю выбор, использовать ли зашифрованные данные (в этом случае команда SQL будет другой) или нет.Если пользователь хочет использовать зашифрованные данные, он может настроить сервер базы данных, и все работы по обслуживанию, связанные с управлением ключами, выполняются с использованием стандартного инструмента администратора базы данных, созданного поставщиком БД, а не вами.

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


В целом я согласен с другими, говорящими, что это не стоит усилий.Однако я не согласен с тем, что любой, кто имеет доступ к вашей базе данных, вероятно, также может получить и ваши ключи.Это, конечно, не верно для SQL-инъекций и может быть неверным для резервных копий, которые каким-то образом потеряны или забыты.И я считаю, что адрес электронной почты — это личная информация, поэтому меня волнует не спам, а личные последствия раскрытия адресов.

Конечно, если вы боитесь SQL-инъекций, вам следует убедиться, что такие инъекции запрещены.А резервные копии сами должны быть зашифрованы.

Тем не менее, участники некоторых онлайн-сообществ могут определенно не хотеть, чтобы другие знали, что они являются участниками (например, в связи с психическим здоровьем, финансовой помощью, медицинскими и сексуальными советами, развлечениями для взрослых, политикой...).В таких случаях хранить как можно меньше личных данных и шифровать те, которые необходимы (обратите внимание, что шифрование на уровне базы данных не препятствует отображению деталей с помощью SQL-инъекции), возможно, будет не такой уж плохой идеей.Снова:относитесь к адресу электронной почты как к личной информации.

Для многих сайтов вышеизложенное, вероятно, не соответствует действительности, и вам следует сосредоточиться на запрете SELECT * FROM посредством SQL-инъекций и обеспечения того, чтобы посетители не могли каким-либо образом получить доступ к чужому личному профилю или информации о заказе, изменив URL-адрес.

Шифровать данные в базах данных стоит, это не усложняет задачу, а делает ее намного сложнее, если она зашифрована правильно, поэтому прекратите философию и зашифруйте конфиденциальные данные;)

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

@Роо

Я в некоторой степени согласен с тем, что вы говорите, но не стоит ли шифровать данные только для того, чтобы их было немного сложнее получить?

По вашим рассуждениям было бы бесполезно иметь в доме замки или сигнализацию, ведь их тоже можно легко взломать.

Мой ответ:

Я бы сказал, что если у вас есть конфиденциальные данные, и вы не хотите, чтобы они попали в чужие руки, вам, вероятно, следует сделать все возможное, чтобы хакер смог получить их, даже если это не на 100% надежно.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top