Php 在MySQL数据库中存储“敏感”数据

Php 在MySQL数据库中存储“敏感”数据,php,mysql,encryption,aes,Php,Mysql,Encryption,Aes,“敏感”数据应该如何存储在MySQL数据库中 我应该更关注MySQL数据库的安全性,并将数据存储为纯文本吗 我找到了一个关于如何使MySQL数据库更安全的分步教程: 2我应该加密数据吗 如果是,那么应该如何进行加密? 使用MySQL aes_加密/aes_解密? 使用PHP AES函数/算法加密/解密数据? 数据应该如何存储在MySQL中? 斑点 二进制的 瓦比诺 在我的案例中,“敏感”数据是由个人支付的 谢谢如果攻击者访问纯文本数据,最糟糕的情况是什么?鉴于您必须对数据进行解密以使其有用,因此

“敏感”数据应该如何存储在MySQL数据库中

我应该更关注MySQL数据库的安全性,并将数据存储为纯文本吗

我找到了一个关于如何使MySQL数据库更安全的分步教程: 2我应该加密数据吗

如果是,那么应该如何进行加密? 使用MySQL aes_加密/aes_解密? 使用PHP AES函数/算法加密/解密数据? 数据应该如何存储在MySQL中? 斑点 二进制的 瓦比诺 在我的案例中,“敏感”数据是由个人支付的


谢谢

如果攻击者访问纯文本数据,最糟糕的情况是什么?鉴于您必须对数据进行解密以使其有用,因此您也需要将加密密钥放在可访问的地方,因此任何能够访问数据库的攻击者也很可能能够访问该密钥,除非这是为了存档,而不是用于活网站。我将重点关注数据库服务器的安全性,除非你在硬盘上装载可能丢失的数据,但这实际上取决于你为什么需要对其进行加密。

如果你需要保护可能被黑客攻击的数据库中的数据,你可以对其进行加密 与

之后,您可以根据预期的数据大小选择BLOB、TEXT、MEDIUMTEXT或任何内容。
*对于VARBINARY/BINARY,您可能需要首先使用它。

它是两者的混合体。在我写这篇文章时,已有两个答案是有效的——你需要看看我能想到的5种可能的攻击方法

他们可以访问你的数据库服务器;所以是的,尽可能地保护孩子是合理的马特的回答 独立数据劫持某人以其他方式访问您的数据库数据,可能是备份,可能是他们猜测密码,可能是MITM,如果您将数据从一个地方传输到另一个地方。为此,您需要将数据加密。您也可能出于某种原因进行CSV转储并向某人发送电子邮件。哎呀。但它确实发生了。所以加密vlzvt的答案 但有三个要素未提及:

如果与DB服务器不同,他们可以访问您的web服务器。如果他们有权访问Web服务器,所有赌注都将被取消,因为他们有你的密码、密码和密码。因此,您需要使其比DB服务器更安全。马特可能在上面是这个意思,但要说清楚 与上面类似,但不要忘记的是,如果有人访问phpMyAdmin或您的管理顾问。不要使用纯文本身份验证或配置存储的密码进行访问。 最后是应用程序本身,也是最难锁定的。您需要防止可能泄露数据的SQL注入。如果有人通过未限制的查询获得访问权限,则加密数据将停止,从而最大限度地减少问题-因此,加密是解决方案。 关于你问题的第二部分:

使用MySQL加密/解密函数将阻止有权访问原始数据的人,但不会阻止MITM或SQL注入,甚至不会阻止用于传输的CSV转储

因此,在我看来,这只是我的观点,我的做法是用PHP加密,并通过网络传输加密数据,因为这会停止所有捕获数据的方法,CSV转储将被扰乱

如果这样做,您还可以使用varbinary/blob类型,因为它会阻止您意外尝试在phpMyAdmin中读取/编辑。此外,名义上还可能节省一些字节,尽管这取决于索引和其他内容——因此单凭这一点并不能赢得争论

现在是不利的一面:搜索和排序。任何你索引或搜索的内容,如果加密的话,都只会匹配完整的、精确的、区分大小写的字符串,填充到正确的长度。通常,搜索是不区分大小写的,你可以用类似的方法进行部分搜索。如果你想订购,你需要原始字符串。因此,在设计结构时,请牢记这一点


希望对您有所帮助。

加密操作需要额外的成本

您需要评估在您的场景中,如果您的数据增长到相当大的规模,那么这个额外的成本是否会成为一个问题

避免数据泄漏的第一个前沿是强大的数据访问策略,包括访问配置文件等。这样做的缺点是您需要管理mysql并对其进行配置

如果您想关心配置文件的管理,可以对数据进行加密,前提是CPU的额外成本和EncOption算法的额外存储空间


一个系统的安全性等同于更弱组件的安全性,不要只把精力集中在加密任务上,这只会给你们安全感,若数据可以解密,入侵者唯一需要的是时间和暴力来破坏加密,这在很大程度上取决于你的应用程序。是的,这取决于你需要存储什么样的数据,加密密钥是为了安全,可以安全地隐藏在zend-ed php文件中,不存在被破坏的可能性
e就像一个AAA协议,一个多层次的任务,在每个层次上,每个层次的问题都是不同的。好的answer@Robbie我们应该针对加密数据解决他的列类型问题:1.BLOB、2.BINARY、3.VARBINARY帮助其他人寻找类似的信息或观点。对于答案,我会用这个S.O.问题/答案:
$key = "mykey";
$crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256,$key,$data,MCRYPT_MODE_ECB,$key);