自定义每个文件夹用户凭据

时间:2011-06-28 12:34:06

标签: php authentication

我有一个PHP项目,需要一个管理页面,允许客户创建一个与作业编号对应的文件夹,并为该文件夹分配一个自定义用户名/密码。然后会有另一个客户用来登录该文件夹并上传/下载文件的页面。处理身份验证的最佳方法是什么?我的第一个想法是将用户名和密码放在文件夹内的文本文件中,并阻止服务器使用.htaccess服务页面。我正试图避免触摸项目的数据库,因为我想保持它便宜和简单。有没有人对如何处理这个有更好的建议?仅供参考,这不是一个高安全性的应用程序。我怀疑客户是否会购买SSL证书。

2 个答案:

答案 0 :(得分:1)

您可以在CAcert免费获得SSL证书。

除此之外,使用.htaccess + .htpasswd是一个合理的选择。

答案 1 :(得分:1)

> What's the best way to handle the
> authentication? My first thought was
> to put the username and password in a
> text file inside the folder and
> prevent the server from serving the
> page using .htaccess. I'm trying to
> avoid touching a database for the
> project as I want to keep it cheap and
> simple.

OpenID是(几乎)所有问题的答案:

  • 您没有商店用户名和密码=>坏(严密地存储密码是非常困难的概念)。
  • 您不必触摸任何数据库,因为OpenID会为您处理身份验证。
  • openId有非常友好的库(LightOpenID非常友好)并且是免费的(开源)。

http://www.codinghorror.com/blog/2008/05/openid-does-the-world-really-need-yet-another-username-and-password.html

  

随着我们继续研究代码   最终会成为   stackoverflow,我们迟到了   我们会为过剩做出贡献   用户名和密码在网络上。   我有五十个在线登录,而我   不记得他们中的任何一个!添加   第五十一集   stackoverflow.com凭据是   不太可能帮助解决问题。

我认为您应该使用opendID(Facebook Connect等)进行身份验证。我甚至创建了一个处理身份验证的小程序,就像stackoverflow.com一样(具有漂亮的小部件)。您可以在我http://westerveld.name/php-openid/的简单虚拟主机上演示此功能。您可以在https://github.com/alfredwesterveld/php-openid下载代码(在封面下使用LightOpenID)。


> I'm trying to avoid touching a
> database for the project as I want to
> keep it cheap and simple.

我知道你会想避免触及数据库,因为如果没有正确完成它会使你的代码库更难掌握。但是要使用数据库进行扩展是必须的,如果你不必在切换时编写这个概念(因为系统不能再处理),你就会有可维护性的噩梦。

数据库也可以帮助您进行编码,因为它将抽象所有执行I / O的小细节(使用数据库使编码更容易)。幸运的是,您不需要使用像MySQL / PostGRESQL这样的完全灵活的数据库,因为PHP(> = 5)会为您编译/安装SQLite,您可以使用它:

  

SQLite是一个软件库   实现一个独立的,   无服务器,零配置,   事务性SQL数据库引擎。   SQLite是部署最广泛的SQL   世界上的数据库引擎。该   SQLite的源代码在   公共领域。

要从代码中抽象数据库,您应该了解PDO以连接到SQLite。这introduction会正确地了解您的操作方法(良好阅读!)。

这些部分特别重要:

  • Connecting
  • Prepared Statements以防止SQL注入。

然后,当您想要将实现从SQLite更改为MySQL时,就像将new PDO替换为使用MySQL而不是SQLite一样简单。


> What's the best way to handle the
> authentication?

让OpenID处理身份验证并使用authorization返回的OpenID网址(唯一)。您可以轻松地将此信息存储在所需的数据库中。


> prevent the server from serving the
> page using .htaccess

.htaccess可用于阻止用户访问某些文件。更容易的是将这些文件放在文件将被提供给Web浏览器之外的位置(如果可能的话)。当然,如果您还希望用户访问/下载该文件,您必须将它们放在该位置,但是您需要执行授权。


> I doubt the customer will even spring
> for an SSL certificate.

密码盗窃是我肯定不喜欢的东西。在过去,当我不知道安全性时,我为所有网站使用了一个密码(记住更多很难)。当Lifehacker got hacked我需要更改重要网站的密码时,不要被黑客入侵。现在我使用优秀的Lastpass来保存我的密码,并为每个站点创建一个唯一的密码。如果您不使用SSL,那么窃取信息(密码)可能就像安装blacksheep一样简单。 但幸运的是,在使用OpenID(适当的OpenID提供商,如Google,MyOpenID,Yahoo!)时,大部分时间都通过SSL进行身份验证。