我刚建立了一个使用会话的简单登录系统。当脚本验证用户名和密码都是正确的时,它会设置$_SESSION[username]
和$_SESSION[role]
,然后在站点的每个页面上只检查是否设置了这两个会话变量。
考虑到服务器处理会话,这应该是一个安全的解决方案,对吧?或者我应该在登录时设置$_SESSION[md5(password)]
,然后检查网站的每个页面是否所有会话变量都与数据库中的用户数据匹配?
答案 0 :(得分:2)
在会话中存储密码是一个坏主意,它也不会为您的网站添加任何安全性,因为会话由服务器管理。
但您仍然容易受到session hijacking的攻击。请查看this question以了解有关如何预防它的更多信息。
答案 1 :(得分:1)
不要将密码存储在数据库之外。甚至不从数据库返回密码。您需要获得会话存储的所有内容都是userID。将其存储在会话中,并在需要时使用它来查找角色级别和名称数据。如果你担心有人黑客会话数据和更改用户ID号,那么你可以在会话中存储用户ID号的哈希值(我建议使用比简单的md5更安全的东西,但是有很多彩虹表现在周围)并将会话中的哈希值与查询时的userID哈希进行比较,并确认没有发生任何不良事件。