首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在没有后台数据库的情况下,如何实现基于表单的身份验证?

问在没有后台数据库的情况下,如何实现基于表单的身份验证?
EN

Stack Overflow用户
提问于 2008-08-20 03:27:08
回答 4查看 3.5K关注 0票数 6

我有一个PHP脚本,它作为CGI程序运行,HTTP Authenticate头被吃掉并吐出来。因此,我想实现某种基于表单的身份验证。作为附加约束,没有数据库,因此不能存储任何会话数据。

我非常愿意拥有一个主用户名和密码。我只需要保护应用程序免受不知道这些凭据的入侵者的攻击。

那么你将如何实现这一点呢?

曲奇饼?

我可以提交表单,如果验证通过,我可以发回一个cookie,这是IP地址的散列密码。然后,我可以阻止页面呈现,除非事物被正确解密。但我不知道如何在PHP中实现它。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2008-08-20 04:37:35

有几种方法可以做到这一点。

  1. htaccess --让你的md5服务器来保护有问题的页面(虽然不完全是基于cgi表单)。
  2. 使用cookie和某种散列算法(md5就足够好了)来将密码存储在一个平面文件中,其中文件中的每一行都是用户名:密码散列。确保salt你的哈希表与彩虹表相比有更高的安全性。(这种方法有点幼稚……如果您采用这种方式,请非常注意安全性)
  3. 使用类似于sqlite数据库的东西来处理身份验证。Sqlite足够紧凑和简单,即使你不想要大的数据库后端,它仍然可以满足你的需求。

理论上,您还可以将会话数据存储在平面文件中,即使您不能拥有数据库。

票数 5
EN

Stack Overflow用户

发布于 2008-08-28 08:54:09

如果您当前正在使用Authenticate,那么您可能已经有了一个htpasswd文件。如果您希望继续使用该文件,但切换到使用基于表单的身份验证,而不是通过Authenticate标头,则可以使用PHP脚本来使用相同的htpasswd文件,并使用会话来维护身份验证状态。

在谷歌上快速搜索php htpasswd,就会发现this page带有一个PHP函数,可以根据htpasswd检查凭据。您可以使用如下代码集成它(假设您将会话设置为自动启动):

代码语言:javascript
复制
// 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;
票数 1
EN

Stack Overflow用户

发布于 2008-09-20 21:44:17

你真的需要一个表单吗?无论你做什么,你都会受到用户名和密码的限制。如果他们知道这一点他们就会得到你的魔法饼干。如果他们不知道秘密,您希望阻止他们查看页面,而基本授权可以做到这一点,设置起来很容易,而且不需要您做太多工作。

如果web服务器为您处理访问控制,您真的需要查看Authorization头吗?

此外,如果您将应用程序提供给已知的人员列表(而不是公共列表),则可以根据其他因素提供基于web服务器的访问,例如传入的IP地址、客户端证书和许多其他需要配置而不是编程的内容。如果您解释了您的安全限制,我们可能会提供更好的解决方案。

祝你好运,:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17376

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档