安全與加密

無論是開發 Web 應用的開發者還是企圖利用 Web 應用漏洞的攻擊者,對於 Web 程式安全這個話題都給予了越來越多的關注。特別是最近 CSDN 密碼洩露事件,更是讓我們對 Web 安全這個話題更加重視,所有人都談密碼色變,都開始檢測自己的系統是否存在漏洞。那麼我們作為一名 Go 程式的開發者,一定也需要知道我們的應用程式隨時會成為眾多攻擊者的目標,並提前做好防範的準備。

很多 Web 應用程式中的安全問題都是由於輕信了第三方提供的資料造成的。比如對於使用者的輸入資料,在對其進行驗證之前都應該將其視為不安全的資料。如果直接把這些不安全的資料輸出到客戶端,就可能造成跨站指令碼攻擊(XSS)的問題。如果把不安全的資料用於資料庫查詢,那麼就可能造成 SQL 注入問題,我們將會在 9.3、9.4 小節介紹如何避免這些問題。

在使用第三方提供的資料,包括使用者提供的資料時,首先檢驗這些資料的合法性非常重要,這個過程叫做過濾,我們將在 9.2 小節介紹如何保證對所有輸入的資料進行過濾處理。

過濾輸入和轉義輸出並不能解決所有的安全問題,我們將會在 9.1 講解的 CSRF 攻擊,會導致受騙者傳送攻擊者指定的請求從而造成一些破壞。

與安全加密相關的,能夠增強我們的 Web 應用程式的強大手段就是加密,CSDN 洩密事件就是因為密碼儲存的是明文,使得攻擊拿手函式庫之後就可以直接實施一些破壞行為了。不過,和其他工具一樣,加密手段也必須運用得當。我們將在 9.5 小節介紹如何儲存密碼,如何讓密碼儲存的安全。

加密的本質就是擾亂資料,某些不可還原的資料擾亂我們稱為單向加密或者雜湊演算法。另外還有一種雙向加密方式,也就是可以對加密後的資料進行解密。我們將會在 9.6 小節介紹如何實現這種雙向加密方式。

目錄

Last updated