如何保护存储在数据库中的电子邮件ID?

时间:2013-05-16 17:01:48

标签: mysql database-security

我在bcrypting之后存储密码,但用户电子邮件ID是纯文本(没有加密),因为我想定期向该电子邮件ID发送新闻稿。我有两个问题?

  1. 如何保护数据库,以便可以从黑客身上获取数据库中纯文本的电子邮件ID?

  2. 有没有办法检查特定的数据库表只能通过我的网页表单来自外部?

  3. 注意:我是数据库新手。

2 个答案:

答案 0 :(得分:1)

1-如果您真的想要对电子邮件进行编码,并且需要在将来对其进行解码,那么最好的办法是查看MySQL加密函数,例如ENCODE()和{{ 3}}。首先,你需要设置一个“盐”。这就像一个密码。对于每条记录都可以是相同的,例如:

SELECT DECODE(email, 'mysecretsalt') FROM Table WHERE id=1

或者,您可以从表中的代码和另一个字段创建salt部分,如下所示:

SELECT DECODE(email, CONCAT('mysecretsalt', id)) FROM Table WHERE id=1

2-在数据库中设置一个特定的用户,只能访问该特定表,并且只有在添加记录时具有INSERT权限,然后是另一个只具有SELECT权限的用户你正在检索记录。此外,将这些用户锁定到“localhost”。如果黑客得到其中一个,他们就不会做太多。

此外,当您以请求变量(GET或POST)的形式从客户收到电子邮件时,为了防止SQL注入攻击,要么转义字符(在PHP中,您可以使用mysqli_real_escape_string())或者简单地摆脱所有不属于的人物。在PHP中,它看起来像这样:

$email = preg_replace('/[^A-Za-z0-9\\.@-_]/', '', $email);

这就是我喜欢的方式。

答案 1 :(得分:0)

以纯文本格式存储电子邮件没有任何问题。即使访问它们也不允许攻击者访问帐户(前提是身份验证正常)。除非你有一些我们不了解的非常具体的要求,否则没有理由加密它们。

如果您想要保护您的数据库:

  • 阅读数据库文档
  • 如果您有多个服务/脚本访问数据,请确保他们拥有单独的帐户,并且只能访问他们需要访问的数据
  • 确保您的数据库备份至少与数据库本身一样安全
  • 限制帐户的源主机(可能在设置用户时)仅允许来自Web前端的连接,或者如果您在同一主机上运行,​​则可以禁用除环回之外的所有内容(将数据库绑定到127.0) .0.1)
  • ......其他一些东西是可能的,但从基础开始...你会在文档中找到更多的想法,我敢肯定