在我的数据库中存储私人电子邮件地址

Storing private email addresses in my database

我的问题不是无法将电子邮件保存到数据库。任何人都可以做到。这是我的问题:

当用户在我的网站上创建帐户时,他们会获得 ID、用户、密码和电子邮件地址数据。对于密码,我对其进行哈希处理,这样如果有人入侵我的网站,他们就看不到真正的密码。但是,保存一堆未受保护(如用户)的电子邮件地址不是安全风险吗?

我以前从未做过登录系统网站,想知道其他人是否只是在数据库中留下未受保护的电子邮件地址。 (换句话说,将电子邮件地址按原样保存到数据库是否很常见?)。

谢谢。

一般:

1 - 永远不要在数据库中的任何地方保存用户的信用卡号,但是如果您确实需要,可以保存其中的一部分。

2 - 始终对用户的密码进行 salt 和哈希运算

3 - 无需加密用户的电子邮件,如果您真的担心,请对其进行加密,而不是对其进行哈希处理

用户名和电子邮件地址的敏感度与密码不同。

密码应该受到保护(希望 bcrypt),因为如果 Alice 在 Bob's Things 上使用的密码与她在 Gmail 上使用的密码相同,那么任何获得 Bob's Things 数据库访问权限的攻击者都将无法访问获得对 Alice 的电子邮件帐户的访问权限(也不是其他 10,000 个经常购买 Bob 的东西并重复使用密码的用户的帐户)。

电子邮件地址通常不能像密码一样被散列。如果您的系统需要向用户发送电子邮件,如果电子邮件以散列形式存储,则无法执行此操作。

此外,攻击者仅使用电子邮件地址可以做的事情就更少了。是的,他们可以向您的用户发送网络钓鱼电子邮件,或者他们可以尝试猜测密码来获得对帐户的访问权限,但是保护电子邮件地址关于其服务器端存储的复杂性通常不值得付出努力。

您最好确保此数据库的接口(即您的应用程序和支持基础设施)得到适当保护,而不是尝试加密数据库中的电子邮件地址。即使它们被加密,密钥管理也会成为问题。最重要的是,如果您想保护人们的电子邮件地址不被轻易发现,您可以做的最好的事情就是保护您的应用程序免受 user enumeration 的侵害。