作者:招生咨询1232013 | 来源:互联网 | 2023-08-19 19:31
我发现自己处于一种情况,我在网站上有一组用户,他们都存储了用户名和密码,允许他们通过SOAP自动访问第三方服务.这个想法是每个用户只需要登录主站点就可以使用各自存储的每个服务的用户
我发现自己处于一种情况,我在网站上有一组用户,他们都存储了用户名和密码,允许他们通过SOAP自动访问第三方服务.这个想法是每个用户只需要登录主站点就可以使用各自存储的每个服务的用户信息来访问多个服务.我觉得这些数据应该在存储时在我的数据库中加密,然后在用户需要访问给定服务时传递给php / SOAP函数时自动解密.实现这一目标的最佳方法是什么?
我看过AES_ENCRYPT,但似乎加密和解密使用了一个必须存储在我的代码中的密钥,用纯文本…这似乎不是最明亮的事情.无论如何,这是我第一次出现这样的事情(如果你不知道的话);如果你能给我一些关于如何处理它的指示,我真的很感激.
提前谢谢了
解决方法:
你偶然发现了加密数据库中数据的最大问题:
➽钥匙的存放位置?
加密无法解决保护数据的问题,它只能将其“集中”到密钥上.无论您将密钥存储在何处,您的应用程序都必须能够解密数据,因此可以对攻击者进行解密.我知道这个问题有两种可能的解决方案:
>尽可能安全地将钥匙放在一个安全的地方.这意味着,它肯定应放在服务器上不可访问的目录中的www-root目录之外.根据数据的重要性,您还可以考虑将加密外包给另一个专用服务器.
>根本不存储密钥并从用户密码派生.这是唯一真正安全的方法,因为即使服务器也无法解密数据.缺点当然是用户每次使用您的服务时都需要输入密码.如果用户更改密码,则需要重新加密所有数据.如果用户忘记密码,则数据将丢失.
附:我建议在将数据存储到数据库之前加密数据,因为MySQL AES_ENCRYPT使用没有IV的ECB模式.这允许搜索某个值,但不太安全(我很确定您不想通过密码搜索).