首页 » 网络 » HTTP基本认证

HTTP基本认证的原理

HTTP协议中,基本认证(Basic)用来允许服务器向用户请求帐号和口令。

HTTP基本认证

用户输入帐号和密码后,浏览器将这两个串用:连接,并用base64编码发送到服务器端。base64编码的目的不是安全,而是将串转换为HTTP兼容的字符。这样的认证机制是不安全的,因为密码相当于以明文传输。HTTP基本认证的另一个问题是,用户没法有效登出,而只能选择清除历史记录或关闭浏览器!

HTTP基本认证的程序实现

PHP的一个简单实现。

if(!isset($_SERVER["PHP_AUTH_USER"])) {
    header("WWW-Authenticate: Basic realm=\"Berlinix\"");
    header("HTTP/1.0 401 Unauthorized");
    exit();
} else {
    echo "Hello $_SERVER[PHP_AUTH_USER], I guess your password is: $_SERVER[PHP_AUTH_PW].";
}

PHP的HTTP认证机制在CGI模式下无效。因此我们用浏览器访问页面,会收到一个401响应:

HTTP/1.0 401 Unauthorized
WWW-Authenticate: Basic realm="Berlinix"

当我们输入用户名和口令后,在服务器端可以通过PHP的getallheaders()获取整个HTTP头部,从而看到Authorization域的值为:Basic YmVybGluaXg6YmFzaWM=。将这个base64编码的值解码:

$ echo -n "YmVybGluaXg6YmFzaWM="|base64 -d
berlinix:basic

分享

0