美文网首页
PHP接口HTTP安全认证之Basic模式

PHP接口HTTP安全认证之Basic模式

作者: BiaoWong | 来源:发表于2018-11-19 17:53 被阅读93次

0x00 前言

随着项目需求的逐渐增多,功能的逐渐繁杂。以接口(API)形式获取数据成了不可避免的途径。那么如何提高PHP接口的安全性呢?下面是途径之一,废话不多说,直接上码。

0x01 PHP服务端验证方法:

<?php
define('ADMIN_USERNAME', 'admin');  // Admin Username
define('ADMIN_PASSWORD', md5('111111')); // Admin Password

//Authenticate
if (!isset($_SERVER['PHP_AUTH_USER']) || !isset($_SERVER['PHP_AUTH_PW'])
    || $_SERVER['PHP_AUTH_USER'] != base64_encode(ADMIN_USERNAME)
    || $_SERVER['PHP_AUTH_PW'] != base64_encode(ADMIN_PASSWORD)) {

    header('WWW-Authenticate: Basic realm="Auth failed"');
    Header("HTTP/1.0 401 Unauthorized");

    echo <<<EOB
        <html><body>
        <h1>Rejected!</h1>
        <big>Wrong Username or Password!</big>
        </body></html>
EOB;
}
else {
    echo "通过验证!";
}

0x02 PHP客户端请求方法:

define('ADMIN_USERNAME', 'admin');  // Admin Username
define('ADMIN_PASSWORD', md5('111111')); // Admin Password
$url = 'http://127.0.0.1/phpinput/output.php';  // url 必要参数
$params = ['name'=>'wangbiao', 'age'=>30];      // 参数 非必要

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0); // 可自定义Header
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_USERPWD, base64_encode(ADMIN_USERNAME) . ':' . base64_encode(ADMIN_PASSWORD));
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);  // 传递参数
$data = curl_exec($ch);

print_r($data);

0x03 总结

Basic Access Authentication scheme是在HTTP1.0提出的认证方法,它是一种基于challenge/response的认证模式,针对特定的realm需要提供用户名和密码认证后才可访问,其中密码使用明文传输。Basic模式认证过程如下:

1 浏览器发送http报文请求一个受保护的资源。
2 服务端的web容器将http响应报文的响应码设为401,响应头部加入WWW-Authenticate: Basic realm=”myTomcat”。
3浏览器弹出对话框让用户输入用户名和密码,并用Base64进行编码,实际是用户名+冒号+密码进行Base64编码,即Base64(username:password),这次浏览器就会在HTTP报文头部加入Authorization: Basic bXl0b21jYXQ=。
4 服务端web容器获取HTTP报文头部相关认证信息,匹配此用户名与密码是否正确,是否有相应资源的权限,如果认证成功则返回相关资源,否则再执行 过程2,重新进行认证。
5 以后每次访问都要带上认证头部。

服务端返回的认证报文中包含了realm=”Auth failed”,realm的值用于定义保护的区域,在服务端可以通过realm将不同的资源分成不同的域,域的名称即为realm的值,每个域可能会有自己的权限鉴别方案。

Basic认证模式有两个明显的缺点:

  • 无状态导致每次通信都要带上认证信息,即使是已经认证过的资源;
  • 传输安全性不足,认证信息用Base64编码,基本就是明文传输,很容易对报文截取并盗用认证信息。

相关文章

网友评论

      本文标题:PHP接口HTTP安全认证之Basic模式

      本文链接:https://www.haomeiwen.com/subject/osuafqtx.html