PHP介面HTTP安全認證之Basic模式
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編碼,基本就是明文傳輸,很容易對報文擷取並盜用認證資訊。
相關文章
- HTTP認證模式:Basic & DigestHTTP模式
- HTTP認證之基本認證——Basic(一)HTTP
- HTTP認證之基本認證——Basic(二)HTTP
- 為 Eureka 新增 Http Basic 認證HTTP
- HTTP基礎認證Basic AuthenticationHTTP
- HTTP使用BASIC認證的原理及實現方法HTTP
- PHP的HTTP認證機制PHPHTTP
- HTTP認證之摘要認證——Digest(一)HTTP
- Nginx 新增 Auth Basic 認證Nginx
- Java HttpClient Basic Credential 認證JavaHTTPclient
- Web services 安全 - HTTP Basic AuthenticationWebHTTP
- 精講RestTemplate第9篇-如何通過HTTP Basic Auth認證RESTHTTP
- 使用Node在服務端呼叫HTTP-Basic認證的API服務端HTTPAPI
- Basic認證和Bearer Token認證的區別
- Shiro實現Basic認證
- WebApi身份認證解決方案(1):Basic基礎認證WebAPI
- Http基本認證HTTP
- 【Http基本認證】HTTP
- PHP語言呼叫翔雲身份證實名認證介面PHP
- PHP 設計模式之介面卡模式PHP設計模式
- php模式設計之 介面卡模式PHP模式
- 安全測試之認證授權
- Nginxauth_basic+phpMyAdmin安全驗證NginxPHP
- http authorization 基本認證HTTP
- 增強版實名認證介面-Java身份證實名認證介面程式碼-身份認證Java
- Hyperf 下 http 認證元件HTTP元件
- PHP身份實名認證介面小白也能輕鬆實現,ocr介面PHP
- 開發文件、PHP身份核驗介面,三要素實名認證介面PHP
- Oauth2認證模式之授權碼模式實現OAuth模式
- springsecurity透過策略模式設定統一認證介面SpringGse模式
- 為ElasticSearch新增HTTP基本認證ElasticsearchHTTP
- PHP模式大全 - 流介面模式PHP模式
- Java身份證實名認證介面解鎖認證新速度Java
- WCF HttpBinding 安全解析 (5)Basic驗證(IIS宿主)HTTP
- PHP 設計模式之流介面模式PHP設計模式
- 【原創】Apache HTTP Server認證初探ApacheHTTPServer
- 身份證實名認證介面的價格一般是多少呢?基於PHP身份核驗介面PHP
- 介面整合、快速對接-阿里身份證實名認證介面阿里