国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 後端開發(fā) php教程 php 進行 HTTP 認證

php 進行 HTTP 認證

Nov 22, 2016 am 10:37 AM

PHP?的?HTTP?認證機制僅在 PHP 以?Apache?模塊方式運行時才有效,因此該功能不適用于 CGI 版本。在 Apache 模塊的 PHP 腳本中,可以用?header()?函數(shù)來向客戶端瀏覽器發(fā)送“Authentication Required”信息,使其彈出一個用戶名/密碼輸入窗口。當用戶輸入用戶名和密碼后,包含有 URL 的 PHP 腳本將會加上預(yù)定義變量PHP_AUTH_USER,PHP_AUTH_PW?和?AUTH_TYPE?被再次調(diào)用,這三個變量分別被設(shè)定為用戶名,密碼和認證類型。預(yù)定義變量保存在?$_SERVER?或者$HTTP_SERVER_VARS?數(shù)組中。支持“Basic”和“Digest”(自 PHP 5.1.0 起)認證方法。

Note:?PHP 版本問題

Autoglobals?全局變量,包括?$_SERVER等,自 PHP?4.1.0?起有效,$HTTP_SERVER_VARS?從 PHP 3 開始有效。

以下是在頁面上強迫客戶端認證的腳本范例:

Example #1 Basic HTTP 認證范例

<?php
    if (!isset($_SERVER[&#39;PHP_AUTH_USER&#39;])) {
        header(&#39;WWW-Authenticate: Basic realm="My Realm"&#39;);
        header(&#39;HTTP/1.0 401 Unauthorized&#39;);
        echo &#39;Text to send if user hits Cancel button&#39;;
        exit;
    } else {
        echo "<p>Hello {$_SERVER[&#39;PHP_AUTH_USER&#39;]}.</p>";
        echo "<p>You entered {$_SERVER[&#39;PHP_AUTH_PW&#39;]} as your password.</p>";
    }
?>

在瀏覽器地址欄輸入腳本在服務(wù)器位置,彈出如下輸入框:

php 進行 HTTP 認證

如果點擊取消的話輸出:

Text to send if user hits Cancel Button

如果輸入用戶名和密碼,點擊登錄:

Hello hello.

You entered world as your password.

Example #2 Digest HTTP 認證范例

本例演示怎樣實現(xiàn)一個簡單的 Digest HTTP 認證腳本。

<?php
    $realm = &#39;Restricted area&#39;;
    //user => password
    $users = array(&#39;admin&#39; => &#39;mypass&#39;, &#39;guest&#39; => &#39;guest&#39;);
    if (empty($_SERVER[&#39;PHP_AUTH_DIGEST&#39;])) {
        header(&#39;HTTP/1.1 401 Unauthorized&#39;);
        header(&#39;WWW-Authenticate: Digest realm="&#39;.$realm.
            &#39;" qop="auth" nonce="&#39;.uniqid().&#39;" opaque="&#39;.md5($realm).&#39;"&#39;);
        die(&#39;Text to send if user hits Cancel button&#39;);
    }
    // analyze the PHP_AUTH_DIGEST variable
    if (!($data = http_digest_parse($_SERVER[&#39;PHP_AUTH_DIGEST&#39;])) ||
        !isset($users[$data[&#39;username&#39;]]))
        die(&#39;Wrong Credentials!&#39;);
    // generate the valid response
    $A1 = md5($data[&#39;username&#39;] . &#39;:&#39; . $realm . &#39;:&#39; . $users[$data[&#39;username&#39;]]);
    $A2 = md5($_SERVER[&#39;REQUEST_METHOD&#39;].&#39;:&#39;.$data[&#39;uri&#39;]);
    $valid_response = md5($A1.&#39;:&#39;.$data[&#39;nonce&#39;].&#39;:&#39;.$data[&#39;nc&#39;].&#39;:&#39;.$data[&#39;cnonce&#39;].&#39;:&#39;.$data[&#39;qop&#39;].&#39;:&#39;.$A2);
    if ($data[&#39;response&#39;] != $valid_response)
        die(&#39;Wrong Credentials!&#39;);
    // ok, valid username & password
    echo &#39;Your are logged in as: &#39; . $data[&#39;username&#39;];
    // function to parse the http auth header
    function http_digest_parse($txt)
    {
        // protect against missing data
        $needed_parts = array(&#39;nonce&#39;=>1, &#39;nc&#39;=>1, &#39;cnonce&#39;=>1, &#39;qop&#39;=>1, &#39;username&#39;=>1, &#39;uri&#39;=>1, &#39;response&#39;=>1);
        $data = array();
        preg_match_all(&#39;@(\w+)=([\&#39;"]?)([a-zA-Z0-9=./\_-]+)\2@&#39;, $txt, $matches, PREG_SET_ORDER);
        foreach ($matches as $m) {
             $data[$m[1]] = $m[3];
             unset($needed_parts[$m[1]]);
        }
        return $needed_parts ? false : $data;
    }
?>

Note: 兼容性問題

在編寫 HTTP 標頭代碼時請格外小心。為了對所有的客戶端保證兼容性,關(guān)鍵字“Basic”的第一個字母必須大寫為“B”,分界字符串必須用雙引號(不是單引號)引用;并且在標頭行 HTTP/1.0 401 中,在 401 前必須有且僅有一個空格。

在以上例子中,僅僅只打印出了 PHP_AUTH_USER 和 PHP_AUTH_PW 的值,但在實際運用中,可能需要對用戶名和密碼的合法性進行檢查?;蛟S進行數(shù)據(jù)庫的查詢,或許從 dbm 文件中檢索。

注意有些 Internet Explorer 瀏覽器本身有問題。它對標頭的順序顯得似乎有點吹毛求疵。目前看來在發(fā)送 HTTP/1.0 401 之前先發(fā)送 WWW-Authenticate 標頭似乎可以解決此問題。

自 PHP 4.3.0 起,為了防止有人通過編寫腳本來從用傳統(tǒng)外部機制認證的頁面上獲取密碼,當外部認證對特定頁面有效,并且安全模式被開啟時,PHP_AUTH 變量將不會被設(shè)置。但無論如何,REMOTE_USER 可以被用來辨認外部認證的用戶,因此可以用 $_SERVER['REMOTE_USER'] 變量。

Note: 配置說明

PHP 用是否有 AuthType 指令來判斷外部認證機制是否有效。

注意,這仍然不能防止有人通過未認證的 URL 來從同一服務(wù)器上認證的 URL 上偷取密碼。

Netscape Navigator 和 Internet Explorer 瀏覽器都會在收到 401 的服務(wù)端返回信息時清空所有的本地瀏覽器整個域的 Windows 認證緩存。這能夠有效的注銷一個用戶,并迫使他們重新輸入他們的用戶名和密碼。有些人用這種方法來使登錄狀態(tài)“過期”,或者作為“注銷”按鈕的響應(yīng)行為。

Example #3 強迫重新輸入用戶名和密碼的 HTTP 認證的范例

<?php
    function authenticate() {
        header(&#39;WWW-Authenticate: Basic realm="Test Authentication System"&#39;);
        header(&#39;HTTP/1.0 401 Unauthorized&#39;);
        echo "You must enter a valid login ID and password to access this resource\n";
        exit;
    }
    if (!isset($_SERVER[&#39;PHP_AUTH_USER&#39;]) ||
        ($_POST[&#39;SeenBefore&#39;] == 1 && $_POST[&#39;OldAuth&#39;] == $_SERVER[&#39;PHP_AUTH_USER&#39;])) {
        authenticate();
    } else {
        echo "<p>Welcome: {$_SERVER[&#39;PHP_AUTH_USER&#39;]}<br />";
        echo "Old: {$_REQUEST[&#39;OldAuth&#39;]}";
        echo "<form action=&#39;{$_SERVER[&#39;PHP_SELF&#39;]}&#39; METHOD=&#39;post&#39;>\n";
        echo "<input type=&#39;hidden&#39; name=&#39;SeenBefore&#39; value=&#39;1&#39; />\n";
        echo "<input type=&#39;hidden&#39; name=&#39;OldAuth&#39; value=&#39;{$_SERVER[&#39;PHP_AUTH_USER&#39;]}&#39; />\n";
        echo "<input type=&#39;submit&#39; value=&#39;Re Authenticate&#39; />\n";
        echo "</form></p>\n";
    }

該行為對于 HTTP 的 Basic 認證標準來說并不是必須的,因此不能依靠這種方法。對 Lynx 瀏覽器的測試表明 Lynx 在收到 401 的服務(wù)端返回信息時不會清空認證文件,因此只要對認證文件的檢查要求沒有變化,只要用戶點擊“后退”按鈕,再點擊“前進”按鈕,其原有資源仍然能夠被訪問。不過,用戶可以通過按“_”鍵來清空他們的認證信息。

同時請注意,在 PHP 4.3.3 之前,由于微軟 IIS 的限制,HTTP 認證無法工作在 IIS 服務(wù)器的 CGI 模式下。為了能夠使其在 PHP 4.3.3 以上版本能夠工作,需要編輯 IIS 的設(shè)置“目錄安全”。點擊“編輯”并且只選擇“匿名訪問”,其它所有的復(fù)選框都應(yīng)該留空。

另一個限制是在 IIS 的 ISAPI 模式下使用 PHP 4 的時候,無法使用?PHP_AUTH_*?變量,而只能使用?HTTP_AUTHORIZATION。例如,考慮如下代碼:list($user, $pw) = explode(':', base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6)));。

Note:?IIS 注意事項
要 HTTP 認證能夠在 IIS 下工作,PHP 配置選項?cgi.rfc2616_headers?必須設(shè)置成?0(默認值)。

Note:

如果安全模式被激活,腳本的 UID 會被加到?WWW-Authenticate?標頭的?realm?部分。


本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔相應(yīng)的法律責任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

如何在PHP中實施身份驗證和授權(quán)? 如何在PHP中實施身份驗證和授權(quán)? Jun 20, 2025 am 01:03 AM

tosecurelyhandleauthenticationandationallizationInphp,lofterTheSesteps:1.AlwaysHashPasswordSwithPassword_hash()andverifyusingspasspassword_verify(),usepreparedStatatementStopreventsqlineptions,andStoreSeruserDatain usseruserDatain $ _sessiveferterlogin.2.implementrole-2.imaccessccsccccccccccccccccccccccccc.

如何在PHP中安全地處理文件上傳? 如何在PHP中安全地處理文件上傳? Jun 19, 2025 am 01:05 AM

要安全處理PHP中的文件上傳,核心在於驗證文件類型、重命名文件並限制權(quán)限。 1.使用finfo_file()檢查真實MIME類型,僅允許特定類型如image/jpeg;2.用uniqid()生成隨機文件名,存儲至非Web根目錄;3.通過php.ini和HTML表單限製文件大小,設(shè)置目錄權(quán)限為0755;4.使用ClamAV掃描惡意軟件,增強安全性。這些步驟有效防止安全漏洞,確保文件上傳過程安全可靠。

PHP中==(鬆散比較)和===(嚴格的比較)之間有什麼區(qū)別? PHP中==(鬆散比較)和===(嚴格的比較)之間有什麼區(qū)別? Jun 19, 2025 am 01:07 AM

在PHP中,==與===的主要區(qū)別在於類型檢查的嚴格程度。 ==在比較前會進行類型轉(zhuǎn)換,例如5=="5"返回true,而===要求值和類型都相同才會返回true,例如5==="5"返回false。使用場景上,===更安全應(yīng)優(yōu)先使用,==僅在需要類型轉(zhuǎn)換時使用。

如何在PHP( - , *, /,%)中執(zhí)行算術(shù)操作? 如何在PHP( - , *, /,%)中執(zhí)行算術(shù)操作? Jun 19, 2025 pm 05:13 PM

PHP中使用基本數(shù)學(xué)運算的方法如下:1.加法用 號,支持整數(shù)和浮點數(shù),也可用於變量,字符串數(shù)字會自動轉(zhuǎn)換但不推薦依賴;2.減法用-號,變量同理,類型轉(zhuǎn)換同樣適用;3.乘法用*號,適用於數(shù)字及類似字符串;4.除法用/號,需避免除以零,並註意結(jié)果可能是浮點數(shù);5.取模用%號,可用於判斷奇偶數(shù),處理負數(shù)時餘數(shù)符號與被除數(shù)一致。正確使用這些運算符的關(guān)鍵在於確保數(shù)據(jù)類型清晰並處理好邊界情況。

如何與PHP的NOSQL數(shù)據(jù)庫(例如MongoDB,Redis)進行交互? 如何與PHP的NOSQL數(shù)據(jù)庫(例如MongoDB,Redis)進行交互? Jun 19, 2025 am 01:07 AM

是的,PHP可以通過特定擴展或庫與MongoDB和Redis等NoSQL數(shù)據(jù)庫交互。首先,使用MongoDBPHP驅(qū)動(通過PECL或Composer安裝)創(chuàng)建客戶端實例並操作數(shù)據(jù)庫及集合,支持插入、查詢、聚合等操作;其次,使用Predis庫或phpredis擴展連接Redis,執(zhí)行鍵值設(shè)置與獲取,推薦phpredis用於高性能場景,Predis則便於快速部署;兩者均適用於生產(chǎn)環(huán)境且文檔完善。

我如何了解最新的PHP開發(fā)和最佳實踐? 我如何了解最新的PHP開發(fā)和最佳實踐? Jun 23, 2025 am 12:56 AM

TostaycurrentwithPHPdevelopmentsandbestpractices,followkeynewssourceslikePHP.netandPHPWeekly,engagewithcommunitiesonforumsandconferences,keeptoolingupdatedandgraduallyadoptnewfeatures,andreadorcontributetoopensourceprojects.First,followreliablesource

什麼是PHP,為什麼它用於Web開發(fā)? 什麼是PHP,為什麼它用於Web開發(fā)? Jun 23, 2025 am 12:55 AM

PHPbecamepopularforwebdevelopmentduetoitseaseoflearning,seamlessintegrationwithHTML,widespreadhostingsupport,andalargeecosystemincludingframeworkslikeLaravelandCMSplatformslikeWordPress.Itexcelsinhandlingformsubmissions,managingusersessions,interacti

如何設(shè)置PHP時區(qū)? 如何設(shè)置PHP時區(qū)? Jun 25, 2025 am 01:00 AM

tosetTherightTimeZoneInphp,restate_default_timezone_set()functionAtthestArtofyourscriptWithavalIdidentIdentifiersuchas'america/new_york'.1.usedate_default_default_timezone_set_set()

See all articles