前一陣子CSDN密碼被爆到網上,之后又是接二連三的各種帳號密碼泄露事件,不得不讓人對互聯網的安全做出深思。
雖然這個跟今天要說的內容關系不是很大,但是網絡安全確實是一個不容忽視的問題。
下面要說的就是如何讓訪客登錄網站輸入密碼之后,進行傳輸更加安全。
在說明這種方法的具體實現方案之前,不得不分析一下普通的解決方案,和目前常用的解決方案。
一 般的網站采用的方式是將用戶的帳號密碼直接通過POST請求發送到服務器,這種方法是最傳統最原始的實現方法。這種方法的安全性一般,如果數據在 傳送過程中被惡意截獲,則POST的數據可以直接反向解析出來。尤其是在使用一些代理服務器登錄網站的環境,這種方案非常不安全。代理服務器可以截獲 POST數據,然后將其中的帳號密碼提取出來,如果再建立一個數據庫,保存一下,就是很簡單的事情了。
一 些網站管理員看到了第一種方案的不足之處,也對用戶賬戶密碼的安全性有所擔憂,因此采用了一種雙重驗證的方式。將用戶的帳號和密碼連接取MD5, 然后存到數據庫。其實我感覺這種方法並未從根本上解決數據傳輸過程中被截取的問題。只是在服務器端的安全性提高了一些,然而如果數據在POST提交的過程 中被截取,照樣是可以欺騙服務器的完成登錄認證的。所以這種方法沒有解決數據傳輸過程中被截取的問題。
加密方案,也就是今天要說的解決方案。之前跟一些人討論過這個問題,對於一些小型的站點來說,其實沒必要使用這么復雜的解決方法,因為這個不僅耗費時間去思考這個問題,就算是寫出來了每次用戶登錄認證的時候服務器所要做的計算量是巨大的,與站點的總體開銷來說得不償失。
下面就來說一下這種方案的具體實現方法。
必備知識:
1.AES和RSA的算法 2.RSA和AES PHP和javascript實現方法 3.AJAX后台交互 4.MD5 javascript加密實現
以上都可以在網上找到現成的代碼,而且比較多,下面只說思路。
首先頁面載入,在捕獲用戶將要輸入重要數據的時候(如onchange事件)執行ajax后台交互向服務器發送請求,請求RSA公鑰。
服務器向客戶端返回RSA公鑰並在服務器端數據庫中對應用戶下保存私鑰
客戶端接收用戶的RSA公鑰並保存到cookies(只要能夠保存到用戶本地就可以)里
當 用戶輸入完畢要傳送的重要數據,如密碼,點擊提交之后,讀取保存到本地cookies里的RSA公鑰,通過客戶端的javascript將用戶的 數據加密,然后通過POST請求發送數據到服務器(如果在安全性要求較高的場合,可以將MD5加密的過程在客戶端通過javascript完成,之后直接 傳輸MD5加密之后的加密數據)。
服務器接收到用戶經過RSA公鑰加密的數據,從數據庫中讀取臨時存儲的RSA私鑰進行解密,得到解密之后的數據。
下面是整個流程的實現示意圖,僅供參考
上述方法給出的是一種基於我個人的一種解決方法,適合范圍需要大家自己做一下考慮。