使用会话维护安全性


Maintaining security with session

<?php
$name=$_GET['var'];
if($_SESSION["loginvalue"]==1)
{
echo "Welcome,$name";
echo "&nbsp;&nbsp;&nbsp;&nbsp;<a href='login.php'>Logout</a>";
}
?>

这是我用来在页面中维护会话的代码。我想要的是,如果有人在浏览器中输入本地/项目/cms.php url,那么它不应该打开。我希望cms.php是开放的,只有当有人登录,否则它不应该被打开。

我不能100%确定你的意思;但是…

首先有一些问题与给出的代码,哪里是session_start(),你的代码也开放的XSS攻击的$name var,因为你没有转义输入,你需要使用htmlentities()用户输入如果你要把它显示回用户。此外,您需要在使用之前检查变量设置,以避免PHP未定义索引警告。除此之外,你会检查用户是否登录了,如果没有,你会将他们重定向到你的登录页面。

<?php
    session_start();
    $name = isset($_GET['var']) ? $_GET['var'] : null;
    if(isset($_SESSION["loginvalue"]) && $_SESSION["loginvalue"]==1)
    {
        echo "Welcome,".htmlentities($name, ENT_QUOTES);
        echo '&nbsp;&nbsp;&nbsp;&nbsp;<a href="./login.php">Logout</a>';
    }else{
        //Redirect user to login page if not logged in.
        exit(header("location: ./login.php"));
    }
?>

您可以这样修改代码:

<?php
    session_start();
    $name=$_GET['var'];
    if($_SESSION["loginvalue"]==1)
    {
        echo "Welcome, ". htmlentities($name, ENT_QUOTES, "UTF-8");
        echo "&nbsp;&nbsp;&nbsp;&nbsp;<a href='login.php'>Logout</a>";
    }else{
        //Redirect user to login page.
        header("location: /login.php");
    }
?>