自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何在Node.js中防范跨站腳本攻擊

譯文 精選
安全 應(yīng)用安全
文將向您簡單介紹跨站點腳本(XSS)攻擊的基本原理,以及如何在Node.js中防范此類攻擊。

譯者 | 陳峻

審校 | 孫淑娟

作為一種安全漏洞,跨站點腳本(Cross-site scripting,XSS)是指攻擊者使用客戶端的代碼,在目標(biāo)網(wǎng)站上注入惡意腳本的一種方式。由于攻擊者可以使用它來冒充用戶、訪問敏感數(shù)據(jù),甚至更改網(wǎng)站的頁面內(nèi)容,因此它對用戶、站點構(gòu)成了嚴(yán)重的威脅。

截至2021年,此類風(fēng)險在25個最危險的常見漏洞列表中排名第二。對此,我們往往需要在創(chuàng)建與維護網(wǎng)站時,事先對其有充分的了解,并做好相應(yīng)的防范。

1.跨站點腳本的工作原理 

在了解跨站點腳本的工作原理之前,讓我們先來了解同源策略(same-origin policy,SOP)的含義。SOP是一種安全機制策略,它能夠限制一個網(wǎng)站(一個來源)去讀取或?qū)懭肓硪粋€網(wǎng)站(其他來源)。因此,它可以從根源上防止惡意網(wǎng)站向受信任的網(wǎng)站發(fā)送惡意代碼。

跨站點腳本攻擊通常會利用瀏覽器無法區(qū)分合法HTML和惡意代碼的特點,來繞過同源策略。例如,攻擊者可以直接將JavaScript代碼注入目標(biāo)網(wǎng)站。而一旦用戶的瀏覽器執(zhí)行此類代碼,那么攻擊者便可以獲取針對會話令牌、Cookie和其他敏感數(shù)據(jù)的訪問權(quán)限。

目前,攻擊者往往會使用反射、存儲和基于DOM三種類型的跨站點腳本,對目標(biāo)網(wǎng)站開展攻擊。

2.反射型XSS 

反射型XSS是將JavaScript直接注入用戶的輸入字段。此類JavaScript可能是Echo、重定向或Cookie收集器。例如,攻擊者將腳本插入到目標(biāo)的搜索詞中,產(chǎn)生諸如搜索結(jié)果等,針對獲取數(shù)據(jù)庫數(shù)據(jù)的請求。一旦目標(biāo)客戶端提交了此類查詢,那么被注入其中的腳本就會立即被觸發(fā)執(zhí)行。例如,在用戶搜索期間,攻擊者可能會插入一個響應(yīng)表單的JavaScript,要求受害者輸入他們的密碼或用戶名。那么一旦用戶認(rèn)為這是來自原始站點的請求,并跟著操作,就可能在不知不覺中將其信任憑據(jù)提交給了攻擊者。有時,攻擊者還可以使用腳本,將用戶從易受攻擊的頁面,重定向到惡意構(gòu)建的頁面上,同樣以提交表單的方式,套取信任憑據(jù)。

3.存儲型XSS 

與反射型XSS不同,存儲型XSS以易受攻擊網(wǎng)站的整個用戶群為目標(biāo)。攻擊者通過將腳本存儲在網(wǎng)站的數(shù)據(jù)庫中,在頁面加載時,觸發(fā)存儲腳本的持久執(zhí)行,從而對網(wǎng)站的整體完整性產(chǎn)生影響。

4.基于DOM的XSS 

存儲和反射型XSS往往以網(wǎng)站上的服務(wù)器端請求為目標(biāo),而基于DOM的XSS則是以運行時的活動為目標(biāo)。它通過將腳本插入到執(zhí)行特定任務(wù)的網(wǎng)站組件中,以改變其原始意圖。此類組件通常會執(zhí)行更改網(wǎng)站元素等,與DOM相關(guān)的任務(wù),讓網(wǎng)頁變得反應(yīng)異常。

5.如何防范Node中的跨站點腳本 

您通常可以采取如下步驟,來防范Node.js中的跨站點腳本:

凈化輸入

由于攻擊者必須能夠?qū)?shù)據(jù)發(fā)送到目標(biāo)Web應(yīng)用,并將其推送給用戶,才能執(zhí)行XSS攻擊,因此,您需要采取的第一種預(yù)防措施便是:對所有從用戶處輸入到Web應(yīng)用的數(shù)據(jù)予以凈化。它可以保證服務(wù)器端在根據(jù)用戶輸入執(zhí)行后續(xù)操作之前,檢測并剔除各種虛假、惡意的“臟”數(shù)據(jù)。您既可以手動執(zhí)行此類操作,也可以使用驗證器(validator)之類的工具,來加快整體的處理速度。如下代碼段所示,您可以使用驗證器來轉(zhuǎn)義用戶輸入中的HTML標(biāo)簽:

importvalidatorfrom"validator";
letuserInput=`Jane<scriptonload="alert('XSShack');"></script>`;
letsanitizedInput=validator.escape(userInput);

一旦您運行了上述代碼,其凈化后的輸出結(jié)果為如下:

Jane<scriptonload="alert(&#x27;XSShack&#x27;);"><&#x2F;script>

限制用戶的輸入

通過驗證來限制用戶在表單中可以提交的輸入類型。例如,如果您提供一個電子郵件的輸入字段,那么就只允許用戶輸入正常的電子郵件格式。據(jù)此,您可以最大限度地減少攻擊者提交不良數(shù)據(jù)的可能。當(dāng)然,您也可以在此使用驗證器的相關(guān)代碼包。

實施HTTP-only的Cookie策略

在瀏覽器中,Cookie會將數(shù)據(jù)存儲在本地的緩存中,并通過HTTP的方式,將其發(fā)送回服務(wù)器。不過,它們也很容易成為被攻擊的目標(biāo)。攻擊者完全可以使用JavaScript,通過瀏覽器去訪問它們。

HTTP-only的Cookie是防止客戶端腳本去訪問Cookie里的數(shù)據(jù)的一種策略。也就是說,即使您的Web應(yīng)用包含有可被攻擊者利用的漏洞,他們也無法據(jù)此訪問到Cookie。下面是如何使用Express在Node.js中,實現(xiàn)HTTP-only的Cookie策略的示例:

app.use(express.session({
secret: "secret",
cookie: {
httpOnly: true,
secure: true
}
}))

如上述代碼段所示,如果攻擊者試圖去訪問某個已經(jīng)將httpOnly標(biāo)簽設(shè)置為true的Cookie,那么他們只能收到一個空的字符串。

6.小結(jié) 

常言道:知易行難。大多數(shù)Web應(yīng)用運維者都知道網(wǎng)站安全的重要性,但是在實施過程中往往會碰到各種復(fù)雜的狀況。在上文中,我向您簡單介紹了跨站點腳本攻擊的基本原理,以及如何在Node.js中防范此類攻擊。希望上述內(nèi)容能夠給您的網(wǎng)站加固實踐提供幫助。

原文鏈接:https://www.makeuseof.com/prevent-cross-site-scripting-in-nodejs/

譯者介紹

陳峻 (Julian Chen),51CTO社區(qū)編輯,具有十多年的IT項目實施經(jīng)驗,善于對內(nèi)外部資源與風(fēng)險實施管控,專注傳播網(wǎng)絡(luò)與信息安全知識與經(jīng)驗;持續(xù)以博文、專題和譯文等形式,分享前沿技術(shù)與新知;經(jīng)常以線上、線下等方式,開展信息安全類培訓(xùn)與授課。

責(zé)任編輯:武曉燕 來源: 51CTO技術(shù)棧
相關(guān)推薦

2010-06-30 16:26:05

2021-07-30 11:20:53

JavaScriptNode.jsWeb Develop

2012-11-15 09:51:36

2020-12-21 09:40:06

腳本攻擊XSS漏洞

2010-06-07 20:19:49

2013-01-11 17:33:46

2020-08-05 08:31:51

SSL TLSNode.js

2022-11-17 09:52:12

RHEL 9Node.js

2011-09-09 14:23:13

Node.js

2009-03-09 17:19:53

2020-08-24 08:07:32

Node.js文件函數(shù)

2010-09-09 11:19:10

2010-09-10 14:13:11

2021-10-25 09:00:37

Node.jsJS前端

2017-06-14 16:08:31

2010-09-27 17:37:10

2021-07-15 10:15:52

Node.jsJSON前端

2021-05-18 09:01:39

Node.jsJSON文件

2021-07-03 17:43:03

Node.jsNode變量

2020-01-03 16:04:10

Node.js內(nèi)存泄漏
點贊
收藏

51CTO技術(shù)棧公眾號