人们使用PHP会话登录到随机用户帐户

人们使用PHP会话登录到随机用户帐户,php,session,Php,Session,我一直抱怨用户以对方身份登录。他们甚至可以编辑他们的个人资料并以他们的身份发布…这显然是一个巨大的问题。甚至没有注册的人正在访问该网站,并看到他们以其他人的身份登录 这在Safari和Firefox中发生 我的会话是在人们使用$\u SESSION['variable']=name登录时设置的系统,非常标准。会话通过以下方式跨子域进行: ob_start(); session_set_cookie_params(0, '/', '.subverb.net'); session_start();

我一直抱怨用户以对方身份登录。他们甚至可以编辑他们的个人资料并以他们的身份发布…这显然是一个巨大的问题。甚至没有注册的人正在访问该网站,并看到他们以其他人的身份登录

这在Safari和Firefox中发生

我的会话是在人们使用
$\u SESSION['variable']=name登录时设置的系统,非常标准。会话通过以下方式跨子域进行:

ob_start();
session_set_cookie_params(0, '/', '.subverb.net');
session_start();
在我所有页面的页眉中

我有一个
iframe
,其中包含站点的聊天部分,该部分也包含相同的标题

我不知道我还能提供什么信息,所以请询问。我真的需要这个得到排序,但不知道是什么问题

谢谢


针对以下问题:

标准登录脚本直接取自Larry Ullman教科书:

if ($un && $p) { // If everything's OK.

    // Query the database.
    $query = "SELECT member_id, member_firstname, member_type, username FROM member WHERE (username='$un' AND password=SHA('$p')) AND active IS NULL";  

    $result = mysqli_query ($dbc, $query) or trigger_error ("query: $query\n<br />MySQL Error: " . mysqli_error($query));

    if (@mysqli_num_rows($result) == 1) { // A match was made.

        // Register the values & redirect.
        $row = mysqli_fetch_array($result, MYSQLI_ASSOC);
        mysqli_free_result($result);

        $_SESSION['member_id'] = $row['member_id'];
        $_SESSION['first_name'] = $row['member_firstname'];
        $_SESSION['member_type'] = $row['member_type'];
        $_SESSION['username'] = $row['username'];
if($un&&$p){//如果一切正常。
//查询数据库。
$query=“选择成员id、成员名、成员类型、成员中的用户名,其中(用户名=“$un”和密码=SHA(“$p”),且活动为空”;
$result=mysqli_query($dbc,$query)或trigger_error(“query:$query\n
MySQL error:“.mysqli_error($query)); 如果(@mysqli_num_rows($result)==1){//则进行了匹配。 //注册值并重定向。 $row=mysqli\u fetch\u数组($result,mysqli\u ASSOC); mysqli_免费_结果($result); $\会话['member\u id']=$row['member\u id']; $\u会话['first\u name']=$row['member\u firstname']; $\会话['member\u type']=$row['member\u type']; $\会话['username']=$row['username'];
facebook登录脚本执行以下操作:

$query = "SELECT * FROM member WHERE oauth_prov = 1 AND fb_userid = ".$user['id'];
    $result = mysqli_query ($dbc, $query) or trigger_error ("query: $query\n<br />MySQL Error: " . mysqli_error($dbc));


    if(mysqli_num_rows($result) == 1 ) {



    while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) {;


    $_SESSION['first_name'] = $row['member_firstname'];
    $_SESSION['member_id'] = $row['user_id'];
    $_SESSION['oauth_uid'] = $row['fb_userid'];
    $_SESSION['username'] = $row['username'];
$query=“从oauth_prov=1和fb_userid=“.$user['id]”的成员中选择*;
$result=mysqli_query($dbc,$query)或trigger_error(“query:$query\n
MySQL error:“.mysqli_error($dbc)); if(mysqli_num_rows($result)==1){ 而($row=mysqli_fetch_数组($result,mysqli_ASSOC)){; $\u会话['first\u name']=$row['member\u firstname']; $\u会话['member\u id']=$row['user\u id']; $\会话['oauth\u uid']=$row['fb\u用户ID']; $\会话['username']=$row['username'];
所有输入都已清理,用户没有其他方式添加详细信息。用户名和密码作为正常添加,facebook id通过单击执行脚本的链接从facebook获得


这些错误发生的时间远远超过登录时间,或者根本没有发生登录。站点上没有其他地方设置会话值。

会话id中可能有冲突?这可以解释随机部分。为了防止出现这种情况,请使用快速黑客将IP存储在会话中,如果IP发生变化,请抛出“抱歉”页面。您有很多访问者吗?

我会检查记录用户的数据库例程是否存在漏洞。您确定它正在选择适当的用户,并且只选择适当的用户吗?您是否测试过您的select语句是否对不同的用户输入场景免疫?鉴于它在页面加载中持续存在,几乎肯定是一个错误
$\u会话
问题。假设您在登录时加载有关用户的信息,那么在登录期间,
$\u会话
变量的初始填充会导致此问题。因此,您一定要检查登录脚本,以确保它是可靠的


您可能想发布登录脚本的其他部分,以便我们检查它是否存在漏洞/问题。

您是否就此得出了可靠的结论


由于登录脚本的随机性,似乎不太可能出现错误?

会话id是否附加到url?这可能会导致会话超车。您是否使用任何类型的缓存?如果用户登录时页面被缓存,可能会导致类似的问题。出现问题的人是否登录sa我是物理计算机吗?@Michael Mallett:请告诉我们您处于活动状态。是“泄露帐户”吗始终是同一个?即,当他们以其他人的身份登录时,是否始终是同一个其他人?目前不多,只是刚刚启动。将会话存储在数据库中会有什么不同吗?那么冲突不应该是原因:(将数据存储在数据库中可能无法解决此问题,因为您的会话id或会话设置似乎有问题。在接下来的8小时内,我无法回答自己的问题。但我的脚本使用用户名和密码并检查数据库返回:成员类型、成员id和用户名,并将它们添加到会话变量中。facebook one检查数据库中facebook登录名给出的facebook id,并将其返回到会话中。所有输入都经过消毒(正常登录名从一本相当流行且长期运行的教科书中删除,因此我相信它是合适的)我不知道这怎么可能是登录脚本,因为这种情况发生在过去的日志记录中,即使用户从未访问过登录页面,您也不必将其作为答案,只需编辑您的原始帖子即可。关于第二个帖子,我澄清了我的答案,以便更好地解释,但它是否适用于以前从未登录过的用户(即,他们的计算机上从未设置过cookies)?好的,我刚刚意识到,在我的facebook脚本中,它分配了$row['user\u id',应该是member\u id。我看不出这会如何导致问题,因为这只会给$\u会话添加任何内容。@michael-我不确定你的意思。你有
$\u会话['member\u id']=$row['user\u id'];
。如果在其他地方使用
$\u会话['member\u id']
来确定用户是谁,那么这当然可能是一个问题;您给了他们错误的id。您必须测试不同的场景并亲自查看。