最安全的方式来创建会话在PHP中
我正在一个网站上工作,并希望创建用户登录和会话。 什么是最安全的方法来检查会话是否存在(如cookie或会话变量检查),或任何更好的想法,然后在PHP中使用会话?
如果没有当前会话(不存在当前会话ID), session_id()
将返回当前会话的会话ID或空字符串(“”)。
http://de.php.net/manual/en/function.session-id.php
但是这只是告诉你一个会话是否处于活动状态。
大多数情况下,我只是调用session_start();
在每个脚本的开始处(即使用户没有登录)。 在登录时,我使用用户标识或用户对象设置了$_SESSION['user']
。 在注销时,我只是未unset($_SESSION['user']);
。 通过检查empty($_SESSION['user'])
我可以检查是否有人仍然登录或不。 如果你在会话的其他地方存储了依赖于用户的信息,请不要这样做,否则登录的下一个人可能会得到他不应该看到的信息(在这种情况下,请使用session_destroy();
)。
但安全? 只需通过GET / POST url去重写session-id传播重写(仅限cookie),这样它们就不会以可以缓存或分发给其他人的URL(在这种情况下,会话劫持成为可能)结束。 你可以通过在php.ini中设置session.use_only_cookies
来实现。
如果您在不可信和/或配置错误的共享服务器上托管,则可能会有其他安全问题 - 这可能会导致同一台计算机上的其他人读取您的会话数据。 在这种情况下,您可以通过重写会话处理程序将会话数据存储在数据库中。 只需在intertubes上搜索session handler mysql
,我确信有足够的现成解决方案。 并且不会在会话中存储密码等敏感信息,所以每次需要对其进行比较时最好进行一次查询。
除此之外...使用SSL / HTTPS进行登录和用户管理,因此不会传输明文密码。 在数据库中只存储salt的pw-hashes。 不要让任何人看到密码(意思是:不要将它们打印到HTML或电子邮件)。 请勿将auto_increment值用于用户可以看到的ids(并因此猜测)。 好吧,这已经超出了问题范围。
以下是关于Session Safety的一些教程