加密存储模型

SSL/SSH 保护从客户端到服务器的数据传输:SSL/SSH 不会保护存储在数据库中的持久数据。SSL 是一个在线协议。

一旦攻击者直接访问您的数据库(绕过 Web 服务器),存储的敏感数据可能会被泄露或滥用,除非信息受到数据库本身的保护。加密数据是减轻此威胁的好方法,但很少有数据库提供这种类型的数据加密。

解决此问题的最简单方法是首先创建自己的加密包,然后在您的 PHP 脚本中使用它。 PHP 可以通过多个扩展来帮助您完成此操作,例如 OpenSSLSodium,涵盖了各种加密算法。该脚本在将数据插入数据库之前对其进行加密,并在检索时对其进行解密。有关加密工作原理的更多示例,请参见参考资料。

哈希

对于真正隐藏的数据,如果不需要其原始表示形式(即不会显示),则应考虑哈希。哈希的著名示例是在数据库中存储密码的加密哈希,而不是密码本身。

password 函数提供了一种方便的方式来对敏感数据进行哈希处理并使用这些哈希值。

password_hash() 用于使用当前可用的最强算法对给定字符串进行哈希处理,而 password_verify() 检查给定密码是否与存储在数据库中的哈希值匹配。

示例 #1 密码字段的哈希处理

<?php

// 存储密码哈希
$query = sprintf("INSERT INTO users(name,pwd) VALUES('%s','%s');",
pg_escape_string($username),
password_hash($password, PASSWORD_DEFAULT));
$result = pg_query($connection, $query);

// 查询用户是否提交了正确的密码
$query = sprintf("SELECT pwd FROM users WHERE name='%s';",
pg_escape_string($username));
$row = pg_fetch_assoc(pg_query($connection, $query));

if (
$row && password_verify($password, $row['pwd'])) {
echo
'欢迎,' . htmlspecialchars($username) . '!';
} else {
echo
'身份验证失败,用户名为' . htmlspecialchars($username) . '.';
}

?>
添加注释

用户贡献的注释

此页面没有用户贡献的注释。
To Top