【问题标题】:PHP $_SESSION variables randomly get overwritten?PHP $_SESSION 变量随机被覆盖?
【发布时间】:2012-02-24 04:57:35
【问题描述】:

好的,所以当我运行此脚本从论坛帖子中删除用户的评论时,$_SESSION['id'](用户的 mysql id)更改为 $postid(论坛帖子的 id)。我没有调用任何函数来设置它,我在会话初始化时调用了session_write_close();

<?php
session_start();

// I'm not showing connection code.
if(isset($_SESSION['user'])){

    $user = mysql_real_escape_string($_SESSION['user']);
    $userid = mysql_real_escape_string($_SESSION['id']);

    $id = mysql_real_escape_string($_GET['id']);
    $postid = mysql_real_escape_string($_GET['article']);

    $result = mysql_query("DELETE FROM `______`.`______` WHERE `userid`='$userid' AND `id`='$id' AND `user`='$user'")or die(mysql_error());

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

          mysql_query("UPDATE `_______`.`______` SET `points`=`points`-'1' WHERE `id`='$userid' AND `username`='$user'")or die(mysql_error());
          mysql_query("INSERT INTO `________`.`_______` (`user`,`userid`,`amount`,`reason`) VALUES('$user', '$userid', '-1', 'Removed a comment')")or die(mysql_error());

    }

    mysql_close($con);

    ob_start();
    header("location:../view-article?id=$postid");
    ob_end_flush();

} //if there is a user
else {

    ob_start();
    header("location:http://boundsblazer.com/not-logged-in?url=articles.view-article:id=$postid");
    ob_end_flush();
}
?>

【问题讨论】:

  • 您是否有其他正在运行的脚本或应用程序可以访问类似的变量?如果是这样,请为每个应用程序设置不同的session_name(),以免它们意外交互。
  • 你的问题肯定出在其他地方,这段代码中没有任何东西可以做到这一点......
  • 检查register_globals是否被激活? echo ini_get('register_globals') ? 'On' : 'Off';
  • 但我不明白怎么做。只有这个脚本会导致 id 发生变化。
  • register_globals 开启... 为什么?这有什么改变吗?顺便说一句,我没有打开它...

标签: php html session variables


【解决方案1】:

如果register_globals 开启,则此行

$id = mysql_real_escape_string($_GET['id']);

可能会更改$_SESSION['id'] 的值。所以请关闭register_globals再试一次。

【讨论】:

  • 工作。但是他们为什么还要加上register_globals这样的东西呢?
  • @Ken 因为有些人懒得处理变量,而是立即使用 $name ,这些名称与发送的正文名称相同。
  • register_globals 几乎是 PHP 拥有如此糟糕的安全声誉的主要原因。现在它默认为关闭,悲惨的代表更多来自您在 PHP 代码中看到 sql 注入漏洞的频率。
猜你喜欢
  • 2018-01-29
  • 1970-01-01
  • 2017-05-20
  • 1970-01-01
  • 2011-05-05
  • 2013-11-30
  • 1970-01-01
  • 2013-02-22
  • 2013-08-20
相关资源
最近更新 更多