使用会话安全性形成多个步骤

时间:2015-09-11 02:02:52

标签: php security session

您好我正在使用php开发一个多步骤表单,并且我一直想知道用户是否有办法改变会话变量,例如在第一页上我有这样的事情:

<?php
session_start();
if(isset($_POST['submit'])){
   $_SESSION['name'] = $_POST['name'];//and so on
}
?>

,另一页有类似的内容:

<?php
session_start();
$name = $_SESSION['name'];

?>

我的问题是用户是否可以在第二页上修改会话变量的值

1 个答案:

答案 0 :(得分:2)

由于您使用POST变量的值填充会话变量,因此他们可以继续使用任意值重新提交第一个表单。

您可以使用应用程序逻辑来解决这个问题:

<?php // form1
session_start();
if (empty($_SESSION['step'])) {
    $_SESSION['step'] = 1;
}
if ($_SESSION['step'] > 1) {
    header("Location: form2.php");
    exit; // This exit is very important, don't neglect it
}

if (isset($_POST['submit'])){
    $_SESSION['name'] = $_POST['name'];//and so on
    $_SESSION['step'] = 2;
}

然后

<?php // form2
session_start();
if (empty($_SESSION['step'])) {
    header("Location: form1.php");
    exit;
}
if ($_SESSION['step'] > 2) {
    header("Location: form3.php");
    exit;
}
if ($_SESSION['step'] < 2) {
    header("Location: form1.php");
    exit;
}
$name = $_POST['name'];

通过使用应用程序逻辑,您可以控制应用程序中访问者的流量。

如果您询问用户是否可以在您编写的任何代码之外更改$_SESSION个变量,答案通常是否定的。另见:this answer