本篇內(nèi)容主要講解“10個(gè)React安全的使用方法教程”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“10個(gè)React安全的使用方法教程”吧!
創(chuàng)新互聯(lián)專注于順德網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠為您提供順德營銷型網(wǎng)站建設(shè),順德網(wǎng)站制作、順德網(wǎng)頁設(shè)計(jì)、順德網(wǎng)站官網(wǎng)定制、成都小程序開發(fā)服務(wù),打造順德網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供順德網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。
數(shù)據(jù)綁定( Data Binding)默認(rèn)的xss保護(hù)
危險(xiǎn)的URL
渲染html
直接訪問dom
服務(wù)端渲染
檢測依賴項(xiàng)中的漏洞
JSON State
檢測React易受攻擊版本
linter工具
危險(xiǎn)的庫代碼
1、數(shù)據(jù)綁定( Data Binding)默認(rèn)的 xss 保護(hù)
使用默認(rèn)的{}進(jìn)行數(shù)據(jù)綁定,React會(huì)自動(dòng)對值進(jìn)行轉(zhuǎn)義以防止XSS攻擊。但注意這種保護(hù)只在渲染textContent時(shí)候有用,渲染HTML attributes的時(shí)候是沒用的。
使用數(shù)據(jù)綁定語法{}將數(shù)據(jù)在組件中。
這樣做:
<div>{data}</div>
避免沒有經(jīng)過自定義驗(yàn)證的動(dòng)態(tài)HTML attributes值。
別這樣做:
<form action={data}>...
2、危險(xiǎn)的URL
URL是可以通過javascript:協(xié)議來引入動(dòng)態(tài)腳本的。所以需要驗(yàn)證你的連接是否是http:或者h(yuǎn)ttps:以防止javascript:url的腳本注入。使用原生的URL parsing方法進(jìn)行URL驗(yàn)證,判斷其協(xié)議是否在你的白名單中。
這樣做:
function validateURL(url) { const parsed = new URL(url) return ['https:', 'http:'].includes(parsed.protocol) } <a href={validateURL(url) ? url : ''}>Click here!</a>
別這樣做:
<a href={attackerControlled}>Click here!</a>
3、渲染html
React是可以通過dangerouslySetInnerHTML將html代碼直接渲染到dom節(jié)點(diǎn)中的。但以這種方式插入的任何內(nèi)容都必須事先消毒。
在將任何值放入dangerouslySetInnerHTML屬性之前,需要用dompurify對其消毒。
在插入html時(shí)用dompurify進(jìn)行處理
import purify from "dompurify"; <div dangerouslySetInnerHTML={{ __html:purify.sanitize(data) }} />
4、直接訪問dom
應(yīng)該避免訪問DOM然后直接將內(nèi)容注入DOM節(jié)點(diǎn)。如果你一定要插入HTML,那就先用dompurify消毒,然后再用dangerouslySetInnerHTML屬性。
這樣做:
import purify from "dompurify"; <div dangerouslySetInnerHTML={{__html:purify.sanitize(data) }} />
不要使用refs 和findDomNode()去訪問渲染出來的DOM元素,然后用類似innerHTML的方法或者屬性去注入內(nèi)容。
別這樣做:
this.myRef.current.innerHTML = attackerControlledValue;
5、服務(wù)端渲染
在使用像ReactDOMServer.renderToString()和ReactDOMServer.renderToStaticMarkup()這類方法的時(shí)候,數(shù)據(jù)綁定會(huì)自動(dòng)提供內(nèi)容轉(zhuǎn)義的功能。
避免在將字符串發(fā)送到客戶端瀏覽器進(jìn)行注水(hydration)之前,把其他的一些(未經(jīng)檢驗(yàn)的)字符串連接到renderToStaticMarkup()的輸出上。
不要把未經(jīng)消毒的數(shù)據(jù)連接到renderToStaticMarkup()的輸出上,以防止XSS
app.get("/", function (req, res) { return res.send( ReactDOMServer.renderToStaticMarkup( React.createElement("h2", null, "Hello World!") ) + otherData ); });
6、檢測依賴項(xiàng)中的漏洞
一些第三方組件的某些版本可能包含安全問題。檢查您的依賴關(guān)系,并及時(shí)更新到更好的版本。
使用類似snyk CLI[1]的工具進(jìn)行漏洞檢查。
snyk CLI 還可以與代碼管理系統(tǒng)集成,然后自動(dòng)修復(fù)漏洞:
$ npx snyk test
7、JSON state
將JSON數(shù)據(jù)與SSR后的React頁面一起發(fā)送是常見做法。一定要用無害的等價(jià)字符轉(zhuǎn)移<字符。
使用良性等效字符轉(zhuǎn)義JSON中的HTML有效值:
window.__PRELOADED_STATE__ = ${JSON.stringify(preloadedState).replace( /</g, '\\u003c')}
8、易受攻擊的React版本
React庫在過去有一些嚴(yán)重性很高的漏洞,因此最好保持最新版本。
使用npm outdated查看是否處于最新版本,從而避免使用react和react dom的易受攻擊版本。
9、linter工具
安裝能自動(dòng)檢測代碼中的安全問題并提供修正建議的Linter配置和插件。
使用 ESLint React security config[2] 來檢查安全漏洞。
配置能在使用husky這樣的庫檢測到安全相關(guān)的問題時(shí),會(huì)失敗的pre-commit鉤子。
使用Snyk自動(dòng)更新版本[3] 當(dāng)其檢查到你當(dāng)前的版本有安全問題。
10、危險(xiǎn)的庫代碼
庫代碼通常會(huì)進(jìn)行危險(xiǎn)的操作,如直接將HTML插入DOM。人工或使用linter工具來檢查庫代碼,以檢測是否有對React機(jī)制的不安全使用。
避免那些使用dangerouslySetInnerHTML、innerHTML、未驗(yàn)證的URL或其他不安全模式的庫。使用linter工具對node_modules目錄進(jìn)行檢查。
到此,相信大家對“10個(gè)React安全的使用方法教程”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
文章標(biāo)題:10個(gè)React安全的使用方法教程
當(dāng)前網(wǎng)址:http://chinadenli.net/article6/giggig.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站、服務(wù)器托管、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站策劃、軟件開發(fā)、品牌網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)