我有一个PHP脚本作为CGI程序运行,HTTP Authenticate
标头被吃掉并吐出。所以我想实现某种基于FORM的身份验证。作为附加约束,没有数据库,因此不能存储会话数据。
我非常愿意拥有主用户名和密码。我只需要保护应用程序免受不知道这些凭据的入侵者的攻击。</ p>
那你将如何实现呢?
缓存?
我可以提供表单,如果它有效,我可以发回一个cookie,它是IP地址的密码来密码。然后我可以阻止页面呈现,除非事物正确解密。但我不知道如何在PHP中实现它。
答案 0 :(得分:5)
有几种方法可以做到这一点。
答案 1 :(得分:1)
如果您当前正在使用Authenticate,那么您可能已经拥有 htpasswd 文件。如果您想继续使用该文件,但切换到使用基于FORM的身份验证而不是通过Authenticate标头,则可以使用PHP脚本使用相同的htpasswd文件并使用会话来维护身份验证状态。
快速Google搜索php htpasswd会显示带有PHP函数的this page,以检查针对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;
答案 2 :(得分:1)
你真的需要一张表格吗?无论你做什么,你都会受到已知用户名和密码的限制。如果他们知道这一点,他们会得到你的神奇饼干。如果他们不知道秘密,您希望阻止他们查看页面,并且基本授权可以做到这一点,易于设置,并且您不需要做很多工作。
如果Web服务器为您处理访问控制,您真的需要查看Authorization标头吗?
此外,如果您将应用程序提供给已知的人员列表(而不是公共人员),则可以提供基于Web服务器的访问权限,以及其他因素,例如传入IP地址,客户端证书以及许多其他因素事情是配置而不是编程。如果您解释了安全限制,我们可能会提供更好的解决方案。
祝你好运,:))
答案 3 :(得分:-1)
...关于salt,在你的哈希盐中添加用户名会阻止有人知道你的盐并且有权访问你的密码文件来写一个彩虹表并破解用户密码的数量。