目前我有代码,对用户进行身份验证并将身份验证用户名和密码保存在数据库会话中,每个请求都会得到验证。
我正在考虑更改验证方法以仅对用户进行一次身份验证并在数据库会话中保持成功身份验证,但如果他是会话用户并且已经验证,则不要再次验证用户。
这种新方法会更安全吗?还是我应该在每个请求上验证用户,即使它保存在会话中?
目前我有代码,对用户进行身份验证并将身份验证用户名和密码保存在数据库会话中,每个请求都会得到验证。
我正在考虑更改验证方法以仅对用户进行一次身份验证并在数据库会话中保持成功身份验证,但如果他是会话用户并且已经验证,则不要再次验证用户。
这种新方法会更安全吗?还是我应该在每个请求上验证用户,即使它保存在会话中?
你应该做这个:
您永远不应该保留密码明文,并且您不应该在会话表中存储额外的身份验证数据。即使您在每次请求时检查它们,实际上您只是在检查您的远程用户(即他的 cookie)是否在您的会话中第一次提供了正确的用户名和密码......如果您刚刚设置,您可以获得相同的确切结果会话中的变量...
与其将用户的身份验证状态存储在数据库中,不如使用 cookie。使用一个晦涩的变量名来存储加密的 unix 身份验证时间戳,以使观察者更难理解。这样做的好处是,如果您使用可逆密码,则需要进行简单的计算来检查会话是否到期。
这也消除了一大堆会导致速度变慢的数据库访问。
正如@Palantir 提到的,在数据库中以加密方式存储密码。当用户提供密码时,执行相同的加密并比较存储的版本