使用PHP的HTTP身份验证究竟是如何工作的


How exactly does HTTP Authentication with PHP work?

我真的不明白。我不明白.htaccess、php和HTTP是如何在HTTP身份验证主题中协同工作的。

如何做到这一点:我有一个文件夹,我想防止未经授权的人访问。例如,在这个文件夹中,我有图像,如果用户获得授权,则应该显示图像,如果没有,则他应该可以为这个请求输入用户名和密码。

我是否需要一个.htaccess文件,它重定向到php文件,检查和处理身份验证,发送适当的头文件,并输出请求的文件?

还是我必须做点别的?我能解决这个完全不同的问题吗?

您有几个选项。

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

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

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

在命令行创建.htpasswd:

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

但许多控制面板都有使用界面设置的工具。

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

后者让用户可以更容易地选择不同的密码。密码并不是每次都发送的,只有cookie。

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

  • 您将服务器配置为在将请求传递到PHP
  • 您编写的PHP将检查提交的凭据,并返回合适的HTTP标头,以便在凭据丢失或错误时进行请求

我需要.htaccess文件吗

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

重定向到php文件

如果使用第二种方法,通常会在每个需要身份验证的页面顶部include您的身份验证代码。(无论如何,对于一种简单的方法来说,MVC方法往往具有更模块化的做事方式)。

您可以使用基本身份验证(这可能是最容易设置的)来限制对整个文件夹的访问。它相当直。

您首先需要的是.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"<lt;冒号分隔,密码可以以各种方式存储(crypt、纯文本、sha1、md5)。在上面的例子中,我选择了密码"password",并使用crypt作为输出。

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