成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

10個(gè)React安全實(shí)踐

開發(fā) 前端
我創(chuàng)建了這個(gè) React 安全最佳實(shí)踐清單,以幫助你和你的團(tuán)隊(duì)發(fā)現(xiàn)并解決 React 應(yīng)用中的安全問題。這篇文章將展示如何自動(dòng)測試你的 React 代碼中的安全問題,并修復(fù)它們。

[[381881]]

 你在找保護(hù) React 應(yīng)用程序的最佳方法嗎?那你找對(duì)地方了!

我創(chuàng)建了這個(gè) React 安全最佳實(shí)踐清單,以幫助你和你的團(tuán)隊(duì)發(fā)現(xiàn)并解決 React 應(yīng)用中的安全問題。這篇文章將展示如何自動(dòng)測試你的 React 代碼中的安全問題,并修復(fù)它們。

讓我們開始吧。

  1.  數(shù)據(jù)綁定( Data Binding)默認(rèn)的xss保護(hù)
  2.  危險(xiǎn)的URL
  3.  渲染html
  4.  直接訪問dom
  5.  服務(wù)端渲染
  6.  檢測依賴項(xiàng)中的漏洞
  7.  JSON State
  8.  檢測React易受攻擊版本
  9.  linter工具
  10.  危險(xiǎn)的庫代碼

1、數(shù)據(jù)綁定( Data Binding)默認(rèn)的 xss 保護(hù)

使用默認(rèn)的{}進(jìn)行數(shù)據(jù)綁定,React會(huì)自動(dòng)對(duì)值進(jìn)行轉(zhuǎn)義以防止XSS攻擊。但注意這種保護(hù)只在渲染textContent時(shí)候有用,渲染HTML attributes的時(shí)候是沒用的。

使用數(shù)據(jù)綁定語法{}將數(shù)據(jù)在組件中。

這樣做:

  1. <div>{data}</div> 

避免沒有經(jīng)過自定義驗(yàn)證的動(dòng)態(tài)HTML attributes值。

別這樣做: 

  1. <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é)議是否在你的白名單中。

這樣做: 

  1. function validateURL(url) {  
  2.   const parsed = new URL(url)  
  3.   return ['https:', 'http:'].includes(parsed.protocol)  
  4.  
  5. <a href={validateURL(url) ? url : ''}>Click here!</a> 

別這樣做: 

  1. <a href={attackerControlled}>Click here!</a> 

3、渲染html

React是可以通過dangerouslySetInnerHTML將html代碼直接渲染到dom節(jié)點(diǎn)中的。但以這種方式插入的任何內(nèi)容都必須事先消毒。

在將任何值放入dangerouslySetInnerHTML屬性之前,需要用dompurify對(duì)其消毒。

在插入html時(shí)用dompurify進(jìn)行處理 

  1. import purify from "dompurify";  
  2. <div dangerouslySetInnerHTML={{ __html:purify.sanitize(data) }} /> 

4、直接訪問dom

應(yīng)該避免訪問DOM然后直接將內(nèi)容注入DOM節(jié)點(diǎn)。如果你一定要插入HTML,那就先用dompurify消毒,然后再用dangerouslySetInnerHTML屬性。

這樣做: 

  1. import purify from "dompurify";  
  2. <div dangerouslySetInnerHTML={{__html:purify.sanitize(data) }} /> 

不要使用refs 和findDomNode()去訪問渲染出來的DOM元素,然后用類似innerHTML的方法或者屬性去注入內(nèi)容。

別這樣做: 

  1. 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 

  1. app.get("/", function (req, res) {  
  2.   return res.send(  
  3.     ReactDOMServer.renderToStaticMarkup(  
  4.       React.createElement("h1", null, "Hello World!")  
  5.     ) + otherData  
  6.   );  
  7. }); 

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有效值: 

  1. 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工具來檢查庫代碼,以檢測是否有對(duì)React機(jī)制的不安全使用。

避免那些使用dangerouslySetInnerHTML、innerHTML、未驗(yàn)證的URL或其他不安全模式的庫。使用linter工具對(duì)node_modules目錄進(jìn)行檢查。

后話

以上就是我要分享的10個(gè)React安全實(shí)踐。你在 React 安全方面有哪些經(jīng)驗(yàn),歡迎在評(píng)論中分享出來。 

 

責(zé)任編輯:龐桂玉 來源: 前端大全
相關(guān)推薦

2023-03-30 08:00:00

ReactJavaScript前端

2020-02-13 12:17:13

VSCodeReact代碼

2018-02-28 17:27:28

2022-08-02 09:55:04

React前端

2023-07-21 01:12:30

Reactfalse?變量

2019-07-22 10:42:11

React組件前端

2020-10-27 06:56:53

IoT產(chǎn)品實(shí)踐

2019-11-05 17:10:19

Java開發(fā)編程語言

2017-03-30 22:16:21

DevOpsIT應(yīng)用程序

2013-12-19 14:40:13

2022-10-10 14:53:00

云安全云計(jì)算云平臺(tái)

2017-05-17 15:50:34

開發(fā)前端react

2018-10-05 23:26:00

機(jī)器學(xué)習(xí)算法數(shù)據(jù)

2019-11-20 10:32:39

云計(jì)算安全技術(shù)

2021-05-08 16:11:08

Java開發(fā)代碼

2018-03-16 10:41:26

公有云多云CIO

2018-03-12 20:18:16

Linux容器安全

2020-05-31 18:50:44

云計(jì)算開源安全工具

2014-06-24 10:41:46

2022-06-23 09:04:14

ReactHooks項(xiàng)目
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 免费人成在线观看网站 | 国产欧美日韩综合精品一区二区 | 国产成人精品免高潮在线观看 | 久久久久久国产精品免费免费狐狸 | 中日av | 夜夜操操操 | 九九久久国产 | 99久久成人 | 亚洲精品av在线 | 97人人超碰 | 国产精品久久欧美久久一区 | 毛片一级片| 国产高清久久久 | 天天插天天操 | 国产一区二区三区在线 | 男女精品久久 | 爱爱综合网| 天天干精品 | 日韩在线观看中文字幕 | 欧美日韩在线一区二区 | 天天操夜夜操 | 中文字幕视频免费 | 成人福利在线观看 | 欧美激情va永久在线播放 | 日日夜夜狠狠操 | 亚洲精品乱码久久久久久蜜桃 | 亚洲精品欧美 | 日韩av第一页 | 国产精品一区二区久久久久 | 成年人网站免费视频 | 亚洲电影一区 | 羞羞视频免费观 | 午夜影院在线观看 | 精品丝袜在线 | 最新国产在线 | 国产成人精品免费视频大全最热 | 欧美精品91 | 久久精品91 | 中文字幕一区二区三区精彩视频 | 日本在线中文 | 福利视频亚洲 |