閱讀目錄
- 一、前言
- 二、主動攻擊
- 三、被動攻擊
- 四、我們能做什么?
回到頂部
一、前言
HTTP 協(xié)議具有無狀態(tài)、不連接、盡最大努力的特點(diǎn),對于 Web 網(wǎng)站的攻擊基本也是針對 HTTP 協(xié)議的這些特點(diǎn)進(jìn)行的。比如無狀態(tài)的特點(diǎn),就要求開發(fā)者需要自行設(shè)計開發(fā)"認(rèn)證"和"會話管理"功能來滿足 Web 應(yīng)用的安全,而形形色色的自行實(shí)現(xiàn),也為用戶會話劫持、SQL 注入等攻擊埋下了風(fēng)險;而不連接的特點(diǎn)表示客戶端可以肆意的修改 HTTP 的請求內(nèi)容,而服務(wù)端可能會接收到與預(yù)期數(shù)據(jù)不相同的內(nèi)容。
Web 漏洞中,邏輯漏洞占比最大,邏輯漏洞是指由于程序邏輯不嚴(yán)或邏輯太復(fù)雜,導(dǎo)致一些邏輯不能夠正常處理或處理錯誤,一般出現(xiàn)在支付金額、越權(quán)訪問、信息查詢、登陸認(rèn)證等地方。邏輯漏洞很大的一部分原因是因?yàn)閷Υa的不夠認(rèn)真和對客戶的過于信任,比如返回數(shù)據(jù)中包含用戶敏感信息、登錄認(rèn)證存在撞庫風(fēng)險等
技術(shù)漏洞攻擊指的是用戶通過一定的技術(shù)手段,利用攻擊代碼達(dá)到自己非法獲取信息、身份偽裝等目的。技術(shù)漏洞攻擊可以分為主動攻擊和被動攻擊。
主動攻擊(active attack)是指攻擊者通過直接訪問 Web 應(yīng)用,把攻擊代碼植入的攻擊模式。具有代表性的攻擊是 SQL 注入攻擊和 OS 命令注入攻擊。
被動攻擊(passive attack)是指利用圈套策略執(zhí)行攻擊代碼的攻擊模式,比如利用釣魚網(wǎng)站誘使用戶點(diǎn)擊等。具有代表性的攻擊是跨站腳本攻擊(XSS)和跨站點(diǎn)請求偽造(CSRF)。
回到頂部
二、主動攻擊
1. SQL 注入
SQL注入(SQL Injection) 是指針對 Web 應(yīng)用使用的數(shù)據(jù)庫,通過運(yùn)行非法的 SQL 而產(chǎn)生的攻擊。簡單點(diǎn)來說,就是通過表單輸入的內(nèi)容,誘使服務(wù)器拼接成一個非法的 SQL。比如有一個正常的 SQL 語句如下:
SELECT * FROM user WHERE name='張三' and password = '123456'
正常情況下,用戶輸入用戶名“張三”和密碼“123456”(正常來說,密碼要 MD5 加密處理)完成認(rèn)證過程。
假設(shè)用戶名輸入的用戶名是“張三'--”,我們來看看 SQL 會變成啥樣?SQL 語句中的 -- 之后全視為注釋,用戶就成功繞過了認(rèn)證。
SELECT * FROM user WHERE name='張三'--' and password = '666666'
常見的預(yù)防 SQL 注入的手段就是 SQL 語句預(yù)編譯處理。
2. OS 命令注入攻擊
OS 命令注入攻擊(OS Command Injection)是指通過 Web 應(yīng)用,執(zhí)行非法的操作系統(tǒng)命令達(dá)到攻擊的目的。OS 命令注入攻擊可以向 Shell 發(fā)送命令,讓 windows 或 linux 操作系統(tǒng)的命令行啟動程序。也就是說,通過 OS 注入攻擊可執(zhí)行 OS 上安裝著的各種程序。
OS 命令注入和 SQL 注入類似,SQL 注入偽造的是非法 SQL,OS 命令注入偽造的是非法 shell 命令。
常見的預(yù)防 OS 注入的手段是對 shell 執(zhí)行的符號進(jìn)行轉(zhuǎn)碼替換(比如 &&、&、| 等)。
3. Dos 攻擊
DoS 攻擊(Denial of Service attack)是一種讓運(yùn)行中的服務(wù)呈停止?fàn)顟B(tài)的攻擊。有時也叫做服務(wù)停止攻擊或拒絕服務(wù)攻擊。DoS 攻擊的對象不僅限于 Web 網(wǎng)站,還包括網(wǎng)絡(luò)設(shè)備及服務(wù)器等。
Dos 攻擊簡單點(diǎn)理解就是發(fā)送大量的合法請求,造成服務(wù)器資源過載耗盡,從而使服務(wù)器停止服務(wù)。(由于服務(wù)器很難分辨何為正常請求,何為攻擊請求,因此很難防止 DoS 攻擊。)
Dos 攻擊還可通過攻擊安全漏洞使服務(wù)停止。
回到頂部
三、被動攻擊
1. XSS 攻擊
跨站腳本攻擊(Cross-Site Scripting, XSS)是指通過在用戶的瀏覽器內(nèi)運(yùn)行非法的 html 標(biāo)簽或 JAVAScript 向存在安全漏洞的 Web 網(wǎng)站進(jìn)行的一種攻擊。攻擊者編寫腳本設(shè)下陷阱,用戶在自己的瀏覽器上運(yùn)行時,一不小心就會受到被動攻擊。
常見的 XSS 攻擊比如虛假輸入表單騙取用戶個人信息、竊取用戶 Cookie 發(fā)送惡意請求 等。
常見的預(yù)防 XSS 攻擊的手段比如對 HTML 標(biāo)簽、JavaScript 進(jìn)行轉(zhuǎn)義處理、禁止 JavaScript 讀取 Cookie 等。
2. CSRF 攻擊
跨站點(diǎn)請求偽造(Cross-Site Request Forgeries,CSRF)攻擊是指攻擊者通過設(shè)置好的陷阱,強(qiáng)制對已完成認(rèn)證的用戶進(jìn)行非預(yù)期的個人信息或設(shè)定信息等某些狀態(tài)更新。
常見的預(yù)防 CSRF 攻擊的手段比如:驗(yàn)證 Referer + POST 提交、增加 token 認(rèn)證等。
3. HTTP 首部注入攻擊
HTTP 首部注入攻擊(HTTP Header Injection)是指攻擊者通過在響應(yīng)首部字段內(nèi)插入換行,添加任意響應(yīng)首部或主體的一種攻擊。比如重定向至任意的 URL、替換掉要返回的主體內(nèi)容等。
比如存在某個需要重定向的頁面,本來的 header 信息是這個樣子的:
Location: http://example.com/?cat=101
因?yàn)橹囟ㄏ蛐枰獛Щ貐?shù),攻擊者就誘使用戶在參數(shù)中加入攻擊代碼 —— 加入或替換任意的 header 信息。(下面這個 Location 可能不會生效,不同的瀏覽器對重復(fù)的 header 字段有不同的處理方式)
Location: http://example.com/?cat=101(%0D%0A:換行符)
Location: http://xxx.com
4. 會話劫持攻擊
會話劫持(Session Hijack)攻擊是指攻擊者通過某種手段拿到了用戶的會話 ID,并非法使用此會話 ID 偽裝成用戶,達(dá)到攻擊的目的。
常見的預(yù)防會話劫持的手段比如:將會話 ID 和用戶設(shè)備信息綁定在一起,當(dāng)用戶在其他設(shè)備上使用該會話 ID 時,就會提示被盜用風(fēng)險,要求用戶重新登錄。
回到頂部
四、我們能做什么?
- 輸入值驗(yàn)證。檢查數(shù)值是否符合系統(tǒng)業(yè)務(wù)邏輯或檢查字符編碼,永遠(yuǎn)不要相信用戶的輸入,注意不要依賴客戶端驗(yàn)證,客戶端驗(yàn)證的目的只是為了盡早的辨識輸入錯誤,起到提高 UI 體驗(yàn)的作用(客戶端驗(yàn)證可被修改繞過)。
- 輸出值轉(zhuǎn)義。比如對 HTML 標(biāo)簽、JavaScript 進(jìn)行轉(zhuǎn)義處理再輸出,避免存在攻擊代碼。
- Web 應(yīng)用不直接拋出異常,或謹(jǐn)慎輸出錯誤提示,防止被攻擊者利用。
- 敏感字段,比如密碼,進(jìn)行加 salt 加密處理,防止被暴力破解(比如常見的 彩虹表)。
- 簽名認(rèn)證,防止數(shù)據(jù)被篡改。客戶端設(shè)置簽名,服務(wù)端校驗(yàn)簽名是否正確。
- 禁止開放重定向(Open Redirect)功能,防止被攻擊者選中并用來作為釣魚攻擊的跳板。
- 涉及到登錄口的地方,增加圖形驗(yàn)證碼,防止爆破機(jī)器人。
- 上線前將一些測試接口或后門程序刪除,避免被攻擊者利用。
- 不要將公司代碼傳到公共倉庫。
原文地址:https://www.cnblogs.com/jmcui/p/13204387.html