Web 安全簡明入門指南
本文轉載自微信公眾號“前端先鋒”(jingchengyideng)。
Web 安全已經是 Web 開發中一個重要的組成部分,而許多程序猿往往希望專注于程序的實現,而忽略了信息安全的實質。如果沒有嚴謹地考慮到信息安全問題,等出了亂子之后反而會造成更嚴重的損失。所以要在開發網絡應用時更注重 Web 安全,甚至努力成為一個白帽子黑客。
常見 Web 信息安全
一般來說 Web 安全需要符合三點安全要素:
- 保密性:通過加密等方法確保數據的保密性
- 完整性:要求用戶取得的資料是完整而不可被篡改的
- 可用性:保證網站服務的持續可訪問性
以下是常見的影響 Web 安全的攻擊手段:
1. SQL注入
使用惡意的 SQL 語法去影響數據庫內容:
- // “--” 是 SQL 語句的注釋符號
- /user/profile?id=1";DROP TABLE user--
- SELECT * FROM USER WHERE id = "1"; DROP TABLE user--
用戶登錄:
- // password" AND 11=1--
- SELECT * FROM USER WHERE username = "Mark"; AND 11=1-- AND PASSWORD="1234"
簡單的防范手段:不信任用戶輸入的數據,確保用戶輸入必須經過檢查,目前許多成熟的 Web 框架都支持ORM 服務,大部分都基本防范了 SQL 注入。
2. XSS(Cross-Site Scripting)
XSS 也很容易將惡意代碼植入到網頁,讓看到網頁的用戶受到干擾,常見的重災區包括BBS、留言板等。實際上 XSS 的概念很簡單,通過表單輸入建立一些惡意網址、惡意圖片網址或把 JavsScript 代碼注入到 HTML中,當用戶瀏覽頁面時就會被觸發。
- <IMG SRC=""onerror="alert('XSS')">
簡易的防范手段方式:不信任用戶輸入的任何資料,將所有輸入內容編碼并過濾。
3. CSRF
CSRF 跨站請求偽造又被稱為 one-click attack 或者 session riding,通常縮寫為CSRF 或 XSRF。在已登錄的 Web 應用上執行非本意的操作的攻擊方法。
舉一個例子:假如一家銀行執行轉帳操作的 URL 地址如下:
http://www.examplebank.com/withdraw?account=AccoutName&amount=10000&for=PayeeName
那么,一個惡意攻擊者可以在另一個網站上放置如下代碼:
- <img src="http://www.examplebank.com/withdraw?account=Mark&amount=10000&for=Bob">
如果用戶的登錄信息尚未過期的話,就會損失 10000 元。
簡單的防范手段:
(1) 檢查 Referer 頭字段
這是比較基本的驗證方式,通常 HTTP 頭中有一個 Referer 字段,它的值應該和請求位置在同一個域下,因此可以通過驗證網址是否相同來驗證是不是惡意請求,但是有被偽造的可能。
(2) 添加驗證 token
現在許多 Web 框架都提供在表單加入由服務器生成的隨機驗證 CSRF 的代碼,可以輔助防止 CSRF 攻擊。
4. DoS
DoS 攻擊具體可以分為兩種形式:帶寬消耗型以及資源消耗型,它們都是通過大量合法或偽造的請求大量消耗網絡以及硬件資源,以達到癱瘓網絡和系統的目的。
帶寬消耗型又分為分布式拒絕服務攻擊和放大攻擊:分布式拒絕服務攻擊的特點是利用僵尸網絡向受害者的服務器發送大量流量,目的在于占用其帶寬。放大攻擊和分布式拒絕服務攻擊類似,是通過惡意放大流量限制受害者系統的帶寬;其特點是利用僵尸網絡通過偽造的源 IP(即攻擊目標)向某些存在漏洞的服務器發送請求,服務器在處理請求后向偽造的源 IP 傳送應答包,由于這些服務的特殊性導致應答包比請求包更大,因此只使用少量的帶寬就可以使服務器器傳送大量的響應到目標主機上。
資源消耗型又分為協議分析攻擊(SYN Flood)、LAND攻擊、CC攻擊、僵尸網絡攻擊,應用程序級洪水攻擊(Application level floods)等。
簡易的防范手段:
- 防火墻 設定規則阻擋簡單攻擊
- 交換機 大多交換機都有限制訪問的控制功能
- 路由器 大多交換機都有限制訪問的控制功能
- 黑洞啟動 將請求轉發到不存在的位置
5. 文件上傳漏洞
許多 web 應用都允許用戶把文件上傳到服務器,由于我們不知道用戶會上傳什么類型的文件,如果不加注意的話就會引發很大的問題。
簡單的防范手段:
(1) 阻止非法文件上傳
- 設定文件名白名單
- 判斷文件標頭
(2) 阻止非法文件執行
- 存儲目錄與 Web 應用分離
- 存儲目錄無執行權限
- 文件重命名
- 圖片壓縮
(3) 加密安全
6. 加密安全
大多數網站都會提供會員注冊的功能,要注意不要將密碼的明文存入數據庫。要如果你所登陸的網站在你忘記密碼時,取回口令的功能會把密碼明文發到你的郵箱,那么這個網站十有八九是沒有做加密或者是用的是可逆加密算法。這時你的密碼很容易會出現在“我的密碼沒加密”(http://plainpass.com/)這個網站上。不過即使將密碼加密也未必安全,網上存在大量的破解網站(http://www.cmd5.com/),使用彩虹表就可以破解加密的密碼。所以一般會針對不同用戶使用隨機產生的 salt 字符串加鹽只后再進行加密的方式來提高密碼的強健性。
- sha3(salt + gap + password)
簡單的入侵流程:
- 偵查(Reconnaissance) 攻擊者準備攻擊之前進行的調查行為,使用搜索引擎或社工手段尋找目標的相關信息,方便之后的攻擊
- 掃描(Scanning) 掃描目標主機的弱點,獲取服務器操作系統、服務和運行狀況等相關信息
- 獲取權限(Gaining Access) 利用系統弱點獲得服務器權限
- 維護權限(Maintaining Access) 維護當前獲取到的權限,以便日后再次操作
- 清除痕跡(Clearing Tracks) 清除入侵的痕跡
總結
隨著網絡技術的發展,信息安全會越來越重要,當有系統上線時,最好按照《信息安全檢查清單》
(https://github.com/FallibleInc/security-guide-for-developers/blob/master/security-checklist.md)檢查一下有哪些安全事項是被你忽略掉的。