是否存在客户端/用户/黑客自己设置$_SESSION
个变量的情况(不包括在服务器计算机上运行的恶意软件。我主要是通过浏览器表示)?
我问的原因是因为几天前我问过this question。从那以后,我对这个问题变得非常困惑,但我对会话固定和劫持有了更好的了解。
尽可能简单地说,如果我使用isset($_SESSION['validated'])
这样的内容验证每个页面,它是否安全?
答案 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");
});
示例代码段:
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;