我意识到这似乎是一个奇怪的问题(我为问及几乎可以回答的问题而道歉)但是我在阅读其他问题的答案后感到担忧:
我有一个php脚本,它将数据存储在localhost MYSQL数据库中。其中一些信息是敏感的,并使用MYSQL AES加密功能进行加密。
我读到MYSQL不会加密其连接中的数据。最近两个涉及localhost连接的回复中提到了这一点,因此我担心。
我一直认为,当数据在同一台计算机内部传递时,拦截的风险为零。那不是这样吗?我应该在存储数据之前在PHP中进行加密吗?
我正在使用mysqli _ *
通过SSL连接服务器。
我目前使用共享虚拟服务器,但一旦开发完成,我计划转移到专用机器。
请专家请让我放心,或告诉我应该怎么做。
答案 0 :(得分:2)
正如您所猜测的那样,将SSL用于本地连接是没有意义的。 SSL的主要目的是加密通道,以防止类似中间人的攻击。但是在局部连接的情况下,中间不可能有人。在您的设置中,我建议通过local socket建立连接,并完全绕过TCP层。
现在回到问题。
我应该在存储数据之前在PHP中进行加密吗?
不,如果数据库与执行脚本的数据库在同一台机器上。
不,如果数据库是远程的,并且链接是可信的(要么您信任链接本身,要么链接是安全的,例如使用SSL)。
是的,在所有其他情况下。
在后一种情况下(对远程数据库的不可信链接),AES_ENCRYPT()
不适用。加密/解密过程由MySQL完成。数据在PHP和MySQL之间转换为未加密的。此外,由于必须将加密密钥传递给MySQL的AES_ENCRYPT()
和AES_DECRYPT()
,因此该密钥通常将与其他SQL查询一起以未加密的方式发送。