php - 人们使用 PHP session 登录随机用户帐户

标签 php session

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

这发生在 Safari 和 Firefox 中

我的 session 是在人们使用 $_SESSION['variable'] = name; 系统登录时设置的,非常标准。 session 是跨子域的,使用:

ob_start();
session_set_cookie_params(0, '/', '.subverb.net');
session_start();

在我所有页面的标题中。

我有一个 iframe 包含网站的聊天部分,它也包含相同的 header

我不知道我还能提供什么其他信息,所以请询问。我真的需要这个来解决问题,但不确定问题出在哪里!

谢谢


回应以下内容:

标准登录脚本直接取自 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'];

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'];

所有输入都经过清理,用户没有其他方法可以添加详细信息。用户名和密码正常添加,facebook id 通过单击执行脚本的链接从 Facebook 获得。

这些错误发生在登录之后,或者登录还没有发生时。网站上没有其他地方可以设置 session 值。

最佳答案

我会检查记录用户的数据库例程是否存在漏洞。您确定它正在选择合适的用户并且只选择合适的用户吗?您是否测试过您的 select 语句是否不受不同用户输入场景的影响?鉴于它在页面加载过程中持续存在,这几乎可以肯定是 $_SESSION 问题。假设您在登录时加载有关用户的信息,那么问题出在登录期间 $_SESSION 变量的初始填充上。因此,您绝对应该检查登录脚本以确保其可靠。

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

关于php - 人们使用 PHP session 登录随机用户帐户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5940132/

相关文章:

php - 这个访客是机器人还是用户? PHP

php - 拉维尔 : enabling debug toolbar

php - 如何在 PHP 中重新初始化 session ?

php - 浏览器删除 session 或删除历史记录如何工作?

ios - Xcode导出/上传错误: Your session has expired.请登录

php - PHP 中使用explode() 忽略大写单词

PHPUnit:从 setUp() 获取测试类和方法的名称?

php - 使用 PDT/Netbeans 中的类自动完成 PHP 对象?

session - cakephp 3 如何增加 session 超时

ruby-on-rails - rails 、 cucumber 、 capybara : session is not persisted