• HTTP基础验证


    HTTP 内置基础验证。浏览器收到401状态码响应后,弹出要求输入信息的对话框。通过验证则显示内容,不通过不显示需要验证身份的内容。

    1;手动HTTP基础验证:

            

    header('http/1.1 401 Unauthorized')

    此在响应头中添加401状态码。触发浏览器弹出对话框要求输入用户名&密码

    想要去掉已认证的状态,重新触发下401的状态。

    1. <?php
    2. //检查有无认证信息
    3. // HTTP_AUTHORIZATION 值如 'Basic dXNlcjpwYXNz'
    4. if((!isset($_SERVER['PHP_AUTH_USER'])) && (!isset($_SERVER['PHP_AUTH_PW'])) && (substr($_SERVER["HTTP_AUTHORIZATION"],0,6) == 'Basic')){
    5. list($_SERVER['PHP_AUTH_USER'],$_SERVER['PHP_AUTH_PW']) = explode(":",base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'],6)));
    6. }
    7. //没有认证信息
    8. if(($_SERVER['PHP_AUTH_USER'] != 'user') ||
    9. ($_SERVER['PHP_AUTH_PW'] != 'pass')){
    10. header("WWW-Authenticate: Basic realm ='Zoon Name'");
    11. //触发浏览器内置的基础验证(弹出对话框)
    12. header('HTTP/1.0 401 Unauthorized(worong msg)');
    13. echo '你取消了';
    14. //有认证信息
    15. }else{
    16. ?>
    17. <!DOCTYPE html>
    18. <html lang="en">
    19. <head>
    20. <meta charset="UTF-8">
    21. <meta http-equiv="X-UA-Compatible" content="IE=edge">
    22. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    23. <title>Passe the basic authentication</title>
    24. </head>
    25. <body>
    26. Congratulation!<br>
    27. <?php
    28. // var_dump($_SERVER);
    29. ?>
    30. </body>
    31. </html>
    32. <?php
    33. }
    34. ?>

    2;使用.htaccess实现基础验证()

    .htaccess 对该目录及其子目录有效。访问带.htaccess 文件夹中的内容需要通过基础验证。

    每次访问带.htaccess文件夹中的内容都会解析.htaccess 所以效率不够高

    1. # .htaccess文件
    2. <IfModule mod_rewrite.c>
    3. RewriteEngine On
    4. RewriteCond %{REQUEST_FILENAME} !-d
    5. RewriteCond %{REQUEST_FILENAME} !-f
    6. RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
    7. #增加下面的内容就可以了看到HTTP_AUTORIZATION的内容(有的话)
    8. RewriteCond %{HTTP:Authorization} .
    9. RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
    10. </IfModule>
    11. # Prevent Apache from serving .ht* files:
    12. <FilesMatch "^\.ht">
    13. Order allow,deny
    14. Deny from all
    15. </FilesMatch>
    16. # 存放基础验证中的多个【用户名:密码】
    17. AuthUserFile D:/programfile/htaccess/.htpass
    18. AuthType Basic
    19. AuthName "this is a Realm"
    20. AuthBasicProvider file
    21. Require valid-user
    22. # 指定401状态码错误后跳转到的页面
    23. ErrorDocument 401 ../401.html

    .htpass 存放每一组【用户名:密码]

    realm 提示用户输入什么类型密码的信息(作为提示性文字)

    1. 命令行生成 .htpass 文件
    2. htpasswd -bc .htpass文件 user1 pwd1
    3. 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

  • 相关阅读:
    NetDevOps — YANG 协议 — Junos YANG Modules
    docker 服务编排
    python flask接口字段存在性校验函数(http接口字段校验)(返回提示缺少的字段信息)validate_fields()
    FPGA设计时序约束一、主时钟与生成时钟
    Java(五)(Object类,克隆,Objects类,包装类,StringBuilder,StringJoiner,BigDecimal)
    【RocketMQ】数据的清理机制
    vue3子页面刷新,v-show联合v-if实现柱状图隐藏展示,和按条件查询
    java和大数据开发该选择哪个好就业?
    栅格区域人口分布数据获取及坐标系转换
    Spring之aop
  • 原文地址:https://blog.csdn.net/ou_nvhai/article/details/125475873