新聞中心
這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Sanitizer:給你的DOM消消毒
大家好,我卡頌。

網(wǎng)站建設哪家好,找成都創(chuàng)新互聯(lián)!專注于網(wǎng)頁設計、網(wǎng)站建設、微信開發(fā)、成都小程序開發(fā)、集團企業(yè)網(wǎng)站建設等服務項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了維西免費建站歡迎大家使用!
業(yè)務中經(jīng)常遇到需要處理「有風險的DOM」的場景,比如:
- 各種工具的文本粘貼功能
- 需要渲染服務端返回HTML的場景
為了阻止?jié)撛诘腦SS攻擊,有兩個選擇:
- escape(轉義)
- sanitize(消毒)
本文會介紹這兩者的區(qū)別以及為DOM消毒的API —— Sanitizer。
本文內容來自Safe DOM manipulation with the Sanitizer API[1]
轉義與消毒
假設,我們想將這樣一段HTML字符串插入DOM:
- const str = "
";
如果直接將其作為某個元素的innerHTML,img的onerror回調執(zhí)行JS代碼的能力會帶來XSS風險。
一種常見解決方案是:轉義字符串。
什么是escape
瀏覽器會將一些保留字符解析為HTML代碼,比如:
- <被解析為標簽的開頭
- >被解析為標簽的結尾
- ''被解析為屬性值的開頭和結尾
為了將這些保留字符顯示為文本(不被解析為HTML代碼),可以將其替換為對應的entity(HTML實體):
- <的實體為<
- >的實體為>
- ''的實體為"
這種將HTML字符替換為entity的方式被稱為escape(轉義)
什么是sanitize
對于上面的HTML字符串:
- const str = "
";
除了轉義''來規(guī)避XSS風險,還有一種更直觀的思路:直接過濾掉onerror屬性。
這種直接移除HTML字符串中有害的代碼(比如


咨詢
建站咨詢