我们在MySQL中存储敏感数据,我想使用AES_ENCRYPT(数据,'my-secret-key-here'),然后使用AES_DECRYPT,效果很好.我最大的问题是如何保护密钥?以前我只是将密钥存储在Web PHP文件中,所以类似于:
define("ENCRYPTION_KEY", 'my-secret-key-here');
Run Code Online (Sandbox Code Playgroud)
这确实不起作用,因为我们的MySQL服务器和Web服务器是相同的物理机器,所以如果有人获得对服务器的访问权限,他们可以获得存储在MySQL中的加密数据和密钥.
有任何想法吗?我想我需要将密钥移动到一个单独的服务器,并远程读取它.或者,如何为每个数据动态生成加密密钥.例如,获取customer_id并在其上运行md5,然后将其用作密钥.
将密钥放入文件中,将文件所有者更改为与 Web 服务器相同的用户。删除该组和其他所有人对该文件的所有权限。
关于超级用户( https://superuser.com/questions/139393/linux-file-permissions-access-control-query )有一个类似的问题——我相信你可以在那里得到更好的帮助,或者只是通过谷歌搜索有关您正在运行的系统上的文件权限的更多信息。