PHP如何實現(xiàn)HTTP驗證_第1頁
PHP如何實現(xiàn)HTTP驗證_第2頁
PHP如何實現(xiàn)HTTP驗證_第3頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

第PHP如何實現(xiàn)HTTP驗證總結(jié)

在日常開發(fā)中,我們進行用戶登錄的時候,大部分情況下都會使用session來保存用戶登錄信息,并以此為依據(jù)判斷用戶是否已登錄。但其實HTTP也提供了這種登錄驗證機制,我們今天就來學(xué)習(xí)關(guān)于HTTP驗證相關(guān)的知識。

HTTPBasic

if(!isset($_SERVER['PHP_AUTH_USER'])){

header('WWW-Authenticate:Basicrealm="MyRealm"');

header('HTTP/1.0401Unauthorized');

echo'TexttosendifuserhitsCancelbutton';

exit;

}else{

echo"pHello{$_SERVER['PHP_AUTH_USER']}./p

echo"pYouentered{$_SERVER['PHP_AUTH_PW']}asyourpassword./p

//Authorization:BasicYWFhOmFhYQ==

echobase64_decode('YWFhOmFhYQ==');

//aaa:aaa等于明文

還是直接就從代碼入手,上面的代碼就是最簡單的一種HTTP認(rèn)證方式,如果$_SERVER['PHP_AUTH_USER']不存在,那么我們就向瀏覽器發(fā)送一個401響應(yīng)頭,就是告訴瀏覽器我們需要登錄驗證。當(dāng)瀏覽器收到這個響應(yīng)頭時,就會彈出一個瀏覽器自帶的驗證框并要求輸入用戶名和密碼。

當(dāng)我們填寫了用戶名和密碼后,瀏覽器會在請求頭中帶上Authorization字段,并且將base64之后的用戶名和密碼發(fā)送過來。同時,PHP將會分別把用戶名和密碼解析到_SERVER['PHP_AUTH_USER']和_SERVER['PHP_AUTH_PW']中。

上述這種認(rèn)證方式就是最簡單的HTTPBasic認(rèn)證,可以看出,這種方式進行驗證的用戶名和密碼其實是相當(dāng)于明文傳輸?shù)?,因為base64很容易就可以反向解析出來。所以這種方式是非常不安全的。那么有沒有更復(fù)雜一些的方式呢?

HTTPDigest

既然這么寫了,那肯定是有更好的方式啦,那就是HTTPDigest方式的HTTP認(rèn)證。

$realm='Restrictedarea';

//user=password

$users=array('admin'='mypass','guest'='guest');

//指定Digest驗證方式

if(empty($_SERVER['PHP_AUTH_DIGEST'])||!$_COOKIE['login']){

setcookie('login',1);//退出登錄條件判斷

header('HTTP/1.1401Unauthorized');

header('WWW-Authenticate:Digestrealm="'.$realm.

'",qop="auth",nonce="'.uniqid().'",opaque="'.md5($realm).'"');

//如果用戶不輸入密碼點了取消

die('您點了取消,無法登錄');

//驗證用戶登錄信息

if(!($data=http_digest_parse($_SERVER['PHP_AUTH_DIGEST']))||

!isset($users[$data['username']])){

die('WrongCredentials!');

//驗證登錄信息

$A1=md5($data['username'].':'.$realm.':'.$users[$data['username']]);

$A2=md5($_SERVER['REQUEST_METHOD'].':'.$data['uri']);

$valid_response=md5($A1.':'.$data['nonce'].':'.$data['nc'].':'.$data['cnonce'].':'.$data['qop'].':'.$A2);

//$data['response']是瀏覽器客戶端的加密內(nèi)容

if($data['response']!=$valid_response){

die('WrongCredentials!');

//用戶名密碼驗證成功

echo'您的登錄用戶為:'.$data['username'];

setcookie("login",2);

//Authorization:Digestusername="guest",realm="Restrictedarea",nonce="5e815bcbb4eba",uri="/",response="9286ea8d0fac79d3a95fff3e442d6d79",opaque="cdce8a5c95a1427d74df7acbf41c9ce0",qop=auth,nc=00000002,cnonce="a42e1373

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論