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

來源:互聯網
上載者:User

通基本身份認證一樣,也可以使用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);
//使用Regex解析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;
}
?>

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.