php - 使用 PHP/PDO 存储数据的安全性

标签 php encryption pdo

在研究了几个小时关于保护存储数据的主题之后,我对现在最好的方法是什么感到有点困惑。

我的 (SSL) 网站有一个数据库,我是唯一可以访问它的人(黑客不算在内)。登录数据存储在文档根目录之外的配置文件中。在数据库中,我有来自客户的姓名和地址之类的东西,我现在担心我需要实现密码学专家提出的所有安全措施,就像这个答案(How do you Encrypt and Decrypt a PHP String?)或这里要求的(Storing sensitive data securely in a database) .

因为无论是在我的 PDO/SQL 和 PHP 研讨会上还是在 stackoverflow 上的常规帖子中,我都没有看到正在使用这些加密和身份验证方法,或者更具体地说,例如在解释 PDO 和 PHP 命令时的 key ,如 INSERT INTO ... 等。我不确定现在是否有必要在我的数据库中的每个条目上部署加密和身份验证措施(甚至可以这样做之后呢?)。我在教程和文章中了解到的安全措施是使用 PDO 的准备好的语句。

如果加密和认证是我必须要做的,大概就是这样: 简单地使用 password_verify() 岂不是最方便快捷的方式吗password_hash() 用于每个敏感数据条目,就像对密码所做的那样?

EDIT password_verify()password_hash() 是散列(不是加密)方法,这意味着数据被不可挽回地破坏,只能被确认但未被阅读。

最佳答案

有不同类型的数据库加密,根据您要保护的数据以及原因,您会做不同的事情。

1) 数据库级加密/透明数据加密

这是您的 RDBMS 在文件级别为您加密所有内容的地方。这意味着如果任何人可以访问硬盘驱动器或备份媒体,他们应该无法访问数据。请参阅此处了解如何使用 MySQL 执行此操作:https://dev.mysql.com/doc/refman/5.7/en/innodb-tablespace-encryption.html (请注意,这不是 PCI 兼容解决方案,您需要 MySQL 企业版或其他企业数据库,或为此采取进一步的安全措施)。

请注意,如果您的应用程序受到威胁,这不会保护您的数据。

2) 字段级加密

您可以加密数据以存储在您喜欢的任何字段中。这是一个很好的答案:https://stackoverflow.com/a/10945097/

字段级加密的缺点是您无法查询数据。在每种情况下,您都需要将数据提取到您的应用程序中,然后一次解密一个字段。

请注意,如果您的应用程序受到威胁,这不会保护您的数据。

另请注意“加密”和“散列”之间的区别(password_verifypassword_hash 是关于散列的)...加密可让您保护数据、存储数据和检索数据它。根据定义,散列法不允许您检索数据。

在所有情况下,最重要的是保护您的应用程序。底层数据的加密在很大程度上是次要问题。

关于php - 使用 PHP/PDO 存储数据的安全性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45028550/

相关文章:

PHP通过浏览器访问时无法执行本地程序

java - 使用 RSA 加密字符串并将 Java 中的 key 封装到文件中

encryption - 使用 OpenSSL 验证 PKCS#11 生成的 DSA 签名

apache - 我需要使用 nginx 或 Apache 才能使用 Lets Encrypt 吗?

php - 改进使用 PDO 的 SELECT 并添加 UPDATE 语句

php - 让 Microsoft PHP PDO for SQL Server 工作

PHP/PDO 无法绑定(bind) 'TIMESTAMP WITHOUT TIME ZONE' 值

PHP 单元测试覆盖率

php - laravel 5 上 Eloquent ORM 关系

php - 通过我的代码创建/更新/删除还是在数据库中手动操作?