有必要知(zhī)道的Web 安全漏洞之 XSS 攻擊

時間:2022-12-14 作者:管理員(yuán) 點擊:301

什麽是XSS攻擊

XSS(Cross-SiteScripting)又(yòu)稱跨站腳本,XSS的重點不在于跨站點,而是在于腳本的執行。XSS是一(yī)種經常出現在Web應用程序中(zhōng)的計算機安全漏洞,是由于Web應用程序對用戶的輸入過濾不足而産生(shēng)的。

常見的XSS攻擊有三種:反射型、DOM-based型、存儲型。其中(zhōng)反射型、DOM-based型可以歸類爲非持久型XSS攻擊,存儲型歸類爲持久型XSS攻擊。

1.反射型

反射型XSS一(yī)般是攻擊者通過特定手法(如電(diàn)子郵件),誘使用戶去(qù)訪問一(yī)個包含惡意代碼的URL,當受害者點擊這些專門設計的鏈接的時候,惡意代碼會直接在受害者主機上的浏覽器執行。

對于訪問者而言是一(yī)次性的,具體(tǐ)表現在我(wǒ)(wǒ)們把我(wǒ)(wǒ)們的惡意腳本通過URL的方式傳遞給了服務器,而服務器則隻是不加處理的把腳本“反射”回訪問者的浏覽器而使訪問者的浏覽器執行相應的腳本。反射型XSS的觸發有後端的參與,要避免反射性XSS,必須需要後端的協調,後端解析前端的數據時首先做相關的字串檢測和轉義處理。

此類XSS通常出現在網站的搜索欄、用戶登錄口等地方,常用來竊取客戶端Cookies或進行釣魚欺騙。

整個攻擊過程大(dà)約如下(xià):

2.DOM-based型

客戶端的腳本程序可以動态地檢查和修改頁面内容,而不依賴于服務器端的數據。例如客戶端如從URL中(zhōng)提取數據并在本地執行,如果用戶在客戶端輸入的數據包含了惡意的JavaScript腳本,而這些腳本沒有經過适當的過濾和消毒,那麽應用程序就可能受到DOM-basedXSS攻擊。需要特别注意以下(xià)的用戶輸入源document.URL、location.hash、location.search、document.referrer等。

整個攻擊過程大(dà)約如下(xià):

3.存儲型

攻擊者事先将惡意代碼上傳或儲存到漏洞服務器中(zhōng),隻要受害者浏覽包含此惡意代碼的頁面就會執行惡意代碼。這就意味着隻要訪問了這個頁面的訪客,都有可能會執行這段惡意腳本,因此儲存型XSS的危害會更大(dà)。

存儲型XSS一(yī)般出現在網站留言、評論、博客日志(zhì)等交互處,惡意腳本存儲到客戶端或者服務端的數據庫中(zhōng)。

整個攻擊過程大(dà)約如下(xià):

XSS攻擊的危害

XSS可以導緻:

攻擊劫持訪問;

盜用cookie實現無密碼登錄;

配合csrf攻擊完成惡意請求;

使用js或css破壞頁面正常的結構與樣式等;

防禦方法

1.XSS防禦之HTML編碼

應用範圍:将不可信數據放(fàng)入到HTML标簽内(例如div、span等)的時候進行HTML編碼。

編碼規則:将&<>"'/轉義爲實體(tǐ)字符(或者十進制、十六進制)。

示例代碼:

functionencodeForHTML(str,kwargs){return(''+str).replace(/&/g,'&').replace(/<.replace(/>/g,'>').replace(/"/g,'"').replace(/'/g,''')//'不推薦,因爲它不在HTML規範中(zhōng).replace(/\//g,'/');};

HTML有三種編碼表現方式:十進制、十六進制、命名實體(tǐ)。例如小(xiǎo)于号(<)可以編碼爲"十進制><","十六進制=><","命名實體(tǐ)=><"三種方式。對于單引号(')由于實體(tǐ)字符編碼方式不在HTML規範中(zhōng),所以此處使用了十六進制編碼。

2.XSS防禦之HTMLAttribute編碼

應用範圍:将不可信數據放(fàng)入HTML屬性時(不含src、href、style和事件處理屬性),進行HTMLAttribute編碼

編碼規則:除了字母數字字符以外(wài),使用HH;(或者可用的命名實體(tǐ))格式來轉義ASCII值小(xiǎo)于256所有的字符

示例代碼:

functionencodeForHTMLAttibute(str,kwargs){letencoded='';for(leti=0;i

3.XSS防禦之JavaScript編碼

作用範圍:将不可信數據放(fàng)入事件處理屬性、JavaScirpt值時進行JavaScript編碼

編碼規則:除字母數字字符外(wài),請使用xHH格式轉義ASCII碼小(xiǎo)于256的所有字符

示例代碼:

functionencodeForJavascript(str,kwargs){letencoded='';for(leti=0;i

4.XSS防禦之URL編碼

作用範圍:将不可信數據作爲URL參數值時需要對參數進行URL編碼

編碼規則:将參數值進行encodeURIComponent編碼

示例代碼:

functionencodeForURL(/templates/default/str,kwargs){returnencodeURIComponent(str);};

5.XSS防禦之CSS編碼

作用範圍:将不可信數據作爲CSS時進行CSS編碼

編碼規則:除了字母數字字符以外(wài),使用XXXXXX格式來轉義ASCII值小(xiǎo)于256的所有字符

示例代碼:

functionencodeForCSS(attr,str,kwargs){letencoded='';for(leti=0;i

後記

在任何時候用戶的輸入都是不可信的。對于HTTP參數,理論上都要進行驗證,例如某個字段是枚舉類型,其就不應該出現枚舉以爲的值;對于不可信數據的輸出要進行相應的編碼;此外(wài)httpOnly、CSP、X-XSS-Protection、SecureCookie等也可以起到有效的防護。

XSS漏洞有時比較難發現,所幸當下(xià)React、Vue等框架都從框架層面引入了XSS防禦機制,一(yī)定程度上解放(fàng)了我(wǒ)(wǒ)們的雙手。

但是作爲開(kāi)發人員(yuán)依然要了解XSS基本知(zhī)識、于細節處避免制造XSS漏洞。框架是輔助,我(wǒ)(wǒ)們仍需以人爲本,規範開(kāi)發習慣,提高Web前端安全意識。
返回列表
在線溝通

Are you interested in ?

感興趣嗎(ma)?

有關我(wǒ)(wǒ)們服務的更多信息,請聯系

136 7365 2363(同微信) 13140187702

鄭州網站建設鄭州網站設計鄭州網站制作鄭州建站公司鄭州網站優化--聯系索騰

與我(wǒ)(wǒ)們合作

鄭州網站建設鄭州網站設計鄭州網站制作鄭州建站公司鄭州網站優化--與索騰合作,您将會得到更成熟、專業的網絡建設服務。我(wǒ)(wǒ)們以客戶至上,同時也相互挑戰,力求呈現最好的品牌建設成果。

業務咨詢熱線:

136 7365 2363

TOP

QQ客服

在線留言