前一陣子CSDN密碼被爆到網上,之後又是接二連三的各種帳號密碼泄露事件,不得不讓人對互連網的安全做出深思。
雖然這個跟今天要說的內容關係不是很大,但是網路安全確實是一個不容忽視的問題。
下面要說的就是如何讓訪客登入網站輸入密碼之後,進行傳輸更加安全。
在說明這種方法的具體實現方案之前,不得不分析一下普通的解決方案,和目前常用的解決方案。
1.普通方案
一 般的網站採用的方式是將使用者的帳號密碼直接通過POST請求發送到伺服器,這種方法是最傳統最原始的實現方法。這種方法的安全性一般,如果資料在 傳送過程中被惡意截獲,則POST的資料可以直接反向解析出來。尤其是在使用一些Proxy 伺服器登入網站的環境,這種方案非常不安全。Proxy 伺服器可以截獲 POST資料,然後將其中的帳號密碼提取出來,如果再建立一個資料庫,儲存一下,就是很簡單的事情了。
2.進階方案
一 些網站管理員看到了第一種方案的不足之處,也對使用者賬戶密碼的安全性有所擔憂,因此採用了一種雙步驟驗證的方式。將使用者的帳號和密碼串連取MD5, 然後存到資料庫。其實我感覺這種方法並未從根本上解決資料轉送過程中被截取的問題。只是在伺服器端的安全性提高了一些,然而如果資料在POST提交的過程 中被截取,照樣是可以欺騙伺服器的完成登入認證的。所以這種方法沒有解決資料轉送過程中被截取的問題。
3.加密方案
加密方案,也就是今天要說的解決方案。之前跟一些人討論過這個問題,對於一些小型的網站來說,其實沒必要使用這麼複雜的解決方案,因為這個不僅耗費時間去思考這個問題,就算是寫出來了每次使用者登入認證的時候伺服器所要做的計算量是巨大的,與網站的總體開銷來說得不償失。
下面就來說一下這種方案的具體實現方法。
必備知識:
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私密金鑰進行解密,得到解密之後的資料。
下面是整個流程的實現,僅供參考
上述方法給出的是一種基於我個人的一種解決方案,適合範圍需要大家自己做一下考慮。
文章原創,轉載請註明出處。歡迎各位前來交流!