【发布时间】:2010-11-15 06:10:55
【问题描述】:
是否存在客户端/用户/黑客可以自己设置$_SESSION 变量的情况(不包括在服务器计算机上运行的恶意软件。我主要是指通过浏览器)?
我问的原因是因为我几天前问的this question。从那以后,我对这个主题变得非常困惑,但我对会话固定和劫持有了更好的了解。
简单地说,如果我用isset($_SESSION['validated']) 之类的东西验证每个页面,它是否安全?
【问题讨论】:
是否存在客户端/用户/黑客可以自己设置$_SESSION 变量的情况(不包括在服务器计算机上运行的恶意软件。我主要是指通过浏览器)?
我问的原因是因为我几天前问的this question。从那以后,我对这个主题变得非常困惑,但我对会话固定和劫持有了更好的了解。
简单地说,如果我用isset($_SESSION['validated']) 之类的东西验证每个页面,它是否安全?
【问题讨论】:
如果您将 $_SESSION 变量直接分配给未过滤的用户输入,则可以。
这让我明白了我的观点:永远不要相信用户的输入。曾经
如果您确实在过滤输入,那么我看不出它是如何完成的。
【讨论】:
$_SESSION 的数据保存在服务器本身上,并通过存储为 cookie 的密钥进行查找。没有办法实际置换$_SESSION 本身中的数据,但用户可能会猜测另一个会话的会话 ID 并发送适当的会话 cookie。但是出于所有意图和目的,对于您(网络程序员)来说,他们与其他用户完全相同,因此无论如何保护他们不是您的责任。 Firesheep (codebutler.github.com/firesheep) 就是这样做的。
是的,这是可能的。在 Wikipedia 或 Google 上阅读 Session poisoning 和另一个相当常见的安全问题 Session fixation - 网络上到处都是关于此的文章。
【讨论】:
我不认为 $_SESSION 变量可以更改,除非用户具有服务器访问权限,否则他们无法更改它,但如果是用户输入的内容,建议过滤变量或对其进行清理。
【讨论】:
我不太明白这个问题,但这个问题解释了我认为你想做的事情的方式。
确保包含 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");
});
示例代码sn-p:
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>
【讨论】: