我在 bcrypting 后存储密码,但用户电子邮件 ID 为纯文本(不加密),因为我想定期向该电子邮件 ID 发送时事通讯。我有两个问题?
如何保护数据库,以便可以保护数据库中纯文本的电子邮件 ID 免受黑客攻击?
有什么方法可以检查特定的数据库表是否只能由我的 Web 表单访问,而不是来自外部?
注意:我是数据库新手。
我在 bcrypting 后存储密码,但用户电子邮件 ID 为纯文本(不加密),因为我想定期向该电子邮件 ID 发送时事通讯。我有两个问题?
如何保护数据库,以便可以保护数据库中纯文本的电子邮件 ID 免受黑客攻击?
有什么方法可以检查特定的数据库表是否只能由我的 Web 表单访问,而不是来自外部?
注意:我是数据库新手。
1-如果您真的想对电子邮件进行编码,并且将来需要对其进行解码,最好的办法是查看 MySQL 加密函数,如ENCODE()和DECODE()。首先你需要设置一个“盐”。这就像一个密码。每条记录都可以是相同的,如下所示:
SELECT DECODE(email, 'mysecretsalt') FROM Table WHERE id=1
或者,您可以从代码和表中的另一个字段中制作盐部分,如下所示:
SELECT DECODE(email, CONCAT('mysecretsalt', id)) FROM Table WHERE id=1
2-在您的数据库中设置一个特定用户,该用户仅有权访问该特定表,并且在您添加记录时仅具有 INSERT 权限,然后在您检索记录时设置另一个仅具有 SELECT 权限的用户。此外,将这些用户锁定到“本地主机”。如果黑客得到其中之一,他们将无能为力。
此外,当您以请求变量(GET 或 POST)的形式收到来自客户的电子邮件时,为了防止 SQL 注入攻击,请转义字符(在 PHP 中,您可以使用mysqli_real_escape_string()
)或简单地删除所有不支持的字符不属于。在 PHP 中,它看起来像这样:
$email = preg_replace('/[^A-Za-z0-9\\.@-_]/', '', $email);
这就是我喜欢做的方式。
以明文形式存储电子邮件没有任何问题。即使被访问,它们也不允许攻击者访问帐户(只要身份验证正常工作)。除非您有一些我们不知道的非常具体的要求,否则没有理由对它们进行加密。
如果您想总体上保护您的数据库: