|
一、前言 HTTP 協(xié)議具有無狀態(tài)、不連接、盡最大努力的特點(diǎn),對于 Web 網(wǎng)站的攻擊基本也是針對 HTTP 協(xié)議的這些特點(diǎn)進(jìn)行的。比如無狀態(tài)的特點(diǎn),就要求開發(fā)者需要自行設(shè)計(jì)開發(fā)"認(rèn)證"和"會(huì)話管理"功能來滿足 Web 應(yīng)用的安全,而形形色色的自行實(shí)現(xiàn),也為用戶會(huì)話劫持、SQL 注入等攻擊埋下了風(fēng)險(xiǎn);而不連接的特點(diǎn)表示客戶端可以肆意的修改 HTTP 的請求內(nèi)容,而服務(wù)端可能會(huì)接收到與預(yù)期數(shù)據(jù)不相同的內(nèi)容。 Web 漏洞中,邏輯漏洞占比最大,邏輯漏洞是指由于程序邏輯不嚴(yán)或邏輯太復(fù)雜,導(dǎo)致一些邏輯不能夠正常處理或處理錯(cuò)誤,一般出現(xiàn)在支付金額、越權(quán)訪問、信息查詢、登陸認(rèn)證等地方。邏輯漏洞很大的一部分原因是因?yàn)閷Υa的不夠認(rèn)真和對客戶的過于信任,比如返回?cái)?shù)據(jù)中包含用戶敏感信息、登錄認(rèn)證存在撞庫風(fēng)險(xiǎn)等 技術(shù)漏洞攻擊指的是用戶通過一定的技術(shù)手段,利用攻擊代碼達(dá)到自己非法獲取信息、身份偽裝等目的。技術(shù)漏洞攻擊可以分為主動(dòng)攻擊和被動(dòng)攻擊。 主動(dòng)攻擊(active attack)是指攻擊者通過直接訪問 Web 應(yīng)用,把攻擊代碼植入的攻擊模式。具有代表性的攻擊是 SQL 注入攻擊和 OS 命令注入攻擊。 被動(dòng)攻擊(passive attack)是指利用圈套策略執(zhí)行攻擊代碼的攻擊模式,比如利用釣魚網(wǎng)站誘使用戶點(diǎn)擊等。具有代表性的攻擊是跨站腳本攻擊(XSS)和跨站點(diǎn)請求偽造(CSRF)。 二、主動(dòng)攻擊1. SQL 注入SQL注入(SQL Injection) 是指針對 Web 應(yīng)用使用的數(shù)據(jù)庫,通過運(yùn)行非法的 SQL 而產(chǎn)生的攻擊。簡單點(diǎn)來說,就是通過表單輸入的內(nèi)容,誘使服務(wù)器拼接成一個(gè)非法的 SQL。比如有一個(gè)正常的 SQL 語句如下:
正常情況下,用戶輸入用戶名“張三”和密碼“123456”(正常來說,密碼要 MD5 加密處理)完成認(rèn)證過程。 假設(shè)用戶名輸入的用戶名是“張三'--”,我們來看看 SQL 會(huì)變成啥樣?SQL 語句中的 -- 之后全視為注釋,用戶就成功繞過了認(rèn)證。
常見的預(yù)防 SQL 注入的手段就是 SQL 語句預(yù)編譯處理。 2. OS 命令注入攻擊OS 命令注入攻擊(OS Command Injection)是指通過 Web 應(yīng)用,執(zhí)行非法的操作系統(tǒng)命令達(dá)到攻擊的目的。OS 命令注入攻擊可以向 Shell 發(fā)送命令,讓 Windows 或 Linux 操作系統(tǒng)的命令行啟動(dò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)的攻擊。有時(shí)也叫做服務(wù)停止攻擊或拒絕服務(wù)攻擊。DoS 攻擊的對象不僅限于 Web 網(wǎng)站,還包括網(wǎng)絡(luò)設(shè)備及服務(wù)器等。
Dos 攻擊簡單點(diǎn)理解就是發(fā)送大量的合法請求,造成服務(wù)器資源過載耗盡,從而使服務(wù)器停止服務(wù)。(由于服務(wù)器很難分辨何為正常請求,何為攻擊請求,因此很難防止 DoS 攻擊。) Dos 攻擊還可通過攻擊安全漏洞使服務(wù)停止。 三、被動(dòng)攻擊1. XSS 攻擊跨站腳本攻擊(Cross-Site Scripting, XSS)是指通過在用戶的瀏覽器內(nèi)運(yùn)行非法的 HTML 標(biāo)簽或 JavaScript 向存在安全漏洞的 Web 網(wǎng)站進(jìn)行的一種攻擊。攻擊者編寫腳本設(shè)下陷阱,用戶在自己的瀏覽器上運(yùn)行時(shí),一不小心就會(huì)受到被動(dòng)攻擊。 常見的 XSS 攻擊比如虛假輸入表單騙取用戶個(gè)人信息、竊取用戶 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ù)期的個(gè)人信息或設(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)容等。 比如存在某個(gè)需要重定向的頁面,本來的 header 信息是這個(gè)樣子的:
因?yàn)橹囟ㄏ蛐枰獛Щ貐?shù),攻擊者就誘使用戶在參數(shù)中加入攻擊代碼 —— 加入或替換任意的 header 信息。(下面這個(gè) Location 可能不會(huì)生效,不同的瀏覽器對重復(fù)的 header 字段有不同的處理方式) 4. 會(huì)話劫持攻擊會(huì)話劫持(Session Hijack)攻擊是指攻擊者通過某種手段拿到了用戶的會(huì)話 ID,并非法使用此會(huì)話 ID 偽裝成用戶,達(dá)到攻擊的目的。 常見的預(yù)防會(huì)話劫持的手段比如:將會(huì)話 ID 和用戶設(shè)備信息綁定在一起,當(dāng)用戶在其他設(shè)備上使用該會(huì)話 ID 時(shí),就會(huì)提示被盜用風(fēng)險(xiǎn),要求用戶重新登錄。 四、我們能做什么?
|
|
|