使用PHP3進行HTTP認證

隻有在PHP以Apache的模塊方式運行的時候才可以使用HTTP認證的功能。在Apache的模塊PHP腳本中,可以使用Header()函數向客戶斷瀏覽器發送一個”Authentication Required”的消息,使瀏覽器彈出一個用戶名/密碼(username/password)的輸入窗口,當用戶輸入用戶名和密碼後,包含PHP腳本的URL將會被再次調用,使用分別代表用戶名,密碼,和確認方式的$PHP_AUTH_USER, $PHP_AUTH_PW,$PHP_AUTH_TYPE變量。現在隻有”BASIC”的確認方式被支持。
在一個頁面中強迫用戶進行身份認證的代碼段的例子如下:
Example 2-1. HTTP 認證舉例:
<?php
if(!isset($PHP_AUTH_USER)) {
Header("WWW-Authenticate: Basic realm="My Realm"");
Header("HTTP/1.0 401 Unauthorized");
echo "Text to send if user hits Cancel button
";
exit;
}
else {
echo "Hello $PHP_AUTH_USER.
";
echo "You entered $PHP_AUTH_PW as your password.
";
}
?>
除瞭簡單的輸出$PHP_AUTH_USER 和 $PHP_AUTH_PW變量的值以外,你還可以檢查用戶名和密碼的合法性,也許是對數據庫進行查詢,也許是在dbm文件中搜索用戶。
當心臭蟲成堆的Internet Explorer瀏覽器,他對Hearders的順序非常挑剔.所以采用在送出HTTP/1.0 401 header 請求之前送出WWW-Authenticate header請求是一個很好的解決方法。

為瞭阻止一些人寫一些腳本來顯示一個經過傳統外部機制驗證過的頁面的密碼,采用如下方式:如果這一頁面使用外部驗證機制,將不會生成PHP_AUTH變量.這樣,$REMOTE_USER變量可以被用來表示已經被外部機制驗證的用戶.
註意,上面的方法並不能防止某些人在同一臺服務器上利用無身份驗證的URL偷取有身份鑒別的URL的密碼。
無論Netscape還是IE,在接到服務器的401回復之後,都將清空本地瀏覽器窗口的身份驗證緩存。這種做法可以有效的使用戶登錄退出,從而強迫他們再次輸入他們的用戶名和密碼。一些人使用這個方式來實現“超時”註冊,或者提供登錄退出的按鈕。
這種方法不是標準的HTTP基本身份鑒定所必須的,所以您可能從來都不依靠它。使用Lynx進行的測試並沒有弄清楚401服務器回應的身份鑒定,所以如果使用“向前”或“向後”功能將打開源文件(隻要信用需求還沒有被改變)。
雖然已經指出這種語言不能工作在Microsoft的IIS服務器上,但是PHP語言CGI版本將受到IIS的限制。

發佈留言