代码之家  ›  专栏  ›  技术社区  ›  Ben

PHP客户端是否可以设置$会话变量?

  •  21
  • Ben  · 技术社区  · 14 年前

    客户机/用户/黑客是否可以设置 $_SESSION 变量本身(不包括运行在服务器计算机上的恶意软件)。我主要是指通过浏览器?

    我问的原因是 this question 我几天前问过的。从那以后,我在这个问题上变得相当困惑,但我对会话固定和劫持有了更好的想法。

    尽可能简单地说,如果我用 isset($_SESSION['validated']) ,它安全吗?

    4 回复  |  直到 7 年前
        1
  •  20
  •   Jacob Relkin    14 年前

    是的,如果你分配 $_SESSION 变量直接到未过滤的用户输入。

    这就引出了我的观点: 不要信任用户的输入。永远

    如果你确实在过滤输入,那么我不知道怎么做。

        2
  •  0
  •   Crozin    14 年前

    是的,有可能。了解 Session poisoning 还有另一个常见的安全问题 Session fixation 在维基百科或者谷歌上-网络上到处都是关于这个的文章。

        3
  •  -1
  •   Richard    10 年前

    我不认为$u会话变量可以更改,除非用户有服务器访问权限,否则不能更改,但如果用户输入了某个变量,则建议对其进行筛选或清理。

        4
  •  -1
  •   Ewer Ling    9 年前

    我不太明白这个问题,但这个问题解释了我的方式,我认为你想做什么。

    确保包含jQuery。

    代码:

    <html>
    <head>
      <title>Tab name</title>
      <meta charset = "UTF-8" />
      <script type = "text/javascript" src = "http://code.jquery.com/jquery-1.1.13.min.js"></script>
      <script type = "text/javascript" src = "script.js"></script>
    </head>
    <body>
    </body>
    
    </html>
    

    然后创建一个名为 addsession.php .

    代码 添加会话.php :

    <?php session_start(); ?>
    <?php
      if(isset($_POST["name"])){
        $name = $_POST["name"];
      } else {
        print '<p style = "color: red; font-weight: bold;">Name not defined!</p>' . "\n";
        $name = "unknownsessionvariable";
      }
      if(isset($_POST["value"])){
        $value = $_POST["value"];
      } else {
        $value = "";
      }
      $_SESSION[name] = value;
    ?>
    

    代码 script.js :

    function session(name, value){
      $.post(addsession.php, {"name" : name, "value" : value});
      window.location.reload(); // This line maybe should be here depending on what you are doing.
    }
    $(document).ready(function(){
      session("sessvar", "supervalue");
    });
    

    示例代码段:

    function session(name, value){
      $.post("http://www.eastonwerling.com/addsession.php", {"name" : name, "value" : value});
      //window.location.reload();
    $(document).ready(function(){
      session("sessvar", "supervalue");
    });
    <script src="http://code.jquery.com/jquery-1.11.3.min.js"></script>
    <p>This example depends on www.eastonwerling.com (my website).</p>