在Dremaweaver的「使用者認證」伺服器行為中,對於密碼的欄位僅僅是將其當為一般字串去做處理(應該說沒有任何處理),但我們先想一個問題,若有一個網站規模不算小,站上也有自個的會員系統,當然我們在註冊時會填上許多基本資料如姓名、性別、電子郵件、密碼等,而一般人通常都是一個密碼走遍天下,也就是說當我們註冊之後,若該站管理員心懷不軌很有可能就可以由資料庫中,觀察使用者留下的註冊資訊進而得知註冊者的信箱及密碼,如果是你你會放心隨便註冊嗎?
也就因為如此,一般我們都會將如密碼之類的資訊經過編碼後再存入資料庫或檔案中,MD5就是一種常用的單向不可逆加密演算法,他可以將任意字串編碼成128Bit長度的暗碼(32個字元分別為0~F),所以就算是資料庫被入侵也不用擔心所有會員的密碼會在一夕之間密碼皆外流(除非他很閒一個一個都用暴力破解去算)。
先來看一個簡單的範例,範例中將cttlee這個字串編碼過即變成下面那串長長的碼
這是一般Dreamweaver使用者及書籍用來儲存帳號密碼的方式,密碼欄位未經過編碼(明碼)即存入資料庫中。
下面則是phpBB套件使用的方式
註冊頁面
接下來便步入正題,在「使用者認證」的伺服器行為中有四個項目,分別為「登入使用者」「登出使用者」「限制存取頁面」「檢查新使用者名稱」,我們需要手動更改程式碼的僅有「登入使用者」、用來註冊的頁面,下面便是一個範例網頁。
簡單的拉幾個元件後便可以做「插入記錄」伺服器行為用來做「註冊新使用者」用。
在預設的行為中,Dreamweaver的程式碼會將「使用者名稱」「密碼」兩個欄位的字串直接就丟入資料庫中指定欄位裡,因此這時候我們便需要對原始的程式碼做一些修改,找到代表著新增使用者名稱、密碼部分的SQL敘述式,我們可以看到password欄位值的來源是$_POST[‘Pass’](密碼部分文字欄位的命名),我們只要依照下圖中反白的地方做程式碼的修改即完成了「將密碼編碼過後再存進資料庫」。
下面是完成註冊頁面後新增一筆帳號密碼皆為cttlee的資料,於phpMyAdmin中觀察到的情形,我們可以看到password欄位存進的為一筆32個字元的字串。
登入頁面
註冊頁面處理完後接著便要來處理登入頁面,由於預設的伺服器行為只是很單純的將資料庫欄位內的值與登入頁面密碼欄位輸入值拿來直接比對,所以如果照我們剛剛使用者名稱、密碼都輸入cttlee存入資料庫裡的情形,如果在登入頁不做處理那就變成需要輸入「使用者名稱:cttlee」、「密碼:93c5737b9fe1de4c27a52993fc3f9275」這樣才能成功登入(因為這才和資料庫中記錄的字串相同),我的老天爺呀!
不囉說,來看要怎麼處理,下面便是範例的登入頁面。
在網頁下方我們輸入一段程式碼來判斷使用者是否已經成功登入,若是則顯示登入者名稱。(什麼,看不懂?!那你該先去看另一篇:解析Dreamwaever MX 2004 伺服器行為 -「使用者驗證」 = =")
沒問題以後就直接做「登入使用者」伺服器行為了。
因為在這邊我們不可能要求使用者輸入經md5編碼過後的字串來讓程式判斷密碼是否正確,因此在這邊解決的方法是將使用者在登入頁面中所輸入的密碼(命名為Pass的文字欄位),將由文字欄位取得的值先做過編碼後(如圖中反白之第14列做修改)再讓他去跟資料庫中已經編碼過的值做比對。
大功告成,馬上可以來測試
一定對的啦!你瞧這不是可以登入了!
Cttlee 2004/08/10 PM 20:13

你好,如果今天使用者登入後要修改個人資料中的密碼
其方法是否也是用比對的驗証方法呢?不太懂