Reactã®å®éšçæ©èœtaintObjectReferenceãæ¢ãããªããžã§ã¯ãã»ãã¥ãªãã£ãžã®åœ±é¿ãšãåŠçé床ãå®å šãªããŒã¿æ±ãã«ã©ã圱é¿ãããã解説ããŸãã
Reactã®experimental_taintObjectReference: åŠçé床ã«ãããªããžã§ã¯ãã»ãã¥ãªãã£ã®åŒ·å
æ¥éã«é²åããWebéçºã®äžçã«ãããŠãæ©å¯ããŒã¿ã®ã»ãã¥ãªãã£ã確ä¿ããããšã¯æãéèŠã§ããã¢ããªã±ãŒã·ã§ã³ãè€éåããã«ã€ããŠãæœåšçãªæ»æãã¯ãã«ãå¢ããå
ç¢ãªã»ãã¥ãªãã£å¯Ÿçã®å¿
èŠæ§ãé«ãŸã£ãŠããŸãããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ãæ§ç¯ããããã®äž»èŠãªJavaScriptã©ã€ãã©ãªã§ããReactã¯ãå¯èœãªããšã®éçãåžžã«æŒãåºããŠããããã®å®éšçãªæ©èœã¯ãã°ãã°ããã©ãŒãã³ã¹ãšã»ãã¥ãªãã£ã«ãããå°æ¥ã®é©æ°ãžã®éãéããŸãããã®ãããªææãªãå®éšçã§ã¯ãããã®ã®ãæ©èœã®äžã€ãexperimental_taintObjectReferenceã§ãããã®ããã°èšäºã§ã¯ããã®æ©èœãæ·±ãæãäžãããªããžã§ã¯ãã»ãã¥ãªãã£ãžã®åœ±é¿ããããŠæ¥µããŠéèŠãªç¹ãšããŠããã®æå¹æ§ã«ãããŠåŠçé床ãããã«éèŠãªåœ¹å²ãæãããã«çŠç¹ãåœãŠãŸãã
çŸä»£ã®Webã¢ããªã±ãŒã·ã§ã³ã«ããããªããžã§ã¯ãã»ãã¥ãªãã£ã®çè§£
Reactã®å ·äœçãªæ©èœã«é£ã³èŸŒãåã«ããªããžã§ã¯ãã»ãã¥ãªãã£ã®åºæ¬çãªèª²é¡ãææ¡ããããšãäžå¯æ¬ ã§ããJavaScriptã§ã¯ããªããžã§ã¯ãã¯åçã§å¯å€ã§ãããŠãŒã¶ãŒèªèšŒæ å ±ãè²¡åæ å ±ãããç¬èªã®ããžãã¹ããžãã¯ãŸã§ãå€çš®å€æ§ãªããŒã¿ãä¿æã§ããŸãããããã®ãªããžã§ã¯ããåãæž¡ããããã倿Žãããããä¿¡é Œã§ããªãç°å¢ïŒãµãŒãããŒãã£ã®ã¹ã¯ãªããããåãã¢ããªã±ãŒã·ã§ã³ã®ç°ãªãéšåãªã©ïŒã«å ¬éãããããããšãæªæã®ããæ»æè ã®æœåšçãªæšçãšãªããŸãã
ãªããžã§ã¯ãã«é¢é£ããäžè¬çãªã»ãã¥ãªãã£è匱æ§ã«ã¯ã次ã®ãããªãã®ããããŸãïŒ
- ããŒã¿æŒæŽ©: ãªããžã§ã¯ãå ã®æ©å¯ããŒã¿ããæå³ããããŠäžæ£ãªãŠãŒã¶ãŒãããã»ã¹ã«å ¬éãããããšã
- ããŒã¿æ¹ãã: ãªããžã§ã¯ãã®ããããã£ãæªæãæã£ãŠå€æŽããã¢ããªã±ãŒã·ã§ã³ã®äžæ£ãªåäœãè©æ¬ºçãªååŒãåŒãèµ·ããããšã
- ãããã¿ã€ãæ±æ: JavaScriptã®ãããã¿ã€ããã§ãŒã³ãæªçšããŠãªããžã§ã¯ãã«æªæã®ããããããã£ãæ³šå ¥ããæ»æè ã«ææ Œãããæš©éãã¢ããªã±ãŒã·ã§ã³ã®å¶åŸ¡æš©ãäžããå¯èœæ§ãããããšã
- ã¯ãã¹ãµã€ãã¹ã¯ãªããã£ã³ã°ïŒXSSïŒ: æäœããããªããžã§ã¯ãããŒã¿ãä»ããŠæªæã®ããã¹ã¯ãªãããæ³šå ¥ããããããŠãŒã¶ãŒã®ãã©ãŠã¶ã§å®è¡ãããããšã
åŸæ¥ã®ã»ãã¥ãªãã£å¯Ÿçã¯ã峿 Œãªå ¥åæ€èšŒããµãã¿ã€ãºãæ éãªã¢ã¯ã»ã¹å¶åŸ¡ã䌎ãããšããããããŸãããããããããã®æ¹æ³ã¯ãç¹ã«ããŒã¿ãããŒãè€éãªå€§èŠæš¡ã¢ããªã±ãŒã·ã§ã³ã§ã¯ãå æ¬çã«å®è£ ããã®ãè€éã«ãªãå¯èœæ§ããããŸããããã§ãããŒã¿ã®åºæãšä¿¡é Œæ§ã«å¯ŸããŠããããã现ããªå¶åŸ¡ãæäŸããæ©èœãéåžžã«äŸ¡å€ã®ãããã®ãšãªããŸãã
Reactã®experimental_taintObjectReferenceã®ç޹ä»
Reactã®experimental_taintObjectReferenceã¯ããæ±æãããïŒtaintedïŒããªããžã§ã¯ãåç
§ãšããæŠå¿µãå°å
¥ããããšã§ããããã®ãªããžã§ã¯ãã»ãã¥ãªãã£ã®èª²é¡ã®ããã€ãã«åãçµãããšãç®æããŠããŸããæ¬è³ªçã«ããã®æ©èœã«ãããéçºè
ã¯ç¹å®ã®ãªããžã§ã¯ãåç
§ãæœåšçã«å®å
šã§ãªãããŸãã¯ä¿¡é Œã§ããªããœãŒã¹ããæ¥ããã®ãšããŠããŒã¯ããããšãã§ããŸãããã®ããŒãã³ã°ã«ãããã©ã³ã¿ã€ã ãã§ãã¯ãéçè§£æããŒã«ãããã®æ©å¯ããŒã¿ã誀çšããå¯èœæ§ã®ããæäœã«ãã©ã°ãç«ãŠããã鲿¢ãããããããšãå¯èœã«ãªããŸãã
äžå¿çãªã¢ã€ãã¢ã¯ãæ¬è³ªçã«å®å šãªããŒã¿ãšãå€éšã®æœåšçã«æªæã®ãããœãŒã¹ããæ¥ãå¯èœæ§ãããããæ éãªåãæ±ããå¿ èŠãªããŒã¿ãšãåºå¥ããã¡ã«ããºã ãäœæããããšã§ããããã¯ç¹ã«ã次ã®ãããªã·ããªãªã§éèŠã§ãïŒ
- ãŠãŒã¶ãŒçæã³ã³ãã³ã: ãŠãŒã¶ãŒã«ãã£ãŠéä¿¡ãããããŒã¿ãå®å šã«ä¿¡é Œããããšã¯ã§ããŸããã
- å€éšAPIã¬ã¹ãã³ã¹: ãµãŒãããŒãã£ã®ãµãŒãã¹ããååŸããããŒã¿ãåãã»ãã¥ãªãã£åºæºã«æºæ ããŠããªãå¯èœæ§ããããŸãã
- èšå®ããŒã¿: ç¹ã«ãèšå®ãåçã«ãŸãã¯ä¿¡é Œã§ããªãå Žæããèªã¿èŸŒãŸããå Žåã
ãªããžã§ã¯ãåç
§ã«taintObjectReferenceã§ããŒã¯ãä»ããããšã«ãããéçºè
ã¯æ¬è³ªçã«ãã®åç
§ã«ãã»ãã¥ãªãã£ã©ãã«ããäœæããŠããããšã«ãªããŸãããã®æ±æãããåç
§ããã»ãã¥ãªãã£è匱æ§ã«ã€ãªããå¯èœæ§ã®ããæ¹æ³ïŒäŸïŒãµãã¿ã€ãºãªãã§çŽæ¥HTMLã«ã¬ã³ããªã³ã°ãããé©åãªãšã¹ã±ãŒããªãã§ããŒã¿ããŒã¹ã¯ãšãªã§äœ¿çšãããªã©ïŒã§äœ¿çšããããšãã·ã¹ãã ãä»å
¥ã§ããŸãã
ä»çµã¿ïŒæŠå¿µïŒ
å®éšçãªæ§è³ªäžãæ£ç¢ºãªå®è£
ã®è©³çްã¯å€æŽãããå¯èœæ§ããããŸãããexperimental_taintObjectReferenceã®æŠå¿µã¢ãã«ã«ã¯æ¬¡ã®ãã®ãå«ãŸããŸãïŒ
- æ±æïŒTaintingïŒ: éçºè ããªããžã§ã¯ãåç §ãæ±æãããŠãããšæç€ºçã«ããŒã¯ãããã®ä¿¡é Œã§ããªãå¯èœæ§ã®ãããœãŒã¹ã瀺ããŸããããã«ã¯ã颿°åŒã³åºããã³ãŒãå ã®ãã£ã¬ã¯ãã£ããå«ãŸããå ŽåããããŸãã
- äŒæïŒPropagationïŒ: ãã®æ±æãããåç §ãä»ã®é¢æ°ã«æž¡ãããããæ°ãããªããžã§ã¯ãã®äœæã«äœ¿çšãããããããšãæ±æãäŒæããããŒã¿ãããŒå šäœã§æ©å¯æ§ãç¶æãããããã«ããŸãã
- 匷å¶/æ€åºïŒEnforcement/DetectionïŒ: ã¢ããªã±ãŒã·ã§ã³ã®å®è¡ã«ãããéèŠãªãã€ã³ãïŒäŸïŒDOMãžã®ã¬ã³ããªã³ã°åãæ©å¯æäœã§ã®äœ¿çšåïŒã§ãã·ã¹ãã ã¯æ±æãããåç §ãäžé©åã«äœ¿çšãããŠããªãããã§ãã¯ããŸããããããã§ããã°ããšã©ãŒãã¹ããŒãããããèŠåããã°ã«èšé²ããããããŠãæœåšçãªæªçšãé²ããŸãã
ãã®ã¢ãããŒãã¯ãã»ãã¥ãªãã£ãçŽç²ã«é²åŸ¡çãªå§¿å¢ãããããç©æ¥µçãªå§¿å¢ãžãšã·ãããããŸããèšèªãšãã¬ãŒã ã¯ãŒã¯èªäœããéçºè ãããŒã¿åŠçã«é¢é£ãããªã¹ã¯ãç¹å®ãã軜æžããã®ãå©ããã®ã§ãã
åŠçé床ã®éèŠãªåœ¹å²
ã©ããªã»ãã¥ãªãã£ã¡ã«ããºã ã®æå¹æ§ããç¹ã«ã©ã³ã¿ã€ã ã§åäœãããã®ã«ã€ããŠã¯ããã®ããã©ãŒãã³ã¹ãªãŒããŒãããã«å€§ããäŸåããŸããæ±æããããªããžã§ã¯ãåç
§ã®ãã§ãã¯ãã¢ããªã±ãŒã·ã§ã³ã®ã¬ã³ããªã³ã°ãéèŠãªæäœã倧å¹
ã«é
ãããå Žåãéçºè
ã¯ãã®æ¡çšããããããããããŸããããã¢ããªã±ãŒã·ã§ã³ã®æãæ©å¯æ§ã®é«ãéšåã«ããé©çšã§ããªããããããŸãããããã§ããªããžã§ã¯ãã»ãã¥ãªãã£åŠçéåºŠã®æŠå¿µãexperimental_taintObjectReferenceã«ãšã£ãŠæãéèŠã«ãªããŸãã
ãªããžã§ã¯ãã»ãã¥ãªãã£åŠçé床ãšã¯äœãïŒ
ãªããžã§ã¯ãã»ãã¥ãªãã£åŠçé床ãšã¯ããªããžã§ã¯ãã«å¯Ÿããã»ãã¥ãªãã£é¢é£ã®æäœãå®è¡ãããèšç®å¹çãæããŸããexperimental_taintObjectReferenceã®å Žåãããã«ã¯ä»¥äžãå«ãŸããŸãïŒ
- ãªããžã§ã¯ããæ±ææžã¿ãšããŠããŒã¯ããé床ã
- æ±æã®äŒæå¹çã
- ã©ã³ã¿ã€ã ã§ã®æ±æç¶æ ãã§ãã¯ã®ããã©ãŒãã³ã¹ã³ã¹ãã
- ã»ãã¥ãªãã£ããªã·ãŒã«éåããå Žåã®ãšã©ãŒåŠçãä»å ¥ã®ãªãŒããŒãããã
ãã®ãããªå®éšçãªæ©èœã®ç®æšã¯ãåã«ã»ãã¥ãªãã£ãæäŸããã ãã§ãªãã蚱容ã§ããªãããã©ãŒãã³ã¹äœäžãå°å ¥ããããšãªããããæäŸããããšã§ããããã¯ãåºç€ãšãªãã¡ã«ããºã ãé«åºŠã«æé©åãããŠããå¿ èŠãããããšãæå³ããŸãã
åŠçé床ã«åœ±é¿ãäžããèŠå
ããã€ãã®èŠå ããexperimental_taintObjectReferenceãã©ãã ãéãåŠçããããã«åœ±é¿ãäžããå¯èœæ§ããããŸãïŒ
- ã¢ã«ãŽãªãºã ã®å¹ç: æ±æã®ããŒãã³ã°ãäŒæããã§ãã¯ã«äœ¿çšãããã¢ã«ãŽãªãºã ã¯éåžžã«éèŠã§ããå¹ççãªã¢ã«ãŽãªãºã ãããããã¯åºç€ãšãªãJavaScriptãšã³ãžã³ã®æé©åãæŽ»çšãããã®ããããé«éã«ãªããŸãã
- ããŒã¿æ§é ã®èšèš: æ±ææ å ±ããªããžã§ã¯ãã«ã©ã®ããã«é¢é£ä»ããããã©ã®ããã«ç §äŒããããã¯ãé床ã«å€§ããªåœ±é¿ãäžããŸããå¹ççãªããŒã¿æ§é ãéµã§ãã
- ã©ã³ã¿ã€ã ç°å¢ã®æé©å: JavaScriptãšã³ãžã³ïŒäŸïŒChromeã®V8ïŒã¯éèŠãªåœ¹å²ãæãããŸããæ±æãã§ãã¯ããšã³ãžã³ã«ãã£ãŠæé©åã§ããå Žåãããã©ãŒãã³ã¹ã®åäžã¯çžåœãªãã®ã«ãªããŸãã
- æ±æã®ç¯å²: æ±æãããªããžã§ã¯ããæžãããããæ±æã®äŒæãå¿ èŠãªãã¹ã®ã¿ã«éå®ãããããããšã§ãå šäœçãªåŠçè² è·ã軜æžã§ããŸãã
- ãã§ãã¯ã®è€éã: æ±æããããªããžã§ã¯ãã®ãå®å šã§ãªãã䜿çšãæ§æããã«ãŒã«ãè€éã§ããã»ã©ããã§ãã¯ã«å¿ èŠãªåŠçèœåãé«ããªããŸãã
å¹ççãªåŠçã«ããããã©ãŒãã³ã¹äžã®å©ç¹
experimental_taintObjectReferenceãé«éãã€äœãªãŒããŒãããã§åŠçããããšãããã€ãã®å©ç¹ãçãŸããŸãïŒ
- ããåºãæ¡çš: ã¢ããªã±ãŒã·ã§ã³ã®å¿çæ§ã«æªåœ±é¿ãäžããªãã»ãã¥ãªãã£æ©èœã§ããã°ãéçºè ã¯ããç©æ¥µçã«äœ¿çšããã§ãããã
- å æ¬çãªã»ãã¥ãªãã£: é«éãªåŠçã«ãããæ±æãã§ãã¯ãã¢ããªã±ãŒã·ã§ã³å šäœã§ããåºç¯ã«é©çšã§ããããå€ãã®æœåšçãªè匱æ§ãã«ããŒã§ããŸãã
- ãªã¢ã«ã¿ã€ã ä¿è·: é«éãªãã§ãã¯ã«ãããå±éåŸã®åæã ãã«é Œãã®ã§ã¯ãªããã»ãã¥ãªãã£åé¡ã®ãªã¢ã«ã¿ã€ã ãªæ€åºãšé²æ¢ãå¯èœã«ãªããŸãã
- éçºè äœéšã®åäž: ãã¬ãŒã ã¯ãŒã¯ãéçºã®ããã«ããã¯ã«ãªãããšãªãã»ãã¥ãªãã£ç¶æãæ¯æŽããŠããããšãç¥ã£ãŠãããããéçºè ã¯èªä¿¡ãæã£ãŠæ©èœæ§ç¯ã«éäžã§ããŸãã
å®è·µçãªåœ±é¿ãšãŠãŒã¹ã±ãŒã¹
å¹ççãªåŠçãšçµã¿åãããããšã§experimental_taintObjectReferenceãç»æçãšãªããããããã€ãã®å®è·µçãªã·ããªãªãèããŠã¿ãŸãããïŒ
1. ã¬ã³ããªã³ã°ã®ããã®ãŠãŒã¶ãŒå ¥åã®ãµãã¿ã€ãº
ã·ããªãª: ãœãŒã·ã£ã«ã¡ãã£ã¢ã¢ããªã±ãŒã·ã§ã³ããŠãŒã¶ãŒã®ã³ã¡ã³ãã衚瀺ããŸãããŠãŒã¶ãŒã®ã³ã¡ã³ãã¯æ¬è³ªçã«ä¿¡é Œã§ãããæªæã®ããHTMLãJavaScriptãå«ãå¯èœæ§ããããŸãããããã®ã³ã¡ã³ããçŽæ¥DOMã«ã¬ã³ããªã³ã°ããããšãäžè¬çãªè匱æ§ã§ããXSSãçºçããŸãã
experimental_taintObjectReferenceã䜿çšããå Žå:
- ãŠãŒã¶ãŒã®ã³ã¡ã³ãããŒã¿ãå«ããªããžã§ã¯ãã¯ãAPIããååŸããæç¹ã§æ±ææžã¿ãšããŠããŒã¯ãããŸãã
- ãã®æ±æãããããŒã¿ãã¬ã³ããªã³ã°ã³ã³ããŒãã³ãã«æž¡ããããšãReactã¯ãããèªåçã«ã€ã³ã¿ãŒã»ããã§ããŸãã
- ã¬ã³ããªã³ã°ã®åã«ãReactã¯ã»ãã¥ãªãã£ãã§ãã¯ãå®è¡ããŸããæ±æãæ€åºãããããŒã¿ãå®å šã§ãªãæ¹æ³ïŒäŸïŒHTMLãšããŠçŽæ¥ïŒã§ã¬ã³ããªã³ã°ãããããšããŠããå ŽåãReactã¯ãããèªåçã«ãµãã¿ã€ãºããïŒäŸïŒHTMLãšã³ãã£ãã£ããšã¹ã±ãŒãããïŒãããšã©ãŒãã¹ããŒããŠXSSæ»æãé²ãããšãã§ããŸãã
åŠçé床ãžã®åœ±é¿: ãããã·ãŒã ã¬ã¹ã§ããããã«ã¯ãæ±æãã§ãã¯ãšæœåšçãªãµãã¿ã€ãºãã¬ã³ããªã³ã°ãã€ãã©ã€ã³äžã«éåžžã«è¿ éã«è¡ãããå¿ èŠããããŸãããã§ãã¯èªäœãã³ã¡ã³ã衚瀺ã«é¡èãªé å»¶ãåŒãèµ·ããå ŽåããŠãŒã¶ãŒã¯å£åããäœéšãããããšã«ãªããŸããé«ãåŠçé床ã¯ããã®ã»ãã¥ãªãã£å¯ŸçããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ã®æµåæ§ã劚ããªãããšãä¿èšŒããŸãã
2. æ©å¯æ§ã®é«ãAPIããŒãããŒã¯ã³ã®åãæ±ã
ã·ããªãª: ã¢ããªã±ãŒã·ã§ã³ã¯å€éšãµãŒãã¹ã«ã¢ã¯ã»ã¹ããããã«APIããŒã䜿çšããŸãããããã®ããŒãåºç¯ãªã¢ã¯ã»ã¹ãèš±å¯ããã»ã©æ©å¯æ§ãé«ãå Žåãã¯ã©ã€ã¢ã³ããµã€ãã§å ¬éãããã¹ãã§ã¯ãããŸãããããããã¢ãŒããã¯ãã£ãäžååãªå Žåãããããæå³ããã¯ã©ã€ã¢ã³ããµã€ãã®ã³ãŒãã«å«ãŸããŠããŸãããšããããŸãã
experimental_taintObjectReferenceã䜿çšããå Žå:
- APIããŒã誀ã£ãŠã¯ã©ã€ã¢ã³ããµã€ãã®JavaScriptãªããžã§ã¯ãã«èªã¿èŸŒãŸãããããæ±ææžã¿ãšããŠããŒã¯ãããŠããå Žåããã®ååšã«ãã©ã°ãç«ãŠãããšãã§ããŸãã
- ãã®ãªããžã§ã¯ãããä¿¡é Œã§ããªãã³ã³ããã¹ãã«éãè¿ãããå¯èœæ§ã®ããJSONæååã«ã·ãªã¢ã©ã€ãºããããšããããæ©å¯æ å ±ãæ±ãããšãæå³ããŠããªãã¯ã©ã€ã¢ã³ããµã€ãã®ã¹ã¯ãªããã§äœ¿çšããããšããããããšãèŠåããšã©ãŒãããªã¬ãŒãããå¯èœæ§ããããŸãã
åŠçé床ãžã®åœ±é¿: APIããŒã¯ãµãŒããŒãµã€ãã§åŠçãããããšãå€ãã§ããããã€ããªããã¢ãŒããã¯ãã£ãéçºäžã«ããã®ãããªæŒæŽ©ãçºçããå¯èœæ§ããããŸããé«éãªæ±æã®äŒæãšãã§ãã¯ã¯ãæ©å¯æ§ã®é«ãå€ãããã€ãã®ã³ã³ããŒãã³ããä»ããŠæž¡ããããªããžã§ã¯ãã«èª€ã£ãŠå«ãŸããå Žåã§ãããã®æ±æç¶æ ãå¹ççã«è¿œè·¡ãããå ¬éãããã¹ãã§ãªããã€ã³ãã«éãããšãã«ãã©ã°ãç«ãŠãããããšãæå³ããŸãã
3. ãã€ã¯ããµãŒãã¹éã®å®å šãªããŒã¿è»¢éïŒæŠå¿µçæ¡åŒµïŒ
ã·ããªãª: experimental_taintObjectReferenceã¯äž»ã«ã¯ã©ã€ã¢ã³ããµã€ãã®Reactæ©èœã§ãããæ±æåæã®åºæ¬ååã¯ããåºç¯ã«é©çšå¯èœã§ããç°ãªããã€ã¯ããµãŒãã¹ãéä¿¡ãããããã®éã§æž¡ãããããŒã¿ã®äžéšãæ©å¯ã§ããã·ã¹ãã ãæ³åããŠã¿ãŠãã ããã
æ±æåæã䜿çšããå ŽåïŒæŠå¿µïŒ:
- ãããµãŒãã¹ãå€éšãœãŒã¹ããæ©å¯ããŒã¿ãåãåãããããå¥ã®å éšãµãŒãã¹ã«æž¡ãåã«æ±ææžã¿ãšããŠããŒã¯ãããããããŸããã
- åä¿¡åŽã®ãµãŒãã¹ã¯ããã®æ±æãæç¥ããããã«èšèšãããŠããã°ããã®ããŒã¿ã®åŠçæ¹æ³ã«è¿œå ã®ãã§ãã¯ãå¶éã課ãããšãã§ããŸãã
åŠçé床ãžã®åœ±é¿: ãµãŒãã¹ééä¿¡ã§ã¯ãã¬ã€ãã³ã·ãŒãéèŠãªèŠçŽ ã§ããæ±æãã§ãã¯ããªã¯ãšã¹ãã«å€§å¹ ãªé å»¶ã远å ããå Žåããã€ã¯ããµãŒãã¹ã¢ãŒããã¯ãã£ã®å¹çã¯äœäžããŸãããã®ãããªã·ã¹ãã ãããã©ãŒãã³ã¹ãç¶æããããã«ã¯ãé«éãªæ±æåŠçãäžå¯æ¬ ã§ãã
課é¡ãšå°æ¥ã®èæ ®äºé
å®éšçãªæ©èœãšããŠãexperimental_taintObjectReferenceã«ã¯ç¬èªã®èª²é¡ãšå°æ¥ã®éçºé åããããŸãïŒ
- éçºè ã®çè§£ãšæ¡çš: éçºè ã¯æ±æã®æŠå¿µãšãããããã€ãã©ã®ããã«å¹æçã«é©çšããããçè§£ããå¿ èŠããããŸããæç¢ºãªããã¥ã¡ã³ããšæè²ãªãœãŒã¹ãéèŠã«ãªããŸãã
- åœéœæ§ãšåœé°æ§: ä»ã®ã»ãã¥ãªãã£ã·ã¹ãã ãšåæ§ã«ãåœéœæ§ïŒå®å šãªããŒã¿ãå±éºãšãã©ã°ä»ãããïŒãåœé°æ§ïŒå±éºãªããŒã¿ããã©ã°ä»ããæãªãïŒã®ãªã¹ã¯ããããŸããããããæå°éã«æããããã®ã·ã¹ãã ã®èª¿æŽã¯ãç¶ç¶çãªããã»ã¹ãšãªããŸãã
- ãã«ãããŒã«ããªã³ã¿ãŒãšã®çµ±å: æå€§éã®å¹æãåŸãããã«ã¯ãæ±æåæãéçè§£æããŒã«ããªã³ã¿ãŒã«çµ±åããéçºè ãã©ã³ã¿ã€ã åã«æœåšçãªåé¡ãææã§ããããã«ããããšãçæ³çã§ãã
- ããã©ãŒãã³ã¹ãã¥ãŒãã³ã°: ãã®æ©èœã®å°æ¥æ§ã¯ããã®ããã©ãŒãã³ã¹ã«ããã£ãŠããŸããåºç€ãšãªãåŠçé床ã®ç¶ç¶çãªæé©åãããã®æåã®éµãšãªããŸãã
- JavaScriptãšReactã®é²å: èšèªãšãã¬ãŒã ã¯ãŒã¯ãé²åããã«ã€ããŠãæ±æè¿œè·¡ã¡ã«ããºã ãæ°ããæ©èœããã¿ãŒã³ã«é©å¿ããå¿ èŠããããŸãã
experimental_taintObjectReferenceã®æåã¯ãå
ç¢ãªã»ãã¥ãªãã£ä¿èšŒãšæå°éã®ããã©ãŒãã³ã¹åœ±é¿ãšã®éã®åŸ®åŠãªãã©ã³ã¹ã«ããã£ãŠããŸãããã®ãã©ã³ã¹ã¯ãæ±ææ
å ±ã®é«åºŠã«æé©åãããåŠçãéããŠéæãããŸãã
ãªããžã§ã¯ãã»ãã¥ãªãã£ã«é¢ããã°ããŒãã«ãªèŠç¹
ã°ããŒãã«ãªèгç¹ããèŠããšãå ç¢ãªãªããžã§ã¯ãã»ãã¥ãªãã£ã®éèŠæ§ã¯ããã«å¢ããŸããå°åãæ¥çã«ãã£ãŠãèŠå¶èŠä»¶ãè åšã®ç¶æ³ã¯ç°ãªããŸããäŸãã°ïŒ
- GDPRïŒãšãŒãããïŒ: å人ããŒã¿ã®ãã©ã€ãã·ãŒãšã»ãã¥ãªãã£ãéèŠããŸããæ±æè¿œè·¡ã®ãããªæ©èœã¯ãæ©å¯æ§ã®é«ãå人æ å ±ã誀ã£ãŠæ±ãããªãããã«ããã®ã«åœ¹ç«ã¡ãŸãã
- CCPA/CPRAïŒç±³åœã«ãªãã©ã«ãã¢å·ïŒ: GDPRãšåæ§ã«ããããã®èŠå¶ã¯æ¶è²»è ã®ããŒã¿ãã©ã€ãã·ãŒãšæš©å©ã«çŠç¹ãåœãŠãŠããŸãã
- æ¥çåºæã®èŠå¶ïŒäŸïŒå»çåéã®HIPAAããã€ã¡ã³ãã«ãŒãã®PCI DSSïŒ: ãããã¯ãã°ãã°ãæ©å¯ããŒã¿ã®ä¿åãåŠçãéä¿¡æ¹æ³ã«å³æ ŒãªèŠä»¶ã課ããŸãã
experimental_taintObjectReferenceã®ãããªæ©èœã¯ãããŒã¿ã®ä¿¡é Œæ§ãããããã°ã©ã çã«ç®¡çããæ¹æ³ãæäŸããããšã§ãã°ããŒãã«ãªçµç¹ããããã®å€æ§ãªã³ã³ãã©ã€ã¢ã³ã¹çŸ©åãæããã®ãæ¯æŽã§ããŸããéèŠãªã®ã¯ããã®ããã©ãŒãã³ã¹ãªãŒããŒãããããå³ããå©ççã§éå¶ããããããªãœãŒã¹ã«å¶çŽã®ããç°å¢ã§äºæ¥ãè¡ãäŒæ¥ã«ãšã£ãŠæ¡çšã®éå£ãšãªããªãããšã§ãããåŠçéåºŠãæ®éçãªæžå¿µäºé
ã«ããŠããŸãã
ã°ããŒãã«ãªeã³ããŒã¹ãã©ãããã©ãŒã ãèããŠã¿ãŸãããããŠãŒã¶ãŒã®æ¯æã詳现ãé éå äœæãå人æ å ±ãæ±ãããŸããããããä¿¡é Œã§ããªãã¯ã©ã€ã¢ã³ãå ¥åããåãåã£ãéã«ããã°ã©ã çã«ãæ±ææžã¿ããšããŠããŒã¯ããã·ã¹ãã ããããã®èª€çšïŒäŸïŒæå·åããã«ãã°ã«èšé²ããïŒã®è©Šã¿ãè¿ éã«ãã©ã°ä»ãã§ããèœåã¯éåžžã«è²Žéã§ãããããã®ãã§ãã¯ãè¡ãããé床ã¯ããã©ãããã©ãŒã ãç°ãªãã¿ã€ã ãŸãŒã³ããŠãŒã¶ãŒè² è·ã«ããã£ãŠå¹ççã«ãã©ã³ã¶ã¯ã·ã§ã³ãåŠçããèœåã«çŽæ¥åœ±é¿ããŸãã
çµè«
Reactã®experimental_taintObjectReferenceã¯ãJavaScriptãšã³ã·ã¹ãã å
ã§ã®ãªããžã§ã¯ãã»ãã¥ãªãã£ã«å¯Ÿããå
é²çãªã¢ãããŒãã衚ããŠããŸããéçºè
ãããŒã¿ã«ä¿¡é Œã¬ãã«ãæç€ºçã«ã©ãã«ä»ãã§ããããã«ããããšã§ãããŒã¿æŒæŽ©ãXSSã®ãããªäžè¬çãªè匱æ§ãé²ãããã®åŒ·åãªã¡ã«ããºã ãæäŸããŸãããããããã®ãããªæ©èœã®å®çšçãªå®çŸå¯èœæ§ãšåºç¯ãªæ¡çšã¯ããã®åŠçé床ãšå¯æ¥ã«é¢é£ããŠããŸãã
ã©ã³ã¿ã€ã ã®ãªãŒããŒããããæå°éã«æããå¹ççãªå®è£
ã¯ãã»ãã¥ãªãã£ãããã©ãŒãã³ã¹ãç ç²ã«ããªãããšãä¿èšŒããŸãããã®æ©èœãæçããã«ã€ããŠãéçºã¯ãŒã¯ãããŒã«ã·ãŒã ã¬ã¹ã«çµ±åãããªã¢ã«ã¿ã€ã ã®ã»ãã¥ãªãã£ä¿èšŒãæäŸããèœåã¯ãæ±æããããªããžã§ã¯ãåç
§ãã©ãã ãè¿
éã«èå¥ãäŒæããã§ãã¯ã§ãããã®ç¶ç¶çãªæé©åã«äŸåããŸããè€éã§ããŒã¿éçŽåã®ã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããã°ããŒãã«ãªéçºè
ã«ãšã£ãŠãé«ãåŠçé床ã«ãã£ãŠæ¯ãããã匷åããããªããžã§ã¯ãã»ãã¥ãªãã£ã®çŽæã¯ãexperimental_taintObjectReferenceãæ³šææ·±ãèŠå®ãã¹ãæ©èœã«ããŸãã
å®éšçãªãã®ããå®å®çãžã®éã®ãã¯ããã°ãã°éçºè
ã®ãã£ãŒãããã¯ãšããã©ãŒãã³ã¹ãã³ãããŒãã³ã°ã«ãã£ãŠæšé²ãããå³ãããã®ã§ããexperimental_taintObjectReferenceã«ãšã£ãŠãå
ç¢ãªã»ãã¥ãªãã£ãšé«ãåŠçé床ã®äº€å·®ç¹ããééããªããã®é²åã®æåç·ã«ãããäžçäžã®éçºè
ãããå®å
šã§ããã©ãŒãã³ã¹ã®é«ãWebã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããåãäžããã§ãããã