我真的不明白。我不明白.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文件存储在同一目录中。