如果没有支持数据库,您将如何实现基于 FORM 的身份验证?
-
08-06-2019 - |
题
我有一个作为 CGI 程序运行的 PHP 脚本和 HTTP Authenticate
标头被吃掉并吐出来。所以我想实现某种基于表单的身份验证。作为一个附加约束,没有数据库,因此无法存储会话数据。
我非常愿意拥有一个主用户名和密码。我只需要保护应用程序免受不知道这些凭据的入侵者的侵害。
那么你将如何实施呢?
饼干?
我可以提交表单,如果它通过验证,我可以发回一个 cookie,它是 IP 地址的哈希值和密码。然后,除非正确解密,否则我可以阻止页面呈现。但我不知道如何在 PHP 中实现它。
其他提示
如果您当前正在使用身份验证,那么您可能已经拥有 密码 文件。如果您想继续使用该文件,但切换到使用基于 FORM 的身份验证而不是通过 Authenticate 标头,则可以使用 PHP 脚本来使用相同的 htpasswd 文件并使用会话来维护身份验证状态。
谷歌快速搜索 php htpasswd 显示 这一页 使用 PHP 函数根据 htpasswd 检查凭据。您可以将其与以下代码集成(假设您将会话设置为自动启动):
// At the top of your 'private' page(s):
if($_SESSION['authenticated'] !== TRUE) {
header('Location: /login.php');
die();
}
// the target of the POST form from login.php
if(http_authenticate($_POST['username'], $_POST['password']))
$_SESSION['authenticated'] = TRUE;
您真的需要表格吗?无论您做什么,您都会受到已知的用户名和密码的限制。如果他们知道这一点,他们就会得到你的魔法饼干,让他们知道。如果他们不知道秘密,您希望阻止他们看到这些页面,而基本授权可以做到这一点,并且易于设置,并且不需要您进行大量工作。
如果 Web 服务器为您处理访问控制,您真的需要查看授权标头吗?
此外,如果您要向已知的人员列表(而不是公众)提供应用程序,您可以根据其他因素提供基于 Web 服务器的访问,例如传入 IP 地址、客户端证书以及许多其他因素。配置问题而不是编程问题。如果您解释了您的安全限制,我们也许能够提供更好的解决方案。
祝你好运, :)
...关于盐,在你的哈希盐中添加用户名将防止有人知道你的盐并有权访问你的密码文件来编写彩虹表并破解你的用户密码。