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()
- 响应的header: header('WWW-Authenticate: Basic realm="Test auth"');
- 请求的header:header('Authorization: Basic dGVzdDoxMTExMTE=');
$_SERVER
- $_SERVER[' PHP_AUTH_USER']
- $_SERVER['PHP_AUTH_PW ']
- $_SERVER[' AUTH_TYPE ']