小編給大家分享一下React中防范XSS攻擊的方法,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!
在新樂等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計 網(wǎng)站設(shè)計制作按需搭建網(wǎng)站,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站制作,網(wǎng)絡(luò)營銷推廣,成都外貿(mào)網(wǎng)站制作,新樂網(wǎng)站建設(shè)費(fèi)用合理。
跨站點(diǎn)腳本(XSS)攻擊是一種將惡意代碼注入網(wǎng)頁然后執(zhí)行的攻擊。這是前端 Web 開發(fā)人員必須應(yīng)對的最常見的網(wǎng)絡(luò)攻擊形式之一,因此了解攻擊的工作原理和防范方法非常重要。
在本文中,我們將查看幾個用 React 編寫的代碼示例,這樣您也可以保護(hù)您的站點(diǎn)和用戶。
對于我們所有的示例,我們將實(shí)現(xiàn)相同的基本功能。我們將在頁面上有一個搜索框,用戶可以在其中輸入文本。點(diǎn)擊“Go”按鈕將模擬運(yùn)行搜索,然后一些確認(rèn)文本將顯示在屏幕上,并向用戶重復(fù)他們搜索的術(shù)語。這是任何允許你搜索的網(wǎng)站的標(biāo)準(zhǔn)行為。
很簡單,對吧?會出什么問題呢?
好吧,如果我們在搜索框中輸入一些 HTML 怎么辦?讓我們嘗試以下代碼段:
<img src="1" onerror="alert('Gotcha!')" />
現(xiàn)在會發(fā)生什么?
哇,onerror
事件處理程序已執(zhí)行!那不是我們想要的!我們只是不知不覺地從不受信任的用戶輸入中執(zhí)行了腳本。
然后,破碎的圖像將呈現(xiàn)在頁面上,那也不是我們想要的。
那么我們是怎么到這里的呢?好吧,在本例中渲染搜索結(jié)果的 JSX 中,我們使用了以下代碼:
<p style="{searchResultsStyle}"> You searched for: <b ><span dangerouslySetInnerHTML="{{" __html: this.state.submittedSearch }} /></b> </p>
用戶輸入被解析和渲染的原因是我們使用了 dangerouslySetInnerHTML
屬性,這是 React 中的一個特性,它的工作原理就像原生的 innerHTML
瀏覽器 API 一樣,由于這個原因,一般認(rèn)為使用這個屬性是不安全的。
現(xiàn)在,讓我們看一個成功防御 XSS 攻擊的示例。這里的修復(fù)方法非常簡單:為了安全地渲染用戶輸入,我們不應(yīng)該使用 dangerouslySetInnerHTML
屬性。相反,讓我們這樣編寫輸出代碼:
<p style="{searchResultsStyle}"> You searched for: <b>{this.state.submittedSearch}</b> </p>
我們將輸入相同的輸入,但這一次,這里是輸出:
很好!用戶輸入的內(nèi)容在屏幕上只呈現(xiàn)為文字,威脅已被解除。
這是個好消息!React 默認(rèn)情況下會對渲染的內(nèi)容進(jìn)行轉(zhuǎn)義處理,將所有的數(shù)據(jù)都視為文本字符串處理,這相當(dāng)于使用原生 textContent
瀏覽器 API。
所以,這里的建議似乎很簡單。只要不要在你的 React 代碼中使用dangerouslySetInnerHTML
你就可以了。但如果你發(fā)現(xiàn)自己需要使用這個功能呢?
例如,也許您正在從諸如 Drupal 之類的內(nèi)容管理系統(tǒng)(CMS)中提取內(nèi)容,而其中某些內(nèi)容包含標(biāo)記。(順便說一句,我可能一開始就不建議在文本內(nèi)容和來自 CMS 的翻譯中包含標(biāo)記,但對于本例,我們假設(shè)您的意見被否決了,并且?guī)в袠?biāo)記的內(nèi)容將保留下來。)
在這種情況下,您確實(shí)想解析 HTML 并將其呈現(xiàn)在頁面上。那么,您如何安全地做到這一點(diǎn)?
答案是在渲染 HTML 之前對其進(jìn)行清理。與完全轉(zhuǎn)義 HTML 不同,在渲染之前,您將通過一個函數(shù)運(yùn)行內(nèi)容以去除任何潛在的惡意代碼。
您可以使用許多不錯的 HTML 清理庫。和任何與網(wǎng)絡(luò)安全有關(guān)的東西一樣,最好不要自己寫這些東西。有些人比你聰明得多,不管他們是好人還是壞人,他們比你考慮得更多,一定要使用久經(jīng)考驗(yàn)的解決方案。
我最喜歡的清理程序庫之一稱為sanitize-html(https://www.npmjs.com/package/sanitize-html),它的功能恰如其名。您從一些不干凈的 HTML 開始,通過一個函數(shù)運(yùn)行它,然后得到一些漂亮、干凈、安全的 HTML 作為輸出。如果您想要比它們的默認(rèn)設(shè)置提供更多的控制,您甚至可以自定義允許的 HTML 標(biāo)記和屬性。
看完了這篇文章,相信你對React中防范XSS攻擊的方法有了一定的了解,想了解更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!
分享題目:React中防范XSS攻擊的方法
本文地址:http://www.chinadenli.net/article42/jdhghc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊、靜態(tài)網(wǎng)站、響應(yīng)式網(wǎng)站、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站策劃、網(wǎng)站營銷
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)