【发布时间】:2014-04-25 04:48:06
【问题描述】:
我正在编写一个使用 PHP + MySQL 的 Web 应用程序。我知道 PHP 和 MySQL 都可以执行数据加密。我还读到,在安全性方面,更倾向于在 PHP 级别加密数据。但是现在我面临这个问题:我想加密一些用户数据的地址字段。但是在使用PHP编写的网页中,我想支持地址字段的部分字符串匹配。我目前的解决方案是在 MySQL 级别加密数据,然后像这样进行搜索:
// PHP code for inserting data into database
mysql_query("INSERT INTO test VALUES ('', AES_ENCRYPT('" . $addr . "', UNHEX('" . $hexstring . "')))", $link);
// PHP code for partial string matching
mysql_query("SELECT * FROM test WHERE AES_DECRYPT(address, UNHEX('" . $hexstring . "')) like '%Street%'", $link);
有没有更安全的方式在 PHP 级别而不是 MySQL 级别执行加密?我能想到的是检索所有记录,在PHP中解密数据并执行匹配,但它会很慢。 AES不是必须的,任何加密/解密方法都可以,只要足够安全。
【问题讨论】:
-
我本来打算建议一个部分索引,但是看看你如何在两边都使用通配符,实际上没有索引可以使用。
-
也许您可以澄清一下您究竟要加密什么值,您的攻击场景是什么以及您想要保护的对象。
-
@deceze:确实,我不是在寻找能够经受蓄意攻击的解决方案,但我只想找到一个可以加密个人数据的相当安全的解决方案,以便在数据库数据被盗时,人们将无法直接或轻松地读取数据(隐私问题),并且攻击者将无法轻松解密数据。
-
@LaBird 收获甚微。只要应用程序可以解密数据库,大多数违规行为都能够从应用程序中提取密钥。我宁愿把精力放在访问表面尽可能少的服务器上存储和处理敏感数据。
标签: php mysql security encryption