我在PHP中编写了一个Web应用程序,它正在处理一些秘密数据,放在一个数据库表中。此表中的所有字段(不包括id和创建日期)都使用AES加密,因此任何有权访问此数据库的人都可以读取它。
我使用用户密码加密该数据。数据库中没有任何普通密码,只有SHA1总和,所以我可以验证它。但是,我需要普通密码才能在用户登录时解密用户数据,因此我将此值存储在会话中。
这个目的可以吗?如果没有,处理这种情况的好模式是什么?
答案 0 :(得分:2)
我使用用户密码加密该数据
如果他们更改了密码,则必须重新加密所有内容。为密钥查看更静态的内容。
所以我将这个值存储在会话中。
会话不应存储此类信息,因为任何其他人都可以在框中使用网站(或访问该框的任何其他方式)阅读该信息。如果您的盒子使用类似于suPHP或phpSuExec的东西(询问您的主机),您可以将此数据放在只有您的帐户才能访问的目录中。您甚至可以将其存储在数据库中(当然是加密的)。
处理这种情况的好方法是什么?
如果安全对您很重要,那就去做吧。如果您无法做到这一点,那么至少要在使用suPHP或phpSuExec等的服务器上,以便您的Web服务器进程在唯一用户下运行,以便可以保护与加密密钥相关的任何数据。 / p>
答案 1 :(得分:0)
so nobody who has got access to this database can read it
。
通过在会话中存储密码,您的/tmp
目录(或存储它们的任何位置)中将包含许多包含用户密码的会话文件。
访问您的服务器不仅使您的第一个语句无效(当您有权访问服务器时,您可以直接访问大量密码),但是具有服务器访问权限的人 - 即使是像您一样的有效服务器管理员 - 也可以看到密码他或她永远不应该看到。
所以不,这不行。
您的问题的一个可能解决方案是对存储在不同服务器上的用户信息使用加密密钥,以便仅访问数据库/数据库服务器是不够的。但是,这只是一个想法,您可能会在https://security.stackexchange.com/
上找到更好的答案