无数据库身份验证(PHP)

无数据库身份验证(PHP),php,authentication,Php,Authentication,如何在不使用任何类型的数据库的情况下安全地对用户进行身份验证 authenticate.php?username={$_GET['username']}&password={$_GET['password']} if ($_GET['username'] == "secret_username" && password == "secret_password") { $_SESSION['user'] = $username; header("Locati

如何在不使用任何类型的数据库的情况下安全地对用户进行身份验证

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;
}

这种方法似乎是一种选择。它安全吗?

我至少会发布身份验证,否则它应该可以正常工作。

使用文件保存数据。 在公共html下面有一个users.txt,如下所示:

username:hashedpassword

然后使用
fopen

<?php

    $filename = "/home/users.txt";
    $file = fopen( $filename, "r" );
    $display = fread( $file, filesize( $filename ) );
    fclose($file);

?>

然后用换行符和|将其分解,然后检查第一个是否等于username,第二个是否等于md5(密码)


对我来说似乎是最简单的方法…

当然,你可以做到。但是,只要使用POST

这个过程没有问题。甚至当我们使用数据库时,我们实际上也做同样的事情,只是使用一些select命令

您可能会考虑密码散列,但它们的使用方式是,即使第三方以某种方式获得了数据库转储,它们也无法实际解密密码,因为散列是单向函数。现在,在您不使用数据库的情况下,这不是一个问题


然而,问题在于可伸缩性。您确定系统始终只有一个用户吗。如果是,那就没关系,否则就选择DB。

我自学了PHP。我从未上过课程,也没有导师。我在“获取”数据库调用时遇到了一些问题,因为与其他看似自然的PHP相比,这些调用显得非常复杂。我很久以前就开始用这个了

您可以在web服务器可访问文件夹之外的目录中创建文本文件(username.php)

(考虑权限!)

因此您有/root/users,并且在该文件夹中有(按用户名)

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?>';
}
?>

这样,您可以更轻松地创建新用户。顺便说一句,我在每个users文件夹中使用index.php,如果没有作为与文件夹名称匹配的特定用户登录,它的作用将非常小。您还应该使用https。您还可以在这些用户密码中使用密码加密/解密

说实话,数据库注入是一种真正的易受攻击性。每天我都有黑客在我的网站上寻找数据库。没有,所以他们离开了


不需要数据库。

作为GET参数传递,因此在地址栏中可见,您也不必担心安全评估通常需要更广泛的利弊列表,而不是代码橡皮戳。因此有点太宽泛了。那么如果我使用POST参数呢?将POST请求标记为比GET参数更“安全”是不正确的假设。它们不容易留下日志和代理跟踪,但通过非SSL连接也同样容易捕获。至少POST ARG对于“回头看人”攻击或“浏览浏览器历史记录的人”攻击是不可见的。我想我没有像我应该看到的那样多看你的问题,我会使用GET,无论发生什么,我都会明确地对密码进行哈希运算。
<?php
include '/root/users/'.$_POST[username].'.php';
if ($password == $_POST['password']) 
{
$_SESSION['loggedin']='yes';
$_SESSION['expire']='<how much time you need?>';
}
?>