在变量中预设密码的登录系统


Login system with password preset in variable

我是php的新手,我正在尝试制作一个登录系统,但不知何故它不起作用。我在变量中预定义了密码,并创建了一个函数来检查输入的密码是否与变量中的密码匹配。

这是我到目前为止的代码:

<?php $validkey = "Test" ?>
<script type="text/javascript">
    function check_value()
    {
        var password = document.getElementById("password").value;
        if (password == '<?php echo $validkey; ?>')
        {
            location.href = "tafels.html";
        }
    }
</script>
<input type ="text" name="password" id="password" />
<button onclick="check_value();">Login</button>

这不是登录过程应该的工作方式。首先,密码应该被散列并存储在数据库中。切勿将密码存储为明文。其次,密码验证应该在服务器端进行,在PHP文件中。

要解释为什么在前端验证密码很危险,只需检查代码的这一部分:

if(password=='<?php echo $validkey; ?>')
{
    location.href = "tafels.html";
}

当服务器处理您的 PHP 脚本时,它会将有效密码回显到生成的 HTML 中。然后,该 HTML 将被发送到浏览器。假设有效密码是"p@$$w 0rd",如果您检查页面的源代码,您会发现以下内容:

if(password=='p@$$w0rd')
{
   location.href = "tafels.html";
}

服务器将替换以下内容:

<?php echo $validkey; ?>

使用密码的值。每个人都可以看到这一点。一点也不安全。

为了给你一个开始,这里有一个例子,但请注意这个答案 https://stackoverflow.com/a/36883388/3799829

一个非常简单和无状态(无内存/无会话)的登录系统示例

登录.php

<?php
$password = 'Test';
$url = 'tafels.html';
if(isset($_POST['password']) && $_POST['password'] === $password)
{
    header('Location: ' . $url);
    exit;
}
?>
<html>
    <head>
        <title>You need a password to continue</title>
    </head>
    <body>
        <form action="" method="POST">
            <input type="password" name="password" placeholder="Password"><button type="submit">Go on !</button>
        </form>
    </body>
</html>