Document: parseHTMLUnsafe() éçã¡ã½ãã
Baseline 2025 >
æè¿å©ç¨å¯è½
2025å¹´9æä»¥éããã®æ©è½ã¯ææ°ã®ãã¼ã¸ã§ã³ã®ç«¯æ«ããã³ãã©ã¦ã¶ã¼ã§åä½ãã¾ããå¤ã端æ«ããã©ã¦ã¶ã¼ã§ã¯åä½ããªããã¨ãããã¾ãã
è¦å: ãã®ã¡ã½ããã¯ãå ¥åã HTML ã¨ãã¦æ§æè§£æããDOM ã«æ¸ãè¾¼ã¿ã¾ãã ãã®ãã㪠API ã¯ã¤ã³ã¸ã§ã¯ã·ã§ã³ã·ã³ã¯ã¨å¼ã°ããå ¥åãæ»æè ããæ¥ããã®ã§ããã°ãã¯ãã¹ãµã¤ãã¹ã¯ãªããã£ã³ã° (XSS)æ»æã®çµè·¯ã¨ãªãå¯è½æ§ãããã¾ãã
ãã®ãªã¹ã¯ã軽æ¸ããã«ã¯ãæååã®ä»£ããã«å¸¸ã« TrustedHTML ãªãã¸ã§ã¯ããå²ãå½ã¦ãä¿¡é ¼åãå¼·å¶ããããã«ãã¦ãã ããã
詳ããã¯ã»ãã¥ãªãã£ã®æ³¨æäºé
ãåç
§ãã¦ãã ããã
ã¡ã¢:
ãã®ã¡ã½ããã®ä»£ããã«ã¯ã対å¿ãã¦ãããã©ã¦ã¶ã¼ã§ã¯ãã»ã¼å¸¸ã« Document.parseHTML() ã使ç¨ãã¾ãããããªããªãããã®ã¡ã½ããã¯å¸¸ã« XSS ã®ãªã¹ã¯ããã HTML ã¨ã³ãã£ãã£ãé¤å»ããããã§ãã
parseHTMLUnsafe() 㯠Document ãªãã¸ã§ã¯ãã®éçã¡ã½ããã§ãHTML å
¥åãæ§æè§£æãããªãã·ã§ã³ã§ä¸è¦ãª HTML è¦ç´ ã屿§ãé¤å¤ãã¦ãæ°ãã Document ã¤ã³ã¹ã¿ã³ã¹ãçæããããã«ä½¿ç¨ããã¾ãã
æ§æ
Document.parseHTMLUnsafe(input)
Document.parseHTMLUnsafe(input, options)
弿°
input-
æ§æè§£æãã HTML ãå®ç¾©ãã
TrustedHTMLã¤ã³ã¹ã¿ã³ã¹ã¾ãã¯æååã§ãã optionsçç¥å¯-
以ä¸ã®ãªãã·ã§ã³å¼æ°ãæã£ããªãã·ã§ã³ãªãã¸ã§ã¯ãã§ãã
sanitizerçç¥å¯-
å ¥åã®ã©ã®è¦ç´ ã許å¯ãããã¨ãã§ãããã¾ãã¯é¤å»ãããããå®ç¾©ããã
Sanitizerã¾ãã¯SanitizerConfigãªãã¸ã§ã¯ãã§ãã ããã¯ãå¤ã"default"ã®æååã§ãããããã®å ´åã¯ï¼XSS å¯¾çæ¸ã¿ã®ï¼ããã©ã«ãã®ãµãã¿ã¤ã¶ã¼è¨å®ãæã¤Sanitizerãé©ç¨ããã¾ãã æå®ããªãå ´åã¯ããµãã¿ã¤ã¶ã¼ã¯ä½¿ç¨ããã¾ããããªããåãè¨å®ãè¤æ°å使ç¨ããå ´åã¯ã
Sanitizerã使ç¨ããå¿ è¦ã«å¿ãã¦ããã夿´ããæ¹ãå¹ççã§ããã¨èãããã¾ãã
è¿å¤
Document ã§ãã
ä¾å¤
TypeError-
ããã¯æ¬¡ã®å ´åã«çºçãã¾ãã
htmlãæååã§æ¸¡ãããå ´åï¼ä¿¡é ¼åãCSP ã«ãã£ã¦å¼·å¶ããã¦ãããããã©ã«ãããªã·ã¼ãå®ç¾©ããã¦ããªãå ´åï¼ãoptions.sanitizerã«æ¬¡ã®ãããããæ¸¡ãããå ´åãSanitizerConfigãæå¹ã§ãªããã®ã ä¾ãã°ã"allowed" 㨠"removed" ã®ä¸¡æ¹ã®è¨å®é ç®ãå«ãæ§æãªã©ã§ãã"default"以å¤ã®å¤ã®æååãSanitizerãSanitizerConfigãæååã®ãããã§ããªãå¤ã
解説
parseHTMLUnsafe() éçã¡ã½ããã使ç¨ããã¨ãæ°ãã Document ã¤ã³ã¹ã¿ã³ã¹ãçæããå¿
è¦ã«å¿ãã¦ä¸è¦ãªè¦ç´ ã屿§ããã£ã«ã¿ãªã³ã°ãããã¨ãã§ãã¾ãã
çæããã Document ã®ã³ã³ãã³ãã¿ã¤ã㯠"text/html"ãæåã»ãã 㯠UTF-8ãURL 㯠"about:blank" ã¨ãªãã¾ãã
å
¥å HTML ã«ã¯ã宣è¨åã·ã£ãã¦ã«ã¼ããå«ã¾ãã¦ããå ´åãããã¾ãã
HTML ã®æååãå
·ä½çãªã·ã£ãã¦ãã¹ãå
ã§è¤æ°ã®å®£è¨åã·ã£ãã¦ã«ã¼ããå®ç¾©ãã¦ããå ´åãæåã®ShadowRootã®ã¿ãçæããã¾ãããã以éã®å®£è¨ã¯ããã®ã·ã£ãã¦ã«ã¼ãå
ã®<template>è¦ç´ ã¨ãã¦æ§æè§£æããã¾ãã
parseHTMLUnsafe() ã¯ãããã©ã«ãã§ç¡å®³åå¦çãè¡ãã¾ããã
ãµãã¿ã¤ã¶ã¼ã弿°ã¨ãã¦æ¸¡ãããªãã£ãå ´åãå
¥åã«å«ã¾ãããã¹ã¦ã® HTML ã¨ã³ãã£ãã£ãæ¿å
¥ããã¾ãã
ã»ãã¥ãªãã£ã®æ³¨æäºé
ã¡ã½ããåã®æ¥å°¾è¾ "Unsafe" ã¯ããã®ã¡ã½ããããã¹ã¦ã® XSS ãªã¹ã¯ã®ãã HTML ã¨ã³ãã£ãã£ã®é¤å»ãå¼·å¶ããªããã¨ã示ãã¦ãã¾ãï¼Document.parseHTML()ã¨ã¯ç°ãªãã¾ãï¼ã
é©åãªãµãã¿ã¤ã¶ã¼ã¨ä½µç¨ããã°ãã®ããã«åä½ããããã¨ãã§ãã¾ããã广çãªãµãã¿ã¤ã¶ã¼ãä¿æããå¿
è¦ã¯ãªãããµãã¿ã¤ã¶ã¼èªä½ã使ç¨ããªãã¦ãããã®ã§ãï¼
ãããã£ã¦ããã®ã¡ã½ããã¯ãã¦ã¼ã¶ã¼ããæå®ãããæ½å¨çã«å®å
¨ã§ãªãæååããå
ã«ç¡å®³åããããã¨ãªã DOM ã«æ³¨å
¥ããããã¯ãã¹ãµã¤ãã¹ã¯ãªããã£ã³ã° (XSS)æ»æã®æ»æçµè·¯ã¨ãªãå¾ã¾ãã
ãã®ãªã¹ã¯ã軽æ¸ããã«ã¯ãæååã®ä»£ããã«å¸¸ã« TrustedHTML ãªãã¸ã§ã¯ããæ¸¡ãããã«ããCSP ã® require-trusted-types-for ãã£ã¬ã¯ãã£ãã使ç¨ãã¦ä¿¡é ¼åãå¼·å¶ãããã¨ã§ããã®ãªã¹ã¯ã軽æ¸ããå¿
è¦ãããã¾ãã
ããã«ãããå
¥åã¯å¤æé¢æ°ãééãããã¨ã«ãªããæ¿å
¥ãããåã«å
¥åãç¡å®³åãã¦ãæ½å¨çã«å±éºãªãã¼ã¯ã¢ããï¼<script> è¦ç´ ãã¤ãã³ããã³ãã©ã¼å±æ§ãªã©ï¼ãé¤å»ãããã¨ãå¯è½ã«ãªãã¾ãã
TrustedHTML ã使ç¨ãããã¨ã§ãç¡å®³åå¦çã®ã³ã¼ããæå¹ã§ãããã©ãããããã¹ã¦ã®ã¤ã³ã¸ã§ã¯ã·ã§ã³ã»ã·ã³ã¯ã«æ£å¨ãããã®ã§ã¯ãªããããããªå ´æã ãã§ç£æ»ã»æ¤æ»ãããã¨ãã§ãã¾ãã
TrustedHTML ã使ç¨ããå ´åãã¡ã½ããã«ç¡å®³åå¦ç颿°ã渡ãå¿
è¦ã¯ããã¾ããã
ä½ããã®çç±ã§ TrustedHTML ï¼ãããã¯ãããã«æã¾ããã®ã¯ setHTML()ï¼ã使ç¨ã§ããªãå ´åã¯ã次ã«å®å
¨ãªé¸æè¢ã¨ãã¦ãXSS å¯¾çæ¸ã¿ã® ããã©ã«ãã®ãµãã¿ã¤ã¶ã¼è¨å® ã¨ã¨ãã« setHTMLUnsafe() ã使ç¨ãããã¨ããå§ããã¾ãã
仿§æ¸
| 仿§æ¸ |
|---|
| HTML > # dom-parsehtmlunsafe > |
ãã©ã¦ã¶ã¼ã®äºææ§
é¢é£æ å ±
Document.parseHTML()Element.setHTML()ããã³Element.setHTMLUnsafe()ShadowRoot.setHTML()ããã³ShadowRoot.setHTMLUnsafe()DOMParser.parseFromString(): HTML ã¾ã㯠XML ã DOM ããªã¼ã«å ¥ãã- HTML ç¡å®³å API