0

这是故事。我在没有数据库的 PHP 中编写(相当)简单的登录。是的,我同意,这是不安全和肮脏的方式,但我只是在学习。无论如何,代码很简单,除了会话之外一切正常。我试图让攻击者停止访问panel.php只有管理员才能进入的受保护页面。这index.php是带有表单的登录页面。

配置文件

<?php
$loginToken =   '123456';

$uname      =   'test';
$upass      =   '123123';


$a_login        =   'index.php';
$a_panel        =   'panel.php';
$a_list     =   'list.php';
$a_add      =   'add.php';
$a_other        =   'other.php';
?>

index.php(登录表单-出于某种原因,不允许我正确粘贴代码):

<?php
// Load & start a session before everything
session_start();

// If session is already loaded, get into panel area
if ($_SESSION['login'] == "1") {
        Header("Location: $a_panel");
}

// Load configuration file
include_once('cfg/config.php');

if (isset ( $_POST ['username'] )) {
        $password = $_POST ['password'];
        $username = $_POST ['username'];

        if ($password == $upass && $username == $uname) {
                header ( "Location: $a_panel" );
                exit (); }
}
?><html>
<head>
        <title>Test</title>
        <link rel="stylesheet" href="css/login.css" media="all" />
</head>
<body>

<br /><br />
<center><a href="index.php"><img src="images/logo_b.png" /></a></center>
<br /><br />

<?php
        if (isset($_GET['nToken']))     // A little bit of security (index.php?nToken=123456)
        {
                if ($_GET['nToken'] == $loginToken) { ?>
                <form id="login" action="" method="post">
                  <fieldset id="inputs">
                      <input name='username' id="username" type="text" placeholder="Username" autofocus required>  
                      <input name='password' id="password" type="password" placeholder="Password" required>
                  </fieldset>
                  <fieldset id="actions">
                      <input type="submit" id="submit" value="Log in">
                  </fieldset>
                </form>
<?php
        }
        }
echo '
</body>
</html>';
?>

panel.php(管理员区)

<?php
session_start();
    // Insert a config file
    require_once('cfg/config.php');

    // Check if logged (and if loaded display buttons)
    if ($_SESSION['login'] == "1") {
?>

<head>
    <title>
        Admin panel @ TEST
    </title>
    <link rel="stylesheet" href="css/bg.css" media="all" />
    <center><img src="images/header_1.png" /></center>

<div class="hot-container">
    <p>
        <a href="#" class="btn btn-blue">Listing</a>
        <a href="#" class="btn btn-blue">Add new</a>
        <a href="#" class="btn btn-blue">Settings</a>
    </p>
    <p>
    </p>
</div>

<?php
}
?>

据我所知,代码应该可以正常工作,session_start()因为它需要发布在任何地方(config.php 除外)但会话未注册。当我访问panel.php我输入表单的信息时(从配置文件),我得到一个空白页,因此,这还不是全部。即使我通过在 URL 中输入“/panel.php”来访问该页面,我也会得到空白页面。

现在我很好奇是我和我的知识水平还是我必须在 php.ini 中做一些更正:) 只是要注意我之前试图从 SO 那里获得同样多的信息但没有无论如何工作。

谢谢!

4

0 回答 0