• 用 PHP 进行 HTTP 认证


    HTTP 认证

    简介

    www-authenticate是早期的一种简单的,有效的用户身份认证技术。这种认证方式在传输过程中是明码传输的,采用的用户名密码加密方式为BASE-64。破解这种验证用户名和密码是非常简单的。所以其认证技术并不是很安全。

    简单实现

    $user = 'test';
    $password = '111111';
    
    // 通过HTTP认证进行验证
    if (!isset($_SERVER['PHP_AUTH_USER']) || !isset($_SERVER['PHP_AUTH_PW']) || $_SERVER['PHP_AUTH_USER'] != $user || $_SERVER['PHP_AUTH_PW'] != $password) {
     header('WWW-Authenticate: Basic realm="Test auth"');
     header('HTTP/1.0 401 Unauthorized');
     echo 'Auth failed';
     exit;
    }
    
    // 下面实现功能
    echo '验证通过';

    如何获取认证的用户名和密码

    // 假如有这样一个请求
    curl -X GET 
      http://dev.jd.com:9013/env 
      -H 'Authorization: Basic dGVzdDoxMTExMTE=' 
      -H 'Cache-Control: no-cache' 
      -H 'Postman-Token: 2643f63a-19d4-4e05-8ebe-b584c4348443'
    
    它的header里面有Authorization: Basic dGVzdDoxMTExMTE=。 其中dGVzdDoxMTExMTE=就是认证的内容
    
    php使用 base64_decode()解码认证内容
    
    base64_decode('dGVzdDoxMTExMTE=');
    
    //输出 ,很明显只要劫持到请求,从请求头中就可以拿到认证的用户名和密码
    test:111111
    

    header()

    1. 响应的header: header('WWW-Authenticate: Basic realm="Test auth"');
    2. 请求的header:header('Authorization: Basic dGVzdDoxMTExMTE=');

    $_SERVER

    1. $_SERVER[' PHP_AUTH_USER']
    2. $_SERVER['PHP_AUTH_PW ']
    3. $_SERVER[' AUTH_TYPE ']

    参考资料

    1. 手册
    2. www-authenticate认证过程浅析
  • 相关阅读:
    mongodb 记录
    php保存文件
    调用AngularJS的API
    angular修改数据
    大小写转换
    使用Properties类动态加载配置文件里的内容
    org.apache.commons.cli.Options
    Google guava和Apache commons
    orc格式文件
    shell的awk命令使用
  • 原文地址:https://www.cnblogs.com/gelu/p/9708722.html
Copyright © 2020-2023  润新知