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