PHP客户端可以设置$ _SESSION变量吗?

时间:2010-11-15 06:10:55

标签: php security

是否存在客户端/用户/黑客自己设置$_SESSION个变量的情况(不包括在服务器计算机上运行的恶意软件。我主要是通过浏览器表示)?

我问的原因是因为几天前我问过this question。从那以后,我对这个问题变得非常困惑,但我对会话固定和劫持有了更好的了解。

尽可能简单地说,如果我使用isset($_SESSION['validated'])这样的内容验证每个页面,它是否安全?

4 个答案:

答案 0 :(得分:19)

如果您将$_SESSION变量直接分配给未过滤的用户输入,则为是。

这让我想到了我的观点:从不信任用户的输入。 EVER

如果您确实要过滤输入,那么我看不出它是如何完成的。

答案 1 :(得分:1)

我不认为$ _SESSION变量可以更改,除非用户有服务器访问权限,否则他们无法更改它,但如果是用户输入的内容,建议过滤变量或清理变量。< / p>

答案 2 :(得分:0)

是的,这是可能的。在维基百科或Google上阅读Session poisoning和另一个非常常见的安全问题Session fixation - 该网站上有很多文章。

答案 3 :(得分:0)

我不太明白这个问题,但这个问题解释了我认为你想做的事情。

确保包含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的文件。

addsession.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");
});

示例代码段:

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