在開發一個項目的時候,你們常常會忽略項目的安全性問題,有不少的安全性問題其實就是一個意識的問題,解決起來並不複雜,可是由於這些疏忽,卻可能會給咱們的用戶帶來很大的風險。下面就列舉一些在作項目的時候應該考慮的一些安全性問題。
密碼保存
保存密碼的第一準則是不能明文保存密碼,以前CSDN密碼泄露一事還記憶猶新。一般的作法是對密碼進行不可逆加密,加密時不要使用MD5或者SHA系列的算法加密,如今對這兩個算法的破解研究工做已經有了至關的進展。推薦使用bcrypt。
CI服務器的安全性
CI服務器和Build服務器常常是攻擊者最完美的跳板,這些服務器幾乎擁有你係統的全部權限(代碼庫,各個生產環境的訪問權限等等)。請確保其安全。
校驗客戶端安全證書的「指紋」
當使用SSL時,咱們須要驗證安全證書的「指紋」來確認該證書是有目標網站頒發的證書,這能夠有效防止「中間人攻擊」漏洞。
隨機生成密碼
不要對全部帳戶設置同一個密碼,一鍋端就很差了,使用密碼管理軟件爲每個帳戶生成一個獨立的密碼。當前比較推薦的是1Password,期待有更好的密碼管理軟件誕生。
使用安全係數更高的隨機數生成類庫
要想獲得真正的隨機數是很困難的,尤爲是要知足安全領域的隨機數標準,語言自帶的通常隨機數生成算法很難知足須要,因此JDK還提供了SecuredRandom這樣的類,Ruby中也有SecureRandom這樣的模塊。
老是使用HTTPS和HSTS
如無值得信服的理由,全部的請求都應該使用加密協議
不要使用「安全問題」找回密碼
一個桶能裝多少水是有最短的那塊木板決定的,一個安全系統的安全性也是有最薄弱的環節決定的。不要讓安全問題成爲你的那塊短木板。
不要限制密碼長度
經過密碼長度來保證安全性的時代已經結束了,讓用戶使用"Pass Phrases"是一個不錯的主意。
容許對密碼或者密碼短語使用更直觀的複雜度控制
使用更有效,直觀的方法幫助用戶增長密碼或者密碼短語的難度。而不是簡單的必須有大小寫,必須超過8位等這些生硬的條件。
避免緩衝溢出
在弱類型語言中,最多見的安全性問題就是緩衝溢出,這也是最多見的一種遠程攻擊方法,通常有四種防範方法: * 經過操做系統使得緩衝區不可執行,從而阻止攻擊者植入攻擊代碼。 * 寫正確的代碼 * 利用編譯器的邊界檢查來實現緩衝區的保護。 * 在程序指針失效前進行完整性檢查
避免注入攻擊
全部的用戶輸入必須通過驗證和清理才能傳遞給下游,最多見的就是SQL注入攻擊
避免跨站腳本攻擊
系統須要保證用戶不能在頁面中嵌入未經驗證的信息
避免泄露信息給第三方
目前不少系統傾向於泄露信息給第三方,比方說Google,Facebook,新浪微博等等。這些第三方會竊取不少用戶信息。
設置數據清理策略
只在須要數據時才保存數據,數據生命週期結束就清理掉,賊是沒辦法偷你沒有的東西的。算法