滲透測(cè)試技術(shù) 課件 第5章-5.3-XSS攻擊_第1頁(yè)
滲透測(cè)試技術(shù) 課件 第5章-5.3-XSS攻擊_第2頁(yè)
滲透測(cè)試技術(shù) 課件 第5章-5.3-XSS攻擊_第3頁(yè)
滲透測(cè)試技術(shù) 課件 第5章-5.3-XSS攻擊_第4頁(yè)
滲透測(cè)試技術(shù) 課件 第5章-5.3-XSS攻擊_第5頁(yè)
已閱讀5頁(yè),還剩62頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

XSS攻擊跨站腳本攻擊(CrossSiteScripting),為不和層疊樣式表(CascadingStyleSheets,CSS)的縮寫混淆。故將跨站腳本攻擊縮寫為XSS。2017年在OWASP(openwebapplicationsecurityproject)評(píng)為十大安全漏洞中的第七威脅漏洞。也有黑客把XSS當(dāng)做新型的“緩沖區(qū)溢出攻擊”,而JavaScript是新型的shellcode。前言目錄/CONTENTSXSS攻擊原理XSS攻擊分類XSS攻擊防御XSS攻擊實(shí)踐跨站點(diǎn)腳本(也稱為XSS)是一種Web安全漏洞,允許攻擊者破壞用戶與易受攻擊的應(yīng)用程序的交互。它允許攻擊者繞過旨在將不同網(wǎng)站彼此隔離的同源策略??缯军c(diǎn)腳本漏洞通常允許攻擊者偽裝成受害者用戶,執(zhí)行用戶能夠執(zhí)行的任何操作,并訪問用戶的任何數(shù)據(jù)。如果受害者用戶在應(yīng)用程序中擁有特權(quán)訪問權(quán)限,那么攻擊者可能能夠完全控制應(yīng)用程序的所有功能和數(shù)據(jù)。跨站腳本攻擊簡(jiǎn)介跨站點(diǎn)腳本通過操縱易受攻擊的網(wǎng)站來(lái)工作,以便將惡意JavaScript返回給用戶。當(dāng)惡意代碼在受害者的瀏覽器中執(zhí)行時(shí),攻擊者可以完全破壞他們與應(yīng)用程序的交互。XSS工作原理假設(shè)一個(gè)網(wǎng)站有一個(gè)搜索功能,接收用戶在URL參數(shù)中提供的搜索詞:/search?term=gift假設(shè)應(yīng)用程序不執(zhí)行任何其他數(shù)據(jù)處理,攻擊者可以構(gòu)建如下攻擊:/search?term=<script>alert(/xss/)</script>如果應(yīng)用程序的另一個(gè)用戶請(qǐng)求攻擊者的URL,那么攻擊者提供的腳本將在受害者用戶的瀏覽器中執(zhí)行。XSS攻擊XSS概念證明你通過注入一個(gè)有效載荷來(lái)確認(rèn)大多數(shù)類型的XSS漏洞,該載荷會(huì)導(dǎo)致你自己的瀏覽器執(zhí)行一些任意的JavaScript。長(zhǎng)期以來(lái)alert(),例如:payload:<script>alert("xss")</script><script>prompt(1)</script>

利用跨站點(diǎn)腳本漏洞的攻擊者通常能夠:冒充或偽裝成受害者用戶。執(zhí)行用戶能夠執(zhí)行的任何操作。讀取用戶能夠訪問的任何數(shù)據(jù)。捕獲用戶的登錄憑據(jù)。對(duì)網(wǎng)站進(jìn)行虛擬篡改。將特洛伊木馬功能注入網(wǎng)站。XSS攻擊危害通常出現(xiàn)XSS漏洞的地方:微博、留言板、聊天室等等收集用戶輸入的地方,都有遭受XSS的風(fēng)險(xiǎn),只要沒有對(duì)用戶的輸入進(jìn)行嚴(yán)格過濾,就會(huì)被XSS。XSS漏洞挖掘目錄/CONTENTSXSS攻擊原理XSS攻擊分類XSS攻擊防御XSS攻擊實(shí)踐XSS攻擊主要分為三種類型:反射型XSS,其中惡意腳本來(lái)自當(dāng)前的HTTP請(qǐng)求。存儲(chǔ)的XSS,其中惡意腳本來(lái)自網(wǎng)站的數(shù)據(jù)庫(kù)?;贒OM的XSS,該漏洞存在于客戶端代碼而不是服務(wù)器端代碼中。XSS攻擊類型當(dāng)應(yīng)用程序在HTTP請(qǐng)求中接收數(shù)據(jù)并以不安全的方式在即時(shí)響應(yīng)中包含該數(shù)據(jù)時(shí),就會(huì)出現(xiàn)反射跨站點(diǎn)腳本(或XSS)。假設(shè)一個(gè)網(wǎng)站有一個(gè)搜索功能,它接收用戶在URL參數(shù)中提供的搜索詞:/search?term=gift應(yīng)用程序在對(duì)此URL的響應(yīng)中回顯所提供的搜索詞:<p>Yousearchedfor:gift</p>假設(shè)應(yīng)用程序不執(zhí)行任何其他數(shù)據(jù)處理,攻擊者可以構(gòu)建如下攻擊:/search?term=<script>/*+Bad+stuff+here...+*/</script>反射型XSS此URL會(huì)產(chǎn)生以下響應(yīng):<p>Yousearchedfor:<script>/*Badstuffhere...*/</script></p>如果應(yīng)用程序的另一個(gè)用戶請(qǐng)求攻擊者的URL,那么攻擊者提供的腳本將在受害者用戶的瀏覽器中,在他們與應(yīng)用程序的會(huì)話上下文中執(zhí)行。反射型XSS反射型XSS攻擊步驟用戶攻擊者攻擊者的web服務(wù)器被攻擊的web服務(wù)器1、登錄2、發(fā)送攻擊url(含攻擊js)3、訪問攻擊url4、對(duì)攻擊js回應(yīng)5、發(fā)送會(huì)話信息6、獲取會(huì)話信息7、劫持用戶會(huì)話圖示是反射型XSS的攻擊示意圖,序號(hào)是攻擊順序。反射型XSS需要誘騙用戶進(jìn)行點(diǎn)擊。而存儲(chǔ)型,攻擊者已經(jīng)通過XSS漏洞(基本為輸入框)將惡意腳本放入數(shù)據(jù)庫(kù)中,只要每次瀏覽這個(gè)網(wǎng)頁(yè)就會(huì)觸發(fā)惡意腳本。如果攻擊者可以控制在受害者瀏覽器中執(zhí)行的腳本,那么他們通??梢酝耆:υ撚脩?。除其他外,攻擊者可以:在應(yīng)用程序中執(zhí)行用戶可以執(zhí)行的任何操作。查看用戶能夠查看的任何信息。修改用戶能夠修改的任何信息。發(fā)起與其他應(yīng)用程序用戶的交互,包括惡意攻擊。反射型XSS攻擊的影響使用BurpSuite的Web漏洞掃描器可以快速可靠地找到絕大多數(shù)反映的跨站點(diǎn)腳本漏洞。手動(dòng)測(cè)試反射型XSS漏洞涉及以下步驟:測(cè)試每個(gè)入口點(diǎn)。分別測(cè)試應(yīng)用程序HTTP請(qǐng)求中數(shù)據(jù)的每個(gè)入口點(diǎn)。這包括URL查詢字符串和消息正文中的參數(shù)或其他數(shù)據(jù),以及URL文件路徑。它還包括HTTP標(biāo)頭,盡管只能通過某些HTTP標(biāo)頭觸發(fā)的類似XSS的行為在實(shí)踐中可能無(wú)法利用。確定反射上下文。對(duì)于響應(yīng)中反映隨機(jī)值的每個(gè)位置,確定其上下文。這可能在HTML標(biāo)簽之間的文本中,在可能被引用的標(biāo)簽屬性中,在JavaScript字符串中等。反射型XSS漏洞挖掘測(cè)試候選有效載荷。根據(jù)反射的上下文,測(cè)試初始候選XSS負(fù)載,如果它在響應(yīng)中未修改地反射,則將觸發(fā)JavaScript執(zhí)行。測(cè)試替代有效載荷。如果候選XSS負(fù)載被應(yīng)用程序修改,或完全被阻止,那么您將需要根據(jù)反射的上下文和正在執(zhí)行的輸入驗(yàn)證類型來(lái)測(cè)試可能會(huì)提供有效XSS攻擊的替代負(fù)載和技術(shù)。在瀏覽器中測(cè)試攻擊。最后,如果你成功找到了一個(gè)看似在BurpRepeater中工作的有效載荷,將攻擊轉(zhuǎn)移到一個(gè)真實(shí)的瀏覽器(通過將URL粘貼到地址欄中,或者通過在BurpProxy的攔截視圖中修改請(qǐng)求,看看注入的JavaScript確實(shí)被執(zhí)行了。反射型XSS漏洞挖掘當(dāng)應(yīng)用程序從不受信任的來(lái)源接收數(shù)據(jù)并以不安全的方式將這些數(shù)據(jù)包含在其稍后的HTTP響應(yīng)中時(shí),就會(huì)出現(xiàn)存儲(chǔ)的跨站點(diǎn)腳本(也稱為二階或持久性XSS)。假設(shè)一個(gè)網(wǎng)站允許用戶提交對(duì)博客帖子的評(píng)論,這些評(píng)論會(huì)顯示給其他用戶。用戶使用HTTP請(qǐng)求提交評(píng)論,如下所示:POST/post/commentHTTP/1.1Host:Content-Length:100postId=3&comment=This+post+was+extremely+helpful.&name=Carlos+Montoya&email=carlos%40存儲(chǔ)型XSS提交此評(píng)論后,任何訪問博客文章的用戶都將在應(yīng)用程序的響應(yīng)中收到以下內(nèi)容:<p>Thispostwasextremelyhelpful.</p>存儲(chǔ)型XSS假設(shè)應(yīng)用程序不對(duì)數(shù)據(jù)執(zhí)行任何其他處理,攻擊者可以提交如下惡意評(píng)論:<script>/*Badstuffhere...*/</script>在攻擊者的請(qǐng)求中,此評(píng)論將被URL編碼為:comment=%3Cscript%3E%2F*%2BBad%2Bstuff%2Bhere...%2B*%2F%3C%2Fscript%3E任何訪問博客文章的用戶現(xiàn)在都將在應(yīng)用程序的響應(yīng)中收到以下內(nèi)容:<p><script>/*Badstuffhere...*/</script></p>然后,攻擊者提供的腳本將在受害者用戶的瀏覽器中,在他們與應(yīng)用程序的會(huì)話上下文中執(zhí)行。存儲(chǔ)型XSS存儲(chǔ)型XSS攻擊步驟1、攻擊者提交包含惡意代碼的內(nèi)容2、普通用戶登錄web程序3、用戶瀏覽攻擊者提交的內(nèi)容4、服務(wù)器對(duì)攻擊者的惡意代碼做出回應(yīng)5、攻擊者的惡意代碼在用戶瀏覽器執(zhí)行(證明存在XSS)6、用戶瀏覽器向攻擊者發(fā)送會(huì)話令牌(盜取用戶身份)7、攻擊者劫持回話如果攻擊者可以控制在受害者瀏覽器中執(zhí)行的腳本,那么他們通??梢酝耆:υ撚脩?。攻擊者可以執(zhí)行任何適用于反映的XSS漏洞影響的操作。在可利用性方面,反射型XSS和存儲(chǔ)型XSS之間的主要區(qū)別在于,存儲(chǔ)型XSS漏洞可實(shí)現(xiàn)應(yīng)用程序本身的自包含攻擊。攻擊者不需要找到誘使其他用戶發(fā)出包含其漏洞利用的特定請(qǐng)求的外部方式。相反,攻擊者將他們的漏洞利用放入應(yīng)用程序本身,并簡(jiǎn)單地等待用戶去觸發(fā)它。存儲(chǔ)型XSS攻擊影響許多存儲(chǔ)的XSS漏洞可以使用BurpSuite的網(wǎng)絡(luò)漏洞掃描器找到。手動(dòng)測(cè)試存儲(chǔ)的XSS漏洞可能具有挑戰(zhàn)性。您需要測(cè)試所有相關(guān)的“入口點(diǎn)”,攻擊者可控制的數(shù)據(jù)可以通過這些“入口點(diǎn)”進(jìn)入應(yīng)用程序的處理過程,以及數(shù)據(jù)可能出現(xiàn)在應(yīng)用程序響應(yīng)中的所有“出口點(diǎn)”。存儲(chǔ)型XSS漏洞挖掘申請(qǐng)?zhí)幚淼娜肟邳c(diǎn)包括:·URL查詢字符串和消息正文中的參數(shù)或其他數(shù)據(jù)?!RL文件路徑。·可能無(wú)法利用與反射XSS相關(guān)的HTTP請(qǐng)求標(biāo)頭。·攻擊者可以通過其將數(shù)據(jù)傳送到應(yīng)用程序的任何外帶路由。存在的路由完全取決于應(yīng)用程序?qū)崿F(xiàn)的功能:webmail應(yīng)用程序?qū)⑻幚韽碾娮余]件中收到的數(shù)據(jù);顯示Twitter提要的應(yīng)用程序可能會(huì)處理第三方推文中包含的數(shù)據(jù);新聞聚合器將包含源自其他網(wǎng)站的數(shù)據(jù)等。存儲(chǔ)型XSS漏洞挖掘DOM:全稱DocumentObjectModel,是一個(gè)平臺(tái)和語(yǔ)言都中立的接口,可以使程序和腳本能夠動(dòng)態(tài)訪問和更新文檔的內(nèi)容、結(jié)構(gòu)以及樣式。定義了訪問和操作HTML文檔的標(biāo)準(zhǔn)方法,把HTML文檔呈現(xiàn)帶有元素、屬性、文本的樹狀結(jié)構(gòu)。DOM概念DOM文檔就是一份XML文檔,當(dāng)有了DOM標(biāo)準(zhǔn)之后,DOM便將前端html代碼化為一個(gè)樹狀結(jié)構(gòu),方便程序和腳本能夠輕松的動(dòng)態(tài)訪問和更新這個(gè)樹狀結(jié)構(gòu)的內(nèi)容、結(jié)構(gòu)以及樣式,且不需要經(jīng)過服務(wù)端,所以DOM型xss在js前端自己就可以完成數(shù)據(jù)的輸入輸出,不與服務(wù)器產(chǎn)生交互,這樣來(lái)說(shuō)DOM型xss也可以理解為反射性xss。DOM概念所有的元素都包含在標(biāo)簽中,沒有父輩,也沒有兄弟,所以稱之為樹根。<head>和<body>是html兩個(gè)分支,在同一層,他們的父元素是<html>,他們還存在各自的子元素。最終形成html文檔,在瀏覽器中以特定的形式被我們看到。DOM實(shí)例當(dāng)JavaScript從攻擊者可控制的來(lái)源(例如URL)獲取數(shù)據(jù)并將其傳遞到支持動(dòng)態(tài)代碼執(zhí)行的接收器(例如eval()函數(shù))時(shí),通常會(huì)出現(xiàn)基于DOM的XSS漏洞。這使攻擊者能夠執(zhí)行惡意JavaScript,通常用來(lái)劫持其他用戶的帳戶。要進(jìn)行基于DOM的XSS攻擊,您需要將數(shù)據(jù)放入源中,以便將其傳播到接收器并導(dǎo)致執(zhí)行任意JavaScript。DOMXSS最常見的來(lái)源是URL,通常通過document.write等對(duì)象訪問。攻擊者可以構(gòu)建一個(gè)鏈接,誘使受害者點(diǎn)擊來(lái)觸發(fā)。DOM型XSShttp://ip/xss/domxss.html?a=testhttp://ip/xss/domxss.html?a=%3Cscript%3Ealert(/xss/)%3C/script%3E漏洞原因:從URL中取參數(shù)值寫入頁(yè)面,未經(jīng)過濾。DOM型XSS要手動(dòng)測(cè)試DOM型XSS,通常需要使用帶有開發(fā)者工具的瀏覽器,如Chrome。依次處理每個(gè)可用的輸入源,并分別測(cè)試每個(gè)接收器。1、測(cè)試HTML接收器。2、測(cè)試javascript執(zhí)行接收器。3、利用不同的源和接收器利用DOMXSS。4、DOMXSS結(jié)合反射和存儲(chǔ)數(shù)據(jù)。DOM型XSS漏洞挖掘1、測(cè)試HTML接收器。在HTML接收器中測(cè)試DOMXSS,將一個(gè)隨機(jī)的字母數(shù)字字符串放入源(例如location.search),然后使用開發(fā)者工具檢查HTML并找到字符串出現(xiàn)的位置。DOM型XSS漏洞挖掘2、測(cè)試javascript執(zhí)行接收器。測(cè)試DOM型XSS的JavaScript執(zhí)行接收器有點(diǎn)困難,需要使用JavaScript調(diào)試器來(lái)確定輸入是否以及如何被發(fā)送到接收器。對(duì)于每個(gè)潛在的源,比如location,首先需要在頁(yè)面的JavaScript代碼中找到源在哪被引用。一旦找到源在哪被讀取,可以使用JavaScript調(diào)試器添加斷點(diǎn),并跟蹤源的使用情況,使用search函數(shù)來(lái)跟蹤這些變量,并查看它們是否被傳遞給接收器。當(dāng)發(fā)現(xiàn)一個(gè)接收器正在被分配來(lái)自源的數(shù)據(jù)時(shí),可以使用調(diào)試器檢查該值,看看是否能夠成功地提供XSS攻擊。DOM型XSS漏洞挖掘3、利用不同的源和接收器利用DOMXSS。如果存在一個(gè)數(shù)據(jù)可以從源端傳播到接收端的可實(shí)現(xiàn)路徑,那么網(wǎng)站就容易受到DOM型XSS攻擊。不同的源和接收器具有不同的屬性和行為,常見的有:document.write接收器對(duì)script元素有效,簡(jiǎn)單payload如下:document.write('...<script>alert(document.domain)</script>...');瀏覽器的innerHTML接收器都不會(huì)接受script元素,也不會(huì)接受svgonload事件??梢允褂闷渌?,如img或iframe。onload和onerror等事件處理可以與這些元素一起使用。例如:element.innerHTML='...<imgsrc=1onerror=alert(document.domain)>...‘DOM型XSS漏洞挖掘如果使用了像jQuery這樣的JavaScript庫(kù),注意那些可以改變頁(yè)面上DOM元素的接收器。例如,jQuery中的attr()函數(shù)可以改變DOM元素的屬性。如果數(shù)據(jù)是從用戶控制的源(如URL)讀取的,然后傳遞給attr()函數(shù),則可以操作URL值,發(fā)送導(dǎo)致XSS。$(function(){$('#backLink').attr("href",(newURLSearchParams(window.location.search)).get('returnUrl'));});通過修改URL來(lái)利用location.search源包含一個(gè)惡意的JavaScriptURL。當(dāng)頁(yè)面的JavaScript將這個(gè)惡意URL應(yīng)用到后退接的href,點(diǎn)擊后退鏈接將執(zhí)行:?returnUrl=javascript:alert(document.domain)DOM型XSS漏洞挖掘4、DOMXSS結(jié)合反射和存儲(chǔ)數(shù)據(jù)。純基于dom的漏洞自包含在單個(gè)頁(yè)面中。網(wǎng)站經(jīng)常在服務(wù)器的HTML響應(yīng)中返回URL參數(shù)。這通常與普通XSS相關(guān),但它也可能導(dǎo)致所謂的反射+DOM漏洞,在反射+DOM漏洞中,服務(wù)器處理來(lái)自請(qǐng)求的數(shù)據(jù),并將數(shù)據(jù)回顯到響應(yīng)中。所反射的數(shù)據(jù)可以放在JavaScript字符串中,或者DOM中的數(shù)據(jù)項(xiàng)中,比如表單字段。頁(yè)面上的腳本然后以不安全的方式處理反射的數(shù)據(jù),最終將其寫入一個(gè)危險(xiǎn)的接收器。eval('vardata="reflectedstring"');DOM型XSS漏洞挖掘網(wǎng)站也可以將數(shù)據(jù)存儲(chǔ)在服務(wù)器上,并在其他地方反射出來(lái)。在存儲(chǔ)+DOM漏洞中,服務(wù)器從一個(gè)請(qǐng)求接收數(shù)據(jù),存儲(chǔ)數(shù)據(jù),然后在隨后的響應(yīng)中包含這些數(shù)據(jù)。之后響應(yīng)中的腳本包含接收器,然后該接收器以不安全的方式處理數(shù)據(jù)。element.innerHTML=comment.authorDOM型XSS漏洞挖掘以下是一些可能導(dǎo)致DOM-XSS漏洞的主要接收器:document.write()document.writeln()document.domainelement.innerHTMLelement.outerHTMLelement.insertAdjacentHTMLelement.onevent哪些接收器會(huì)導(dǎo)致DOM-XSS漏洞以下jQuery函數(shù)也是可能導(dǎo)致DOM-XSS漏洞的主要接收器:add()after()append()animate()insertAfter()insertBefore()before()html()prepend()replaceAll()replaceWith()wrap()wrapInner()wrapAll()has()constructor()init()index()jQuery.parseHTML()$.parseHTML()哪些接收器會(huì)導(dǎo)致DOM-XSS漏洞被攻擊對(duì)象的不同:反射型XSS的被攻擊對(duì)象一般是攻擊者去尋找的,而存儲(chǔ)型XSS是廣撒網(wǎng)的方式或者指定的方式,就是攻擊者將存儲(chǔ)型XSS放在一些有XSS漏洞的網(wǎng)站上,只要有用戶訪問這個(gè)鏈接就會(huì)中招,而攻擊者也可以尋找被攻擊對(duì)象,DOM型XSS的被攻擊對(duì)象其實(shí)和反射型XSS被攻擊對(duì)象差不多,就是給攻擊對(duì)象放送URL。解析位置不同:反射型XSS的腳本被解析的地方是瀏覽器,而存儲(chǔ)型XSS的腳本被解析的地方是服務(wù)器,DOM型XSS也是瀏覽器,所以DOM型又叫DOM反射型XSS。但是反射型XSS需要聯(lián)網(wǎng),而DOM型不需要!三種XSS區(qū)別存儲(chǔ)時(shí)間不同:反射型XSS是既有即用,沒有持久性,而存儲(chǔ)型XSS是存儲(chǔ)在服務(wù)器上,只要服務(wù)器不掛機(jī)或者是被干掉,就一直會(huì)有,DOM型XSS和反射型差不多。允許輸入點(diǎn)的不同:一般情況下,反射型XSS在搜索框或者是頁(yè)面跳轉(zhuǎn)這些地方,而存儲(chǔ)型XSS一般是留言或者用戶存儲(chǔ)的地方,而DOM是在DOM位置上,不取決于輸入環(huán)境上。三種XSS區(qū)別目錄/CONTENTSXSS攻擊原理XSS攻擊分類XSS攻擊防御XSS攻擊實(shí)踐在某些情況下,防止跨站點(diǎn)腳本編寫是微不足道的,但根據(jù)應(yīng)用程序的復(fù)雜性及其處理用戶可控?cái)?shù)據(jù)的方式,可能會(huì)更加困難。一般來(lái)說(shuō),有效防止XSS漏洞很可能涉及以下措施的組合:·1.到達(dá)時(shí)過濾輸入。在收到用戶輸入時(shí),根據(jù)預(yù)期或有效輸入盡可能嚴(yán)格地進(jìn)行過濾?!?.對(duì)輸出的數(shù)據(jù)進(jìn)行編碼。在HTTP響應(yīng)中輸出用戶可控?cái)?shù)據(jù)時(shí),對(duì)輸出進(jìn)行編碼以防止其被解釋為活動(dòng)內(nèi)容。根據(jù)輸出上下文,這可能需要應(yīng)用HTML、URL、JavaScript和CSS編碼的組合。XSS攻擊防御·3.使用適當(dāng)?shù)捻憫?yīng)頭。為了防止不打算包含任何HTML或JavaScript的HTTP響應(yīng)中的XSS,您可以使用Content-Type和X-Content-Type-Options標(biāo)頭來(lái)確保瀏覽器以您想要的方式解釋響應(yīng)?!?.內(nèi)容安全政策。作為最后一道防線,您可以使用內(nèi)容安全策略(CSP)來(lái)降低仍然發(fā)生的任何XSS漏洞的嚴(yán)重性。XSS攻擊防御到達(dá)時(shí)驗(yàn)證輸入:·如果用戶提交的URL將在響應(yīng)中返回,則驗(yàn)證它是否以安全協(xié)議(例如HTTP和HTTPS)開頭。否則,有人可能會(huì)使用javascript或之類的有害協(xié)議來(lái)利用您的站點(diǎn)data?!と绻脩籼峁┝艘粋€(gè)預(yù)期為數(shù)字的值,則驗(yàn)證該值是否實(shí)際包含一個(gè)整數(shù)。·驗(yàn)證輸入只包含一組預(yù)期的字符。理想情況下,輸入驗(yàn)證應(yīng)該通過阻止無(wú)效輸入來(lái)工作。另一種嘗試清除無(wú)效輸入以使其有效的替代方法更容易出錯(cuò),應(yīng)盡可能避免。XSS攻擊防御對(duì)輸出的數(shù)據(jù)進(jìn)行編碼:編碼應(yīng)該在用戶可控?cái)?shù)據(jù)寫入頁(yè)面之前直接應(yīng)用。例如,JavaScript字符串中的值需要與HTML上下文中的值不同的轉(zhuǎn)義類型。在HTML上下文中,您應(yīng)該將非白名單值轉(zhuǎn)換為HTML實(shí)體:<轉(zhuǎn)換為:<>轉(zhuǎn)換為:>在JavaScript字符串上下文中,非字母數(shù)字值應(yīng)該是Unicode轉(zhuǎn)義的:<轉(zhuǎn)換為:\u003c>轉(zhuǎn)換為:\u003eXSS攻擊防御有時(shí)您需要以正確的順序應(yīng)用多層編碼。例如,要安全地將用戶輸入嵌入到事件處理程序中,您需要處理JavaScript上下文和HTML上下文。所以你需要先對(duì)輸入進(jìn)行Unicode轉(zhuǎn)義,然后對(duì)它進(jìn)行HTML編碼:<ahref="#"onclick="x='Thisstringneedstwolayersofescaping'">test</a>XSS攻擊防御黑名單與白名單:輸入驗(yàn)證通常應(yīng)使用白名單而不是黑名單。例如,不要嘗試列出所有有害協(xié)議(javascript、data等),只需列出安全協(xié)議(HTTP、HTTPS)并禁止任何不在列表中的內(nèi)容。這將確保您的防御在新的有害協(xié)議出現(xiàn)時(shí)不會(huì)中斷,并使其不易受到試圖混淆無(wú)效值以逃避黑名單的攻擊。XSS攻擊防御使用模板引擎防止XSS:許多現(xiàn)代網(wǎng)站使用服務(wù)器端模板引擎(如Twig和Freemarker)在HTML中嵌入動(dòng)態(tài)內(nèi)容。例如,在Twig中,您可以使用e()過濾器,并使用定義上下文的參數(shù):

{{user.firstname|e('html')}}其他一些模板引擎,例如Jinja和React,默認(rèn)情況下會(huì)轉(zhuǎn)義動(dòng)態(tài)內(nèi)容,這有效地防止了大多數(shù)XSS的發(fā)生。XSS攻擊防御PHP中防范XSS:在PHP中有一個(gè)內(nèi)置函數(shù)來(lái)編碼實(shí)體,稱為htmlentities.在HTML上下文中時(shí),您應(yīng)該調(diào)用此函數(shù)來(lái)轉(zhuǎn)義您的輸入。應(yīng)使用三個(gè)參數(shù)調(diào)用該函數(shù):您的輸入字符串。ENT_QUOTES,這是一個(gè)標(biāo)志,指定所有引號(hào)都應(yīng)該被編碼。字符集,在大多數(shù)情況下應(yīng)該是UTF-8。XSS攻擊防御在JavaScript中防止XSS:要在JavaScript中轉(zhuǎn)義HTML上下文中的用戶輸入,您需要自己的HTML編碼器,因?yàn)镴avaScript不提供API來(lái)編碼HTML。下面是一些將字符串轉(zhuǎn)換為HTML實(shí)體的示例JavaScript代碼:functionhtmlEncode(str){returnString(str).replace(/[^\w.]/gi,function(c){return'&#'+c.charCodeAt(0)+';';});}然后使用此函數(shù):<script>document.body.innerHTML=htmlEncode(untrustedValue)</script>XSS攻擊防御在JavaScript中防止XSS:如果您的輸入在JavaScript字符串中,則需要一個(gè)執(zhí)行Unicode轉(zhuǎn)義的編碼器。這是一個(gè)示例Unicode編碼器:functionjsEscape(str){returnString(str).replace(/[^\w.]/gi,function(c){return'\\u'+('0000'+c.charCodeAt(0).toString(16)).slice(-4);});}然后使用此函數(shù):<script>document.write('<script>x="'+jsEscape(untrustedValue)+'";<\/script>')</script>XSS攻擊防御目錄/CONTENTSXSS攻擊原理XSS攻擊分類XSS攻擊防御XSS攻擊實(shí)踐XSS攻擊中反射型XSS漏洞攻擊:有個(gè)搜索框可以進(jìn)行搜索功能,分析發(fā)現(xiàn)搜索框的form表達(dá)是用GET方法獲取用戶的輸入。XSS攻擊實(shí)踐XSS攻擊中反射型XSS漏洞攻擊:構(gòu)造XSS漏洞的測(cè)試payload:<script>alert(/xss/)</script>進(jìn)行測(cè)試,代碼被成功執(zhí)行。XSS攻擊實(shí)踐XSS攻擊中存儲(chǔ)型XSS漏洞攻擊:有個(gè)留言板功能可對(duì)網(wǎng)站進(jìn)行留言評(píng)論XSS攻擊實(shí)踐XSS攻擊中存儲(chǔ)型XSS漏洞攻擊:在Comment輸入框構(gòu)造XSS漏洞測(cè)試payload:<script>al

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論