Подтвердить что ты не робот

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

Из соображений безопасности стоит ли шифровать электронные письма пользователей перед тем, как поместить их в базу данных?

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

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

Каковы лучшие практики? Существуют ли другие доступные опции, если я запускаю свои собственные серверы, а не на общий/виртуальный хостинг?

EDIT: Я намерен использовать SQL Server. И нет, это не корпоративное программное обеспечение с требованиями безопасности, просто какой-то развлекательный сайт, который я имею в виду.

4b9b3361

Ответ 1

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

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

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

Лучший сценарий - это хеш-адрес электронной почты (с солью!) и сохранить это. Это позволяет вам проверить адрес электронной почты на входное значение (например) и убедиться, что ввод адреса электронной почты совпадает с тем, что вы сохранили, конечно, основной недостаток этого заключается в том, что вы не можете знать, что такое адрес электронной почты адрес без этого дополнительного значения, поэтому, если вы хотите (например) регулярно отправлять по электронной почте своих пользователей, вам не повезет.

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

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

Ответ 2

Надеюсь, этот ответ также ответит на ваш вопрос.

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

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

Ответ 3

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

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

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

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

Ответ 4

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

С учетом этого лучший способ безопасного хранения адресов электронной почты? Не храните их вообще!

tl; dr Вам нужен адрес электронной почты или способ отправки им электронных писем? Либо доверяйте тем, кто будет делать лучше, чем вы, или вообще не используете адрес электронной почты.

Зачем вам нужно записывать адрес электронной почты клиента? Единственными причинами, с которыми я столкнулся, являются:

  • Подтверждение учетной записи и аутентификация
  • Сообщения о транзакциях и маркетинге

Подтверждение и аутентификация

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

  • Мобильный телефон
  • Учетная запись с надежным веб-сайтом (Facebook, Google, Twitter)

Проверка мобильного телефона проста. Отправьте им sms, используя службу, например twilio.com, и попросите их вернуть код подтверждения. Теперь мы знаем, что мобильный принадлежит клиенту, который хотел зарегистрироваться. С помощью OpenID вы можете проверять существующие учетные записи с другими доверенными сайтами, а процесс подтверждения обрабатывается ими.

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

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

Транзакции и маркетинговые письма

Настоящая причина, по которой мы хотим сохранить адрес электронной почты! Поэтому мы можем отправить им предложения о том, что нам нужно, чтобы они могли удалить его, не читая его. Серьезно, хотя электронная почта является лучшим средством для этого? Если у нас есть учетная запись OpenID, почему бы не использовать ее для уведомлений? Отправьте сообщение Facebook или напишите на их стене, разместите их на Twitter, отправьте текстовое сообщение на свой мобильный телефон, создайте приложение и нажмите на него уведомления. Существует так много каналов, которые гораздо эффективнее, чем электронная почта.

Если вы хотите использовать электронную почту, используйте платформу электронной почты, например Mandrill и MailChimp. Когда они регистрируются, создайте подписчика в списке рассылки MailChimp. Сохраните идентификатор подписчика с учетной записью. Для транзакций электронной почты (reset пароль, обновления учетной записи) выберите абонента и передайте сохраненное письмо Mandrill для отправки электронной почты. Для массового маркетинга просто отправьте в список рассылки в MailChimp.

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

Ответ 5

Я думаю, что когда люди могут войти в вашу базу данных, вы все равно ввернуты:)

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

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

И почему адреса электронной почты так важны? Большинство людей в любом случае получат спам или их адреса электронной почты будут доступны где-то в Интернете.

Ответ 6

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

Ответ 7

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

Однако проверьте адрес на достоверность и возможную SQL-инъекцию.

Ответ 8

Если сервер приложений и база данных находятся на отдельных серверах, это обычно повышает безопасность, чтобы все или части базы данных были зашифрованы.

Даже если они находятся на одной машине, хакер может не определить, где хранится ваш пароль (хотя я бы не стал полагаться на это).

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

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

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

Ответ 9

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

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

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

Ответ 10

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