我是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>