跨站點(diǎn)腳本(也稱為 XSS)是一種 Web 安全漏洞,允許攻擊者破壞用戶與易受攻擊的應(yīng)用程序的交互。它允許攻擊者繞過同源策略,該策略旨在將不同的網(wǎng)站彼此隔離。跨站點(diǎn)腳本漏洞通常允許攻擊者偽裝成受害者用戶,執(zhí)行用戶能夠執(zhí)行的任何操作,并訪問用戶的任何數(shù)據(jù)。如果受害用戶在應(yīng)用程序中具有特權(quán)訪問權(quán)限,那么攻擊者可能能夠完全控制應(yīng)用程序的所有功能和數(shù)據(jù)。
跨站點(diǎn)腳本攻擊的工作原理是操縱易受攻擊的網(wǎng)站,以便將惡意 JavaScript 返回給用戶。當(dāng)惡意代碼在受害者的瀏覽器中執(zhí)行時(shí),攻擊者可以完全破壞他們與應(yīng)用程序的交互。
XSS 攻擊主要分為三種類型:
- 反射型XSS,其中惡意腳本來(lái)自當(dāng)前的HTTP請(qǐng)求。
- 存儲(chǔ)型 XSS,其中惡意腳本來(lái)自網(wǎng)站的數(shù)據(jù)庫(kù)。
- 基于 DOM 的 XSS,該漏洞存在于客戶端代碼而不是服務(wù)器端代碼中。
1、反射式跨站腳本
反射型 XSS是最簡(jiǎn)單的跨站腳本。當(dāng)應(yīng)用程序接收 HTTP 請(qǐng)求中的數(shù)據(jù)并以不安全的方式將該數(shù)據(jù)包含在立即響應(yīng)中時(shí),就會(huì)出現(xiàn)這種情況。
下面是一個(gè)反映 XSS漏洞 的簡(jiǎn)單示例:
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="lib/jquery-3.3.1.min.js"></script>
</head>
<body>
<p>
姓名:<p id="name_content">無(wú)</p>
</p>
</body>
<script>
let getUrlParam = function () {
console.log("獲取參數(shù)");
var r = window.location.search;
var paramPairArray = r.replace("?", "").split("&");
let paramMap = new Map();
for (const index in paramPairArray) {
var value = paramPairArray[index];
var valueArray = value.split("=")
paramMap[valueArray[0]]=decodeURI(valueArray[1]);
}
$nameContent = $('#name_content');
setTimeout(() => {
// $nameContent.html(`\<script\>alert("hi man!xss come here")\<\/script\>`);
$nameContent.html(paramMap["status"]);
}, 2000);
}
getUrlParam();
</script>
</html>
文件路徑/demo-01.html?status=%3Cscript%3Ealert(%22hi%20man!xss%20come%20%22)%3C/script%3E
在瀏覽器中輸入上面的請(qǐng)求路徑:
2、存儲(chǔ)的跨站點(diǎn)腳本
當(dāng)應(yīng)用程序從不受信任的源接收數(shù)據(jù)并以不安全的方式將該數(shù)據(jù)包含在其后續(xù)的 HTTP 響應(yīng)中時(shí),就會(huì)出現(xiàn)存儲(chǔ)型 XSS(也稱為持久性或二階 XSS)。
有問題的數(shù)據(jù)可能通過 HTTP 請(qǐng)求提交給應(yīng)用程序;例如,博客文章的評(píng)論、聊天室中的用戶昵稱或客戶訂單的聯(lián)系方式。在其他情況下,數(shù)據(jù)可能來(lái)自其他不受信任的來(lái)源;例如,顯示通過 SMTP 接收的消息的網(wǎng)絡(luò)郵件應(yīng)用程序、顯示社交媒體帖子的營(yíng)銷應(yīng)用程序或顯示來(lái)自網(wǎng)絡(luò)流量的數(shù)據(jù)包數(shù)據(jù)的網(wǎng)絡(luò)監(jiān)控應(yīng)用程序。
下面是一個(gè)存儲(chǔ)型 XSS漏洞 的簡(jiǎn)單示例。留言板應(yīng)用程序允許用戶提交消息,這些消息將顯示給其他用戶:
<p>Hello, this is my message!</p>
該應(yīng)用程序不會(huì)對(duì)數(shù)據(jù)執(zhí)行任何其他處理,因此攻擊者可以輕松發(fā)送攻擊其他用戶的消息:
<p><script>/* Bad stuff here... */</script></p>
3、基于 DOM 的跨站點(diǎn)腳本編寫
當(dāng)應(yīng)用程序包含一些客戶端 JavaScript 以不安全的方式(通常是將數(shù)據(jù)寫回 DOM)處理來(lái)自不受信任源的數(shù)據(jù)時(shí),就會(huì)出現(xiàn)基于 DOM 的 XSS(也稱為 DOM XSS)。
在以下示例中,應(yīng)用程序使用一些 JavaScript 從輸入字段讀取值并將該值寫入 HTML 中的元素:
var search = document.getElementById('search').value;
var results = document.getElementById('results');
results.innerHTML = 'You searched for: ' + search;
如果攻擊者可以控制輸入字段的值,他們就可以輕松構(gòu)造一個(gè)惡意值,導(dǎo)致自己的腳本執(zhí)行:
You searched for: <img src=1 onerror='/* Bad stuff here... */'>
在典型情況下,輸入字段將由 HTTP 請(qǐng)求的一部分(例如 URL 查詢字符串參數(shù))填充,從而允許攻擊者使用惡意 URL 進(jìn)行攻擊,其方式與反射型 XSS 相同。
利用跨站點(diǎn)腳本漏洞的攻擊者通常能夠:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-670147.html
- 冒充或偽裝成受害用戶。
- 執(zhí)行用戶能夠執(zhí)行的任何操作。
- 讀取用戶能夠訪問的任何數(shù)據(jù)。
- 捕獲用戶的登錄憑據(jù)。
- 對(duì)網(wǎng)站進(jìn)行虛擬破壞。
- 將木馬功能注入網(wǎng)站
一般來(lái)說(shuō),有效預(yù)防 XSS 漏洞可能涉及以下措施的組合:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-670147.html
- 到達(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 編碼的組合。
- 使用適當(dāng)?shù)捻憫?yīng)標(biāo)頭。為了防止不包含任何 HTML 或 JavaScript 的 HTTP 響應(yīng)中出現(xiàn) XSS,可 以使用 和Content-Type標(biāo)X-Content-Type-Options頭來(lái)確保瀏覽器按照您想要的方式解釋響應(yīng)。
-內(nèi)容安全政策。作為最后一道防線,您可以使用內(nèi)容安全策略 (CSP) 來(lái)降低仍然發(fā)生的任何 XSS 漏洞的嚴(yán)重性。
到了這里,關(guān)于【網(wǎng)絡(luò)安全】跨站腳本(xss)攻擊的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!