HTTP 内置基础验证。浏览器收到401状态码响应后,弹出要求输入信息的对话框。通过验证则显示内容,不通过不显示需要验证身份的内容。
1;手动HTTP基础验证:
header('http/1.1 401 Unauthorized')
此在响应头中添加401状态码。触发浏览器弹出对话框要求输入用户名&密码
想要去掉已认证的状态,重新触发下401的状态。
<?php
//检查有无认证信息
// HTTP_AUTHORIZATION 值如 'Basic dXNlcjpwYXNz'
if((!isset($_SERVER['PHP_AUTH_USER'])) && (!isset($_SERVER['PHP_AUTH_PW'])) && (substr($_SERVER["HTTP_AUTHORIZATION"],0,6) == 'Basic')){
list($_SERVER['PHP_AUTH_USER'],$_SERVER['PHP_AUTH_PW']) = explode(":",base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'],6)));
}
//没有认证信息
if(($_SERVER['PHP_AUTH_USER'] != 'user') ||
($_SERVER['PHP_AUTH_PW'] != 'pass')){
header("WWW-Authenticate: Basic realm ='Zoon Name'");
//触发浏览器内置的基础验证(弹出对话框)
header('HTTP/1.0 401 Unauthorized(worong msg)');
echo '你取消了';
//有认证信息
}else{
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Passe the basic authentication</title>
</head>
<body>
Congratulation!<br>
<?php
// var_dump($_SERVER);
?>
</body>
</html>
<?php
}
?>
2;使用.htaccess实现基础验证()
.htaccess 对该目录及其子目录有效。访问带.htaccess 文件夹中的内容需要通过基础验证。
每次访问带.htaccess文件夹中的内容都会解析.htaccess 所以效率不够高
# .htaccess文件
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
#增加下面的内容就可以了看到HTTP_AUTORIZATION的内容(有的话)
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
</IfModule>
# Prevent Apache from serving .ht* files:
<FilesMatch "^\.ht">
Order allow,deny
Deny from all
</FilesMatch>
# 存放基础验证中的多个【用户名:密码】
AuthUserFile D:/programfile/htaccess/.htpass
AuthType Basic
AuthName "this is a Realm"
AuthBasicProvider file
Require valid-user
# 指定401状态码错误后跳转到的页面
ErrorDocument 401 ../401.html
.htpass 存放每一组【用户名:密码]
realm 提示用户输入什么类型密码的信息(作为提示性文字)
命令行生成 .htpass 文件
htpasswd -bc .htpass文件 user1 pwd1
htpasswd -b .htpass文件 user2 pwd2
-c : 告知htpass工具创建一个文件(已有的话会删除 原有的并创建新文件)
-b : Force bcrypt encryption of the password (very secure) 加密密码
结果:
user1:$apr1$sEICw13A$cqDOO6ePvyId5CavrbpS0/
user2:$apr1$8EVtrYFk$H2OaSsHH/Ak/FIEs/DUfn1
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)