使用PHP實現身份驗證的集中方法
阿新 • • 發佈:2019-01-26
1、簡單身份驗證
可以使用MySQL來改進原有的身份驗證機制,將使用者名稱和密碼(以SHA-1雜湊演算法1加密)資料儲存在MySQL資料庫中;<?php /* 提供簡單的身份驗證機制的PHP和HTML * 可以將該指令碼的HTML部分獨立寫在一個HYML檔案上面,以方便用css和script對其進行再加工 */ $name = $_POST['name']; $password = $_POST['password']; //當$name和$password沒有輸入完全時,顯示html表單重新鍵入值 if(!isset($name) || !isset($password)) { ?> <h1>Please Log In</h1> <p>This page is secret</p> <form method="post" action="secret.php"> <p>UseraName:<input type="text" name="name" /></p> <p>Password:<input type="password" name="password" /></p> <p><input type="submit" name="submit" value="Log In" /></p> </form> <?php }else if(($name == "user") && ($password == "pass")) { echo "<h1>Here it is!</h1><p>I bey you are glad you can see this sercet page</p>"; }else{ echo "<h1>Go Away!</h1><p>You are not authorized to use this source</p>"; } ?>
2、使用MySQL資料庫儲存使用者密碼資料,同時對密碼使用SHA-1演算法加密
<?php $name = $_POST['name']; $password = $_POST['password']; if(!isset($name) || !isset($password)){ ?> <h1>Please Log In</h1> <p>This page is secret</p> <form method="post" action="secretdb.php"> <p>UseraName:<input type="text" name="name" /></p> <p>Password:<input type="password" name="password" /></p> <p><input type="submit" name="submit" value="Log In" /></p> </form> <?php }else{ //連線mysql資料庫,並測試連線情況 $mysql = mysqli_connect("localhost","webauth","webauth"); if(!$mysql){ echo "Cannot connect to database."; exit; } //尋找需要的資料庫auth $selected = mysqli_select_db($mysql,"auth"); if(!$selected){ echo "Cannot select database."; exit; } //對auth資料庫進行查詢操作,使用count()函式對查詢到的結果進行計數 $query = "select count(*) from authorized_users where name = '".$name."' and password = sha1( '".$password."') "; //使用sha1演算法對password進行加密; $result = mysqli_query($mysql,$query); if(!$result){ echo "Cannot run away"; exit; } $row = mysqli_fetch_row($result); //將查詢結果包裝為一個數組 $count = $row[0]; if($count>0){ echo "<h1>Here it is!</h1><p>I bey you are glad you can see this sercet page</p>"; }else{ echo "<h1>Go Away!</h1><p>You are not authorized to use this source</p>"; } } ?>
3、使用基本身份驗證
(1)HTTP的基本身份驗證:瀏覽器可以儲存使用者在站點輸入的身份驗證資訊,只要使用者重新開啟該站點視窗,它會自動將這些所需的資訊重新發送到Web伺服器而無需使用者介入; (2)HTT P1.1的摘要身份驗證:使用MD5演算法掩飾細節,但是對早期瀏覽器的支援性較差 (3)HTTP基本身份驗證的方法:PHP方法、Apache方法(《PHP和MySQL Web開發》p301); PHP方法<?php /*php觸發http基本身份驗證 * */ //當使用IIS時候,要設定$_SERVER['PHP_AUTH_USER']和$_SERVER['PHP_AUTH_PW'] if((substr($_SERVER['SERVER_SOFTWARE'],0,9) == 'Microsoft') && (!isset($_SERVER['PHP_AUTH_USER'])) && (!isset($_SERVER['PHP_AUTH_PW'])) && (substr($_SERVER['HTTP_AUTHORIZATION'],0,6)=='Basic')){ list($_SERVER['PHP_AUTH_USER'],$_SERVER['PHP_AUTH_PW']) = explode(':',base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'],6))); } if(($_SERVER['PHP_AUTH_USER'] != 'user') || ($_SERVER['PHP_AUTH_PW'] != 'pass')){ header('WWW-Authenticate:Basic realm="Realm-Name"'); if(substr($_SERVER['SERVER_SOFTWARE'],0,9) == 'Microsoft'){ header('Status:401 Unauthorized'); }else{ header('HTTP/1.0 401 Unauthorized'); } echo "<h1>Go Away!</h1><p>You are not authorized to use this source</p>"; }else{ echo "<h1>Here it is!</h1><p>I bey you are glad you can see this sercet page</p>"; } ?>
4、建立供secretdb.php使用者身份驗證所使用的資料庫
# create database auth;
#使用資料庫
use auth;
#建立表(定義欄位名和格式)
create table authorized_users(name varchar(20),
password varchar(40), #使用SHA-1加密後的字串一般是40位
primary key (name)); #設定主鍵name
#插入行資料
insert into authorized_users values('user1',sha1('pass1')); #使用sha1函式對password欄位進行加密
insert into authorized_users values('user2',sha1('pass2'));
#對資料庫使用者進行授權
grant select on auth.*
to 'webauth'
identified by 'webauth';
flush privileges; #更新許可權