国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

編寫php應用程序實現摘要式身份驗證的方法詳解

2024-05-04 23:09:13
字體:
來源:轉載
供稿:網友
通基本身份認證一樣,也可以使用PHP網頁處理HTTP請求報頭字段來匹配摘要式身份驗證信息。例如下邊的代碼使用header()函數要求客戶端使用Digest驗證,它在HTTP消息報頭中增加了一個WWW-Authenticate字段:
header('WWW-Authenticate:Digest Realm="MyRealm",nonce="47alf7cf25ce7",algorithm=MD5,qop="auth"');
--------------------------------------------------------------------------------
下邊代碼描述的是一個使用摘要式身份驗證的網頁(首先取消Apache驗證配置)。

復制代碼 代碼如下:


<?php
$realm="MyRealm";
//如果沒有驗證信息,則發送報頭要求瀏覽器使用摘要式身份驗證
if(!isset($_SERVER['PHP_AUTH_DIGEST'])){
header("WWW-Authenticate:Digest Realm=/"$realm/",nonce=/"".uniqid()."/",algorithm=MD5,qop=/"auth/"");
header("HTTP/1.0 401 Unauthorization Required");
echo "賬號/密碼錯誤!";
exit;
}else{
//使用函數http_digest_parse解析驗證信息
$data=http_digest_parse($_SERVER["PHP_AUTH_DIGEST"]);
if(!$data){
header("HTTP/1.0 401 Unauthorization Required");
echo "賬號/密碼錯誤!";
exit;
}else{
//根據HTTP協議,自己構建一個response值
$A1=md5('admin:'.$realm.':password');
$A2=md5($_SERVER['REQUEST_METHOD'].':'.$data['uri']);
$valid_response=
md5($A1.':'.$data['nonce'].':'.$data['nc'].':'.$data['cnonce'].':'.$data['qop'].':'.$A2);}
//將自己構建的response值與瀏覽器構建并發送過來的response值對比,如果相同那么就證明用戶名和密碼輸入是正確的
if($data['response']==$valid_response){
echo "驗證通過!";
}else{
header("HTTP/1.0 401 Unauthorization Required");
echo("賬號/密碼錯誤!");
exit;
}
}
function http_digest_parse($digest_str){
$needed_parts=array('nonce'=>1,'nc'=>1,'cnonce'=>1,'qop'=>1,'username'=>1,'uri'=>1,'response'=>1);
//使用正則表達式解析Authorization報頭的內容
preg_match_all('@(/w+)=([/'"]?)([a-zA-Z0-9=.//_-]+)/2@',$digest_str,$result,PREG_SET_ORDER);
//將結果填充$data數組,并返回
$data=array();
foreach($result as $m){
$data[$m[1]]=$m[3];
unset($needed_parts[$m[1]]);
}
return $needed_parts?false:$data;
}
?>


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 四子王旗| 庄河市| 衡阳市| 元阳县| 湖南省| 社会| 宜兰市| 白山市| 岱山县| 锡林浩特市| 囊谦县| 红桥区| 临泽县| 兴义市| 新泰市| 土默特左旗| 松原市| 平舆县| 阿坝| 阜南县| 邵东县| 拉萨市| 大名县| 青浦区| 金堂县| 中超| 涞水县| 荃湾区| 运城市| 厦门市| 亳州市| 永康市| 万全县| 金昌市| 囊谦县| 长海县| 余姚市| 会同县| 安平县| 大埔县| 阳信县|