如何使用PHP进行HTTP身份验证?

时间:2013-12-17 15:30:18

标签: php .htaccess http-authentication

我真的不明白。 我不明白.htaccess,php和HTTP如何在主题http-authentication中一起工作。

如何实现这一点:我有一个文件夹,我希望阻止访问未经授权的人。 例如,在此文件夹中我有图像,如果用户被授权,则应显示图像,否则他应该可以为这一个请求输入用户名和密码。

我需要一个重定向到php文件的.htaccess文件,该文件检查并处理身份验证并发送相应的标头并输出所请求的文件吗?

还是我必须做点什么? 我能完全解决这个问题吗?

3 个答案:

答案 0 :(得分:0)

  • 您将服务器配置为在将请求传递给PHP
  • 之前执行身份验证
  • 您编写的PHP将检查提交的凭据并返回合适的HTTP标头,以便在缺少或错误时请求它们
  

我需要一个.htaccess文件

仅当您使用上述第一种方法时。即便如此,通常最好将配置放在主服务器配置中(效率更高)。

  

重定向到php文件

如果您采用第二种方法,通常会在每页需要身份验证的页面顶部include验证您的身份验证码。 (无论如何,对于一个简单的方法,MVC方法倾向于采用更模块化的方法)。

答案 1 :(得分:0)

您有几个选择。

1 - Basic Authentication - 当用户发出请求时,apache会检查htaccess文件,当设置了基本身份验证时,它会返回一个用于身份验证的标头(当没有发送登录信息时)。 webbrowser对此做出反应并提供本机登录屏幕。所有浏览器和密码记忆工具都非常支持此屏幕。输入凭据时,下一次请求每次都会发送凭据(未加密),因此apache每次都不会给出登录屏幕。您可以在其上阅读更多内容here

如何设置,创建.htaccess文件:

AuthName "Protected"
AuthType Basic
AuthUserFile securepath/.htpasswd
Require user authuser

在命令行创建.htpasswd:

$ adduser authuser
$ passwd authuser
$ htpasswd  -c securepath/.htpasswd  authuser

但是许多控制面板都有工具可以使用界面进行设置。

2 - 自己的系统 - 你可以编写自己的auth系统,在你的代码中验证用户是否被授权。您可以构建一个登录屏幕,用户在获得授权时会获得代表服务器上用户的cookie。但是cookie本身是未加密的,可以被其他人阅读。

后者为您提供了让用户更轻松地使用不同密码的选项。并且每次都不会发送密码,只会发送密码。

为了安全起见,我建议使用SSL / HTTPS连接,其中所有内容都已加密。

答案 2 :(得分:0)

您可以使用基本身份验证限制对整个文件夹的访问(这可能是设置的简单方法)。这是相当直接的。

您需要的第一件事是您的.htaccess文件。此文件需要驻留在要限制访问的文件夹内。例如/restrict/.htaccess

此.htaccess文件需要

#set up basic authentication
AuthType Basic
#provide password verification file
AuthUserFile /PATH_TO_HTPASSWD_FILE/.htpasswd
#set user names as "require user *******"
require user my_username

然后在您的.htpasswd文件中验证您的用户名/密码,如下所示:

my_username:$1$jeTmJQpY$gKrWlJqL6dCCSX62Hspfp0

验证由“username:password”<<完成冒号分隔,密码可以各种方式存储(crypt,纯文本,sha1,md5)。在上面的示例中,我选择了密码“password”,并使用crypt作为输出。

强烈建议不要将.htpasswd文件存储在同一目录中。