Lala Code

Lala 的前端大補帖,歡迎一起鑽研前端技術😊

0%

【DAY 14】塞入你的 HTML-dangerouslySetInnerHTML

cover

[情境任務]

美食家:這是我第一次吃到這種味道,這道菜有著前所未有的新鮮味…你們的餐點真是太好吃了~我寫了餐點評論送給你們

解師傅:哇!這怎麼好意思~太感謝了!!

我們拿到了知名美食家的評論,對餐廳非常有幫助~把它也放在菜單上吧!


在說明 dangerouslySetInnerHTML 之前,我們先來了解 XSS 攻擊



什麼是 XSS 攻擊

XSS 攻擊是有心人士利用 Web 應用程式的漏洞,植入攻擊程式碼,去竊取或修改使用者 cookie 資料、監聽使用者操作,甚至是注入 DDoS 攻擊,在前端或後端頁面會被注入外部攻擊的程式碼

所有網站都有可能被 XSS 攻擊,即使沒有資料庫,也可能會被仿冒成釣魚網站,所以在網頁的世界有流傳一句話:

永遠不要相信使用者的輸入



常見的 XSS 手法:

  • 在使用者輸入資料的地方,利用 JavaScript 程式碼,注入到網頁裡
  • 做釣魚網站,仿造相似的網站,當使用者輸入表單就可取得資料
  • 在網址的地方注入程式碼,並利用縮短網址的方式,誘使人點擊


    舉個例子

xss

在某個網站的頁面,有使用者可以搜尋資料的輸入框,
而在這個輸入框輸入了 script 程式碼 alert('welcome')







如果網站沒有做任何的防堵,將會跳出 alert 彈跳視窗

xss
可想而知,如果植入的是惡意攻擊的程式,將會是很嚴重的問題




後端需防堵 XSS

  • 因避免被置入 JavaScript 攻擊程式,需將標籤的角括號變編碼,
    如 < 會變 &lt ; ,> 為 &gt ;、有的人也會特別防堵 script 標籤
  • 定義並檢查相關 function 參數的型別



因為 Google 非常重視 XSS 的危險性,提供了 XSS 遊戲可以學習如何攻擊網站
啊~不是!是幫助我們了解駭客可能會如何攻擊網站,
千萬不要去攻擊人家網站唷~!





認識 dangerouslySetInnerHTML

學過 JavaScript 的人,相信你對 innerHTML 一定不陌生,react 的 dangerouslySetInnerHTML 就是替代 JavaScript 的 innerHTML,可以將 HTML 塞入 DOM 元素中。

而從程式碼中設置 HTML 是有風險的,因為很容易無意中將使用者暴露給 XSS 攻擊風險之下,所以取名 dangerouslySetInnerHTML 藉此提醒





dangerouslySetInnerHTML 使用方法

1
<div dangerouslySetInnerHTML={{ __html: "<span>我最愛 React</span>" }} /></div>

dangerouslySetInnerHTML 要回傳一個物件,
將 HTML 內容傳遞給 __html 屬性,就可以在這個 div 顯示 HTML 的內容






[任務解題]

我們把美食家的評論用 dangerouslySetInnerHTML 給放上去了!




結語

我們了解到 XSS 攻擊的危險,不要隨意相信使用者的輸入,畢竟這年頭的駭客實在難防,所以在使用 dangerouslySetInnerHTML 的時候也要小心,熱炒店菜單的範例就先到這邊結束,明天將會進入到 React 表單的章節囉!





Reference

[偷米騎巴哥]帶你認識XSS攻擊手法


本文為 IT 鐵人賽系列文 你 React 了嗎? 30 天解鎖 React 技能




Hey!想學習更多前端知識嗎?

最近 Lala 開了前端課程 👉【實地掌握RWD - 12小時新手實戰班】👈
無論您是 0 基礎新手,又或是想學 RWD 的初學者,
我們將帶你從零開始,深入了解並掌握 RWD 響應式網頁設計的核心技術,快來一起看看吧 😊



🚀線上課程分享

線上課程可以加速學習的時間,省去了不少看文件的時間XD,以下是我推薦的一些課程
想學習更多關於前後端的線上課程,可以參考看看。

Hahow

Hahow 有各式各樣類型的課程,而且是無限次數觀看,對學生或上班族而言,不用擔心被時間綁住



六角學院

如果你是初學者,非常推薦六角學院哦!
剛開始轉職也是上了六角的課,非常的淺顯易懂,最重要的是,隨時還有線上的助教幫你解決問題!


Udemy

Udemy 裡的課程非常的多,品質普遍不錯,且價格都滿實惠的,CP值很高!
也是很多工程師推薦的線上課程網站。
❤️