如何在不使用任何类型的数据库的情况下安全地验证用户。
authenticate.php?username={$_GET['username']}&password={$_GET['password']}
if ($_GET['username'] == "secret_username" && password == "secret_password")
{
$_SESSION['user'] = $username;
header("Location: password_protected_page.php");
exit;
}
这种方法似乎是一种选择。它安全吗?
答案 0 :(得分:0)
我至少会发布身份验证,否则它应该可以正常工作。
答案 1 :(得分:0)
使用文件来保存您的数据。 在你的公共html下面有一个users.txt,如下所示:
username:hashedpassword
然后你使用fopen
<?php
$filename = "/home/users.txt";
$file = fopen( $filename, "r" );
$display = fread( $file, filesize( $filename ) );
fclose($file);
?>
然后用换行符然后对它进行爆炸,然后检查第一个是否等于用户名,第二个等于md5(密码)。
对我来说似乎是最简单的方式...
答案 2 :(得分:0)
当然,你可以做到这一点。但是,只需使用POST。
这个过程没有任何问题。即使我们使用数据库,我们实际上也会做同样的事情,只是使用一些select命令。
您可能正在考虑使用密码哈希,但它们的使用方式是,即使第三方获得数据库转储(不知何故),它们也永远无法解密密码,因为哈希是单向函数。现在,在你的情况下,你没有使用数据库,所以这不是问题。
但问题在于可扩展性。您确定系统中始终只有一个用户。如果是,那么没关系,否则去DB。
答案 3 :(得分:0)
我自己学习了PHP。我从没上过课,也没有导师。我遇到了“获取”数据库调用的问题,因为与其他自然而然的PHP相比,它们看起来是如此复杂。我很久以前就开始使用它。
您可以在Web服务器可访问文件夹的目录下创建文本文件(username.php)。
(请考虑权限!)
因此,您拥有/ root / users,并且在该文件夹中(根据用户名)拥有
/root/users.Joe.php
/root/users/Juan.php
/root/users/Tim.php
Tim.php内容
<?php
$userpath='/var/www/html/users/Tim';
$password='Timspassword';
?>
现在,当Tim登录wee时,具有执行此操作的代码:
<?php
include '/root/users/'.$_POST[username].'.php';
if ($password == $_POST['password'])
{
$_SESSION['loggedin']='yes';
$_SESSION['expire']='<how much time you need?>';
}
?>
这样,您可以更轻松地创建新用户。顺便说一句,我在每个用户文件夹中使用index.php,如果不以与该文件夹名称相匹配的特定用户身份登录,将不会执行任何操作。您还应该使用https。您还可以在这些用户密码中使用密码加密/解密。
应该说,数据库注入是一个真正的漏洞。每天都有黑客在我的站点上寻找数据库。没有了,所以他们走了。
不需要数据库。