首頁 > 運營 > 幫助中心 > 正文

瀏覽器Basic Auth方式認證的phpMyAdmin自動登錄

2020-09-18 19:30:35
字體:
來源:轉載
供稿:網友

一、需求

自動登錄 phpMyAdmin,最終能夠解決自動登錄所有使用 Basic Auth 方式認證的網頁.

二、phpMyAdmin 的四種認證登陸方式

1.config 配置文件。直接將允許登錄的用戶名和密碼寫在 config.inc.php 配置文件中。

2.cookie。最常用的方式,通過填寫首頁表單進行登錄。

3.http。HTTP Basic Authentication 方式,使用瀏覽器的彈出式對話框進行登錄。與 cookie 方式的區別主要在于用戶體驗。

4.signon。單點登錄,適用于系統集成。用戶登錄了某系統后,不必再輸用戶名密碼即可以一鍵登錄 phpMyAdmin。

參考:http://wiki.phpmyadmin.net/pma/Auth_types

按道理 signon 方式應該是滿足需求的首選方案,只不過項目開發總是有妥協和遷就,要盡量少干預現有系統的運行。另外,在實現 signon 方式登錄的同時,還需要保留原有的用戶輸用戶名密碼的登錄方式,即備用登錄方案。這就將問題復雜化了。

三、什么是 Basic Auth

現有系統使用了 Basic Auth 方式,于是我研究了怎樣能夠在這種情況下也一鍵登錄,在訪問一個需要 HTTP Basic Authentication 的 URL 時,如果你沒有提供用戶名和密碼,服務器就會返回 401,這時瀏覽器會提示你輸入用戶名和密碼,例子如下:

  1. <?php 
  2. if (!isset($_SERVER['PHP_AUTH_USER'])) { 
  3.     header('WWW-Authenticate: Basic realm="My Realm"'); 
  4.     header('HTTP/1.1 401 Unauthorized'); 
  5. else {//開源代碼Cuoxin.com 
  6.     echo "<p>Hello {$_SERVER['PHP_AUTH_USER']}.</p>"
  7.     echo "<p>You entered {$_SERVER['PHP_AUTH_PW']} as your password.</p>"
  8. ?> 

保存為login.php,瀏覽 http://localhost/login.php 查看效果.

瀏覽器Basic Auth:IE9和Chrome的彈出式認證對話框,在瀏覽器彈出的窗口中輸入用戶名密碼,如果使用 Chrome 開發者工具(或者 Firebug)查看,會發現其實它只是多發送了一個類似下面的請求頭:

Authorization: Basic bXlfdXNlcm5hbWU6bXlfcGFzc3dvcmQ=

四、Basic Auth 認證的自動登錄解決方案

要想通過認證,原則上有 2 種方法

•一是在請求頭中添加 Authorization(可用 Javascript 來實現):

Authorization: “Basic 用戶名和密碼的base64加密字符串”

•二是在 url 中添加用戶名和密碼(IE 不支持):

http://username:password@domain.com/login.php

用 js 添加請求頭可以使用 XMLHttpRequest,實現代碼如下:

  1. <html> 
  2. <head> 
  3. <title>login</title> 
  4. <script> 
  5. function login() { 
  6.     var username = document.getElementById("username").value; 
  7.     var password = document.getElementById("password").value; 
  8.  
  9.     xhr = new XMLHttpRequest(); 
  10.     xhr.open("POST""http://localhost/login.php"false, username, password); 
  11.     xhr.send(null); 
  12.  
  13.     return xhr.status == 200; 
  14. </script> 
  15. </head> 
  16. <body> 
  17. <form action="http://localhost/login.php" method="post" onsubmit="return login();"
  18.     <fieldset> 
  19.     <legend>Login</legend> 
  20.     <label for="username">username:</label> 
  21.     <input type="text" id="username" name="username"
  22.  
  23.     <label for="password">password:</label> 
  24.     <input type="password" id="password" name="password"
  25.  
  26.     <input type="submit" value="subject"
  27.     </fieldset> 
  28. </form> 
  29. </body> 
  30. </html> 

Basic Auth 認證的自動登錄解決方案,總結下——

1、用戶名密碼直接寫在 URL 里。

缺點:不夠安全,且 IE 不支持。

2、寫一個登陸表單,php 將用戶名密碼填到表單中,然后頁面 onload 時 js 生成 Authorization 請求頭提交.

缺點:本系統和 phpMyAdmin 必須在同一個域,例如本系統在 admin.Cuoxin.com,而 phpMyAdmin 在 phpmyadmin.domain.com 這種情況 js 是無法跨域提交的。

3、本系統將用戶名密碼 post 到 phpMyAdmin 所在域的一個表單,那個表單再拿來用 js 登陸.

缺點:需要到 phpMyAdmin 所在域新增一個頁面實現跨域.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
金玫玫床戏