在php中创建会话的最安全的方法

时间:2009-04-15 15:50:03

标签: php session session-variables

我正在网站上工作,想要创建用户登录和会话。什么是检查会话是否存在的最安全的方法(如cookie或会话变量检查),或者更好的想法然后在php中使用会话?

2 个答案:

答案 0 :(得分:8)

  

session_id()返回当前会话的会话ID或空字符串(“”),如果没有当前会话(不存在当前会话ID)。

     

http://de.php.net/manual/en/function.session-id.php

但这只会告诉您会话是否处于活动状态。

大部分时间,我只是在每个脚本的开头调用session_start();(即使用户没有登录)。在登录时,我使用userid或用户对象设置$_SESSION['user']。注销时,我只是unset($_SESSION['user']);。通过检查empty($_SESSION['user'])我可以检查某人是否仍然登录。如果您在会话中的其他位置存储依赖于用户的信息,请不要这样做,否则登录的下一个人可能会收到他不应该看到的信息(在这种情况下使用session_destroy();)。

但是安全吗?只需通过GET / POST url重写(仅限cookie)来停用会话ID传播,因此它们不会以可缓存或分发给其他人的URL结束(在这种情况下,会话劫持是可能的)。你可以通过在php.ini中设置session.use_only_cookies来实现。

如果您托管在不受信任和/或配置错误的共享服务器上,可能会出现其他安全问题 - 这可能会导致同一台计算机上的其他人读取您的会话数据。在这种情况下,您可以通过重写会话处理程序将会话数据存储在数据库中。只需在intertubes上搜索session handler mysql,我确信有足够的现成解决方案。并且不要在会话中存储密码等敏感信息,每次需要比较时都要更好地进行查询。

除此之外...使用ssl / https进行登录和用户管理,因此不会传输明文密码。在数据库中只存储带有salt的pw-hashes。不要让任何人看到密码(意思是:永远不要将它们打印到HTML或电子邮件中)。不要对用户可以看到的ids使用auto_increment值(因此猜测)。好的,那已经不在问题范围内了。

答案 1 :(得分:1)