我在bcrypting之后存储密码,但用户电子邮件ID是纯文本(没有加密),因为我想定期向该电子邮件ID发送新闻稿。我有两个问题?
如何保护数据库,以便可以从黑客身上获取数据库中纯文本的电子邮件ID?
有没有办法检查特定的数据库表只能通过我的网页表单来自外部?
注意:我是数据库新手。
答案 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)
以纯文本格式存储电子邮件没有任何问题。即使访问它们也不允许攻击者访问帐户(前提是身份验证正常)。除非你有一些我们不了解的非常具体的要求,否则没有理由加密它们。
如果您想要保护您的数据库: