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