我已经开始开发这个非常简单的PHP登录,要求输入密码才能访问网站。它还会创建一个cookie,以便在用户关闭浏览器窗口之前继续访问。
在每个页面的顶部,我检查cookie:
<?php
if(!isset($_COOKIE['authorised']) || ($_COOKIE['authorised'] != 'true'))
{
include('login.php'); exit;
}
?>
如果他们没有,那么我退出并显示登录表单:
<?php
function pageURL()
{
$pageURL = 'http';
if ($_SERVER["HTTPS"] == "on")
{
$pageURL .= "s";
}
$pageURL .= "://";
if ($_SERVER["SERVER_PORT"] != "80")
{
$pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
}
else
{
$pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
}
return $pageURL;
}
$pageRedirect = pageURL();
if(isset($_POST['password']) && ($_POST['password'] == 'qwe123'))
{
setcookie('authorised', 'true'); header("Location:$pageRedirect",303);
}
else
{
include('noaccess.php'); exit;
}
?>
<form action="<?php echo pageURL(); ?>" method="post">
<input type="password" name="password" />
<input type="submit" title="I agree" value="I agree" name="submit" />
</form>
当您必须同意访问该网站时,当前的PHP来自旧的警告页面,我想修改它以使用简单的表单,以便如果用户输入密码,例如'qwe123',那么他们创建然后将cookie重定向回页面,但现在可以访问cookie了。如果他们弄错了,那么包含并退出另一页。
有人可以帮我吗?感谢
答案 0 :(得分:10)
请不要尝试在客户端cookie中存储“已验证”之类的内容;那令人难以置信的不安全感。用户可以修改cookie中的任何内容 - 因此在这种情况下,我可以在浏览器设置中查找cookie,然后编辑它以将“authenticated”设置为true。我会在没有用户名或密码的情况下登录。
查看PHP's session management个功能。您应该创建一个会话并存储任何安全的信息服务器端,而不是客户端。
使用会话的示例如下:
<?php
session_start();
$secretpassword = 'qwert1234';
$secretusername = 'foobar';
if ($_SESSION['authenticated'] == true) {
// Go somewhere secure
header('Location: secure.php');
} else {
$error = null;
if (!empty($_POST)) {
$username = empty($_POST['username']) ? null : $_POST['username'];
$password = empty($_POST['password']) ? null : $_POST['password'];
if ($username == $secretusername && $password == $secretpassword) {
$_SESSION['authenticated'] = true;
// Redirect to your secure location
header('Location: secure.php');
return;
} else {
$error = 'Incorrect username or password';
}
}
// Create a login form or something
echo $error;
?>
<form action="login.php"><input type="text" name="username" /><input type="text" name="password" /><input type="submit" value="login" /></form>
<?php
}
这是一个非常丑陋的例子,但这涵盖了它的内容
在发送任何其他输出之前运行session_start();这会在客户端存储会话cookie,该cookie仅在客户端存储标识号。所有其他数据都存储在服务器端,因此用户无法修改。
您可以在此设置几个参数来提高安全性,包括httponly(防止通过javascript访问cookie,帮助抵御XSS攻击)和安全(仅通过SSL传输cookie)。如果可能,应该启用这些。
答案 1 :(得分:0)
只需将表单提交到您检查密码的页面,它就可以正常工作。
但是,您可能需要将$_SERVER["REQUEST_URI"];
更改为更具体的页面,因为这只是您当前所在的页面(表单提交的页面)。