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