这是故事。我在没有数据库的 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 那里获得同样多的信息但没有无论如何工作。
谢谢!