HTTP基础验证

本文介绍了HTTP的基础验证机制,当服务器返回401状态码时,浏览器会提示用户输入凭证。内容包括手动设置HTTP基础验证及使用.htaccess进行验证的方式。.htaccess文件可以保护目录及其子目录,但可能导致效率下降。htpasswd工具用于加密和管理用户凭证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值