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