当前位置:  开发笔记 > 编程语言 > 正文

在数据库中存储用户电子邮件地址的最佳和最安全的方法是什么?

如何解决《在数据库中存储用户电子邮件地址的最佳和最安全的方法是什么?》经验,为你挑选了4个好方法。

出于安全原因,是否值得在将用户电子邮件放入数据库之前对其进行加密?

我知道我们哈希和盐密码,但这是另一个故事,因为我们真的不需要密码原件.通过电子邮件,它是不同的.

知道解密密钥无论如何都要靠近数据库,加密电子邮件是否有意义?我想如果有人进入系统,他们也会找到钥匙,如果没有立即,那么最终.

什么是最佳做法?如果我运行自己的服务器而不是共享/虚拟主机,还有其他选择吗?

编辑:我打算使用SQL Server.不,它不是具有安全要求的企业软件,只是我想到的一些娱乐网站.



1> Brett Bender..:

希望这个答案也能回答你的问题.

是否值得加密数据库中的电子邮件地址?

简而言之,不,不值得加密用户电子邮件地址.您认为数据库泄露可能导致某人也可以访问破解加密所需的密钥,这是正确的.


有时,服务器入侵只允许攻击者自己查看数据库内容,保留密钥,从而保护数据.但是,如果依靠这种情况,那将是荒谬的.

2> CraigTP..:

如果您将来需要电子邮件地址,那么您必须以纯文本格式存储它们.

当然,你可以对它们进行加密,但是,在这种情况下,这通过默默无闻是有效的安全性.基本上,如果您的应用程序的边界是安全的,那么其中的数据可以是纯文本.此处的加密会增加您处理数据的复杂性,但并不能真正阻止攻击者获取原始数据.

正如你所说,如果他通过你的外围防御,他很可能很容易得到你的解密密钥来解密电子邮件数据.加密可能会略微降低已确定的攻击者的速度,但不会为您的数据添加任何真正的安全性.

最好的方案是散列电子邮件地址(使用salt!)并存储它.这允许您根据输入值检查电子邮件地址(例如)并验证电子邮件地址输入是否与您存储的相同,当然,这样做的主要缺点是您无法知道电子邮件是什么地址没有附加价值,所以如果您想(例如)定期向您的用户发送电子邮件,那么您将失去运气.

我怀疑你是存储电子邮件地址,因为它是有用的数据,你想要用它做一些事情(比如发送电子邮件:),在这种情况下,加密只会增加处理这些数据的开销,同时收益很少.

在这种情况下,我将专注于保护对数据库本身的访问(即您的"外围"防御),并确保它们尽可能强大,同时将数据保留在数据库中.



3> Arjan..:

总的来说,我同意其他人说这不值得努力.但是,我不同意任何可以访问您的数据库的人都可能获得您的密钥.对于SQL注入来说肯定不是这样,对于以某种方式丢失或遗忘的备份副本可能不是这样.我觉得一个电子邮件地址是个人的细节,所以我不关心垃圾邮件,而是关注地址泄露时的个人后果.

当然,当你害怕SQL注入时,你应该确保禁止这样的注入.备份副本应自行加密.

尽管如此,对于一些在线社区,成员可能绝对不希望其他人知道他们是会员(例如与心理健康,财务帮助,医疗和性咨询,成人娱乐,政治......有关).在这些情况下,尽可能少地存储个人详细信息并加密所需的信息(注意数据库级加密不会阻止细节显示使用SQL注入),可能不是一个坏主意.再次:将电子邮件地址视为此类个人详细信息.

对于您的娱乐网站,情况可能并非如此,您应该专注于禁止SELECT * FROM通过SQL注入,并确保访问者无法以某种方式通过更改URL来访问其他人的个人资料或订购信息.



4> roo..:

计算机安全中最经常引用的一个问题是,唯一真正安全的计算机是埋在混凝土中的计算机,关闭电源并切断网络电缆.

考虑到这一点,安全存储电子邮件地址的最佳方法是什么?不要存储它们!

tl; dr您是否需要他们的电子邮件地址或发送电子邮件的方式?要么信任能比你做得更好的人,要么完全不使用电子邮件地址.

为什么需要记录客户的电子邮件地址?我遇到的唯一原因是:

帐户确认和身份验证

交易和营销电子邮件

确认和认证

我们想要的核心是两步认证:他们知道的东西和他们拥有的东西.他们知道的东西是密码,很容易证明,因为他们将是唯一知道它的人.他们拥有的东西更难以证明,传统上我们使用电子邮件地址,因为它很容易验证.这些天我们可以使用其他东西:

移动电话

拥有受信任网站的帐户(Facebook,Google,Twitter)

手机验证很简单.使用twilio.com等服务向他们发送短信,并要求他们发回确认码.我们现在知道移动设备属于想要注册的客户.使用OpenID,您可以验证与其他可信站点的现有帐户,并由他们处理确认过程.

对于客户进行身份验证,他们提供的只是他们的手机号码和密码,或者是OpenID身份验证令牌.既不需要电子邮件地址(OpenID提供商也可能,但这不是您的责任).

如果这些不是一个选项,那么您仍然可以确认一个电子邮件地址,然后使用它进行身份验证.确认仅需要存储唯一令牌以及要发送到电子邮件地址的链接.存储电子邮件地址的盐渍哈希,并使用该哈希值与我们进行密码的方式匹配.

交易和营销电子邮件

我们想要存储电子邮件地址的真正原因!所以我们可以向他们发送我们认为他们需要的东西,以便他们可以删除它而不需要阅读它.但真的是电子邮件是最好的媒介吗?如果我们有一个OpenID帐户,那么为什么不将它用于通知呢?发送Facebook消息或在他们的墙上写,@在Twitter上发送消息,向他们的手机发送短信,构建应用并向他们推送通知.有太多频道比电子邮件更有效.

如果您想使用电子邮件,请使用Mandrill和MailChimp等电子邮件平台.当他们注册时,在MailChimp的邮件列表中创建订阅者.将订户ID存储在帐户中.对于交易电子邮件(重置密码,帐户更新),获取订阅者并将存储的电子邮件传递给Mandrill以发送电子邮件.对于大众营销,只需发送到MailChimp的邮件列表.

存储在数据库中的唯一内容是订户ID.它还提供了使用电子邮件平台,取消订阅,打开和点击率,电子商务跟踪等所有好处.电子邮件平台可以更好地为您发送电子邮件.与您相比,他们在保护数据隐私方面也会做得更好.让他们完成数据库安全的艰苦工作,这样您就可以专注于吸引更多客户.

推荐阅读
家具销售_903
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有