存储例如
等用户权限是否安全$_SESSION['username']='vputin';
$_SESSION['ip']=$_SERVER['REMOTE_ADDR'];
$_SESSION['canlaunchnuclearstrike']=true;
这有什么安全问题吗?是否足以在每个页面加载时检查这个并基于重定向到登录页面(并退出;)或继续?
答案 0 :(得分:5)
这完全取决于你所说的“安全”。没有“安全”的抽象概念。您只能抵御特定威胁。 (这被称为你的“威胁模型”。)如果你没有说出你想要保护什么,那就不可能说你的解决方案是否好。当然不能保证僵尸在登录你的网站时不会来吃你的网站用户!
也就是说,会话变量无法通过Web服务器访问,因此它们构成了Web应用程序的不透明状态的一部分,用户无法直接看到或利用它。
另一方面,有许多攻击途径允许泄露,盗窃或滥用:如果会话cookie被盗,其他人可以接管会议(也许可以启动核武器);这是一个完全常见的星巴克式场景。另一个漏洞在于服务器本身:如果会话数据存储在其他用户可读的文件中,比如在共享主机上,那么其他人可能会获得会话ID 和通过直接从服务器的磁盘读取它们背后的会话数据。
一切都取决于!可能最好不要在共享主机上用PHP编写你的nuke strike管理应用程序...
答案 1 :(得分:1)
通常,最好只在会话中存储当前用户的ID,并从他们来自的位置“实时”查找权限 - 例如权限数据库。
这样,您可以确保权限的更改立即反映用户可以做什么和不能做什么。
答案 2 :(得分:0)
可能会有会话劫持或其他方式从会话中读取信息。 因此,未加密的密码将是一个安全问题,但在用户名不是什么大问题之前,您可以将其保存在会话中。
(或使用用户ID并将其编码为脚本中的用户名)
所以作为结论:只保存“公共”数据,“nuklearmissile”等应该在代码中解决而不依赖于会话数据。
答案 3 :(得分:0)
会话数据保存在服务器上。用户只是将会话ID转换为cookie,因此服务器知道它是哪个用户。
会话是存储用户身份的好方法,但在那里存储合理的信息并不是一个好主意。