【问题标题】:Multiple steps form with sessions security具有会话安全性的多个步骤
【发布时间】:2015-09-11 02:02:51
【问题描述】:

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

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

另一个页面有类似的东西:

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

?>

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

【问题讨论】:

    标签: php security session


    【解决方案1】:

    由于您使用 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

    【讨论】:

    • 非常感谢这个明确的答案是的,我必须让用户遵循应用程序流程
    猜你喜欢
    • 2015-11-10
    • 1970-01-01
    • 2015-09-23
    • 1970-01-01
    • 2020-04-16
    • 2021-12-03
    • 2012-10-07
    • 1970-01-01
    相关资源
    最近更新 更多