XSSã®è åšã¯äŸç¶ãšããŠé¢é£ããŠããŸããïŒ ã¯ãã¹ãµã€ãã¹ã¯ãªããã£ã³ã°ïŒXSSïŒãæ»æã®äžåœ¢æ ãšããŠç»å ŽããŠããçŽ20幎ãçµéããŸããã ãã以æ¥ãç§ãã¡ã¯è±å¯ãªçµéšãšç¥èãåŸãŠããµã€ããä¿è·ããããšãããé£ãããªãããšã©ãŒããç§ãã¡ãä¿è·ããããã«å€ãã®ãã¬ãŒã ã¯ãŒã¯ãèšèšãããŸããã ããããææ°ã®ããŒã¿ã¯ãŸã£ããç°ãªãç¶æ³ã瀺ããŠããŸãã2017幎ã®ç¬¬1ååæã«ã¯ãXSSæ»æã«é¢ããã¬ããŒãã®æ°ãšçºèŠãããè匱æ§ã®æ°ãæ°åå¢å ããŸããã
ãã®habropostã§ã¯ãçããã®ãããã«æãããã¢ããªã±ãŒã·ã§ã³ãå±éºã«ãããããçç±ããã¬ãŒã ã¯ãŒã¯ãä¿åããªãçç±ãè匱æ§ãèŠã€ããæ¹æ³ãããã³ããã«äœ¿çšããããŒã«ã説æããŸãã
èšäºã®ãããã¿ã€ãã¯ã HolyJS 2017ã¢ã¹ã¯ã¯äŒè°ã§ã®ã¬ããŒãã§ãã Alexeyã¯EPAM Systemsã®ããã³ããšã³ãããŒã ãªãŒããŒ/ã¢ãŒããã¯ãã§ããããã³ã¹ã¯ã®FrontSpotã³ãã¥ããã£ã®ãªãŒããŒã®1人ã§ãã å°éåéã®äž»ãªåéïŒã¢ãŒããã¯ãã£ãšã¢ããªã±ãŒã·ã§ã³ã€ã³ãã©ã¹ãã©ã¯ãã£ãéçºç®¡çã
ãã®ããã¹ãã«ã¯ãã¹ã©ã€ãã®èšå€§ãªæ°ã®åçãå«ãŸããŠããŸãã 泚æãã©ãã£ãã¯ïŒ
çããã®å€ãã¯ããã§ã«äœããã®XSSæ»æãåããŠããããšãç¥ã£ãŠããŸãã ç§ãã¡ã泚æãæãã¹ãããã€ãã®èå³æ·±ã話ãäºäŸããäŒãããããšæããŸãããããŠæåŸã«è³ªåãããŸã-ããªãã®ã¢ããªã±ãŒã·ã§ã³ãç¡æµã§ãããšããèªä¿¡ã¯ãããŸããïŒ
12幎以äžåã«çºçããã€ãã³ãã®èª¬æããå§ããWebã¢ããªã±ãŒã·ã§ã³ãããã³ããšã³ãã¢ããªã±ãŒã·ã§ã³ãããã³ååãšããŠã»ãã¥ãªãã£å šè¬ã®ã»ãã¥ãªãã£ã«ã€ããŠå°ãéã£ãèŠæ¹ããããŸããã 2005幎10æ4æ¥ãSamy Kamkarã¯MySpaceããŒãžã«ã³ã¡ã³ããæ®ããŸããã ããã20æéã§100äžäººãè¶ ãããŠãŒã¶ãŒã«ææãããŠã€ã«ã¹ã«é¢ãã解説ã 20æé-100äžãŠãŒã¶ãŒã ãããã®åããŠãŒã¶ãŒã«ãšã£ãŠå¹žããªããšã«ããŠã€ã«ã¹ã¯äœãæªãããšãããŸããã§ããã 圌ã¯ãµããŒãå人ãšããŠè¿œå ããããŒããŒã»ã¯ã·ã§ã³ã«æ¬¡ã®ããã«æžããŠããŸãããããããäœãããããµããŒã¯ç§ã®ããŒããŒã§ããã Samiã¯ãåœæç¥ãããŠããInternet Explorerã®è匱æ§ã®1ã€ã䜿çšããhtmlããŒã¹ãå«ãã³ã¡ã³ããæ®ããŸããã ã¹ã¯ãªãããé衚瀺ã«ãªã£ãŠããã«ã¹ã¿ã å±æ§ãæã€divããããŸããã
ãããŠãã€ã³ã©ã€ã³ã¹ã¿ã€ã«ã®å©ããåããŠã圌ã¯ãã®ãŸãã«ã¹ã¯ãªãããå®è¡ããŸããã ãããã£ãŠã誰ããSamyã®ããŒãžã«ã¢ã¯ã»ã¹ãããšãã¹ã¯ãªãããå®è¡ãããSamiãå人ãšããŠè¿œå ããããŒãžã«ææãããªã©ãé£éåå¿ãè¡ãããŸããã ææããããŒãžã«ã¢ã¯ã»ã¹ãããšãããªãèªèº«ãææããä»ã®äººã«ææããå¯èœæ§ããããŸãã 20æé-100äžãŠãŒã¶ãŒã ãã®ãŠã€ã«ã¹ã¯ãæŽå²äžæãéãæ¡æ£ããŠããã¯ãŒã ãšããŠå ¬åŒã«èªããããŠããŸãã ãµããŒèªèº«ã¯åè«ã ãšèšã£ãã ãåè«ãèšãããã£ããã ããã§ã圌ã®åè«ã®ããã«ããµããŒã¯3幎ãåŸãŸããã
12幎ãçµéããŸãããããã®éã«äœãå€ãã£ãã®ã§ããããïŒ èª°ãMySpaceã䜿çšããŠããŸããïŒ MySpaceã¯æ»ãã§ããŸãã æ°ãããã©ãŠã¶ãæ°ãããã¬ãŒã ã¯ãŒã¯ãæ°ããã©ã€ãã©ãªããã¯ãããžãŒãç»å Žããäžçãã®ãã®ãååãšããŠå€ãããŸããã
ç§ã¯ãèœåã®äžå¿ã«ãããã³ã¹ã¯äºåæã®EPAMã§åããŠããŸãã ãŸããã¯ã©ã€ã¢ã³ãã顧客ãã¢ã«ãŠã³ããããŒãžã£ãŒããããžã§ã¯ããããŒãžã£ãŒãéææ¥ãŠãããã®ã§ããããžã§ã¯ããç£æ»ã§ããŸãã ãã§ãã¯å¯Ÿè±¡ã®å€§ããªãã§ãã¯ãªã¹ããããããã®1ã€ãã»ãã¥ãªãã£ãšåŒã°ããŸãã ãããã£ãŠããã®åãã»ãã¥ãªãã£ã¯ãç§ã®äœæ¥äžã«ãåããŠåäžã®ãããžã§ã¯ãã«åæ ŒããŸããã§ããã ã客æ§ãšã³ãã¥ãã±ãŒã·ã§ã³ããšããšãè匱æ§ãèŠã€ãã£ãããšãäŒããŸãã ãããŠãã¯ã©ã€ã¢ã³ãã¯ããŸããããã¯ãã ã®1ã€ã§ãããšçããŸãã ãããŠãæ¯ååãããšãèšããªããã°ãªããŸããã ããã«ã¯ãã äžã€ã®ç©Žãäžã€ã®éããçªããããŠèª°ãã®èµ€ãé¡ãå¿ ãçŸããã§ãããã
ã¢ããªã±ãŒã·ã§ã³ã«ã»ãã¥ãªãã£ãã°ããŒãã«ããªãã§ãã ããã
ãããã£ãŠãã»ãã¥ãªãã£ã¯éåžžã«åºç¯ãªãããã¯ã§ãã éåžžã«å€§ããã®ã§ãæ¯æ¥éãŸã£ãŠè©±ãåã£ããã1ãæã¯è¶³ããŸããã
åé ã§è¿°ã¹ãäŸãã€ãŸããããããã¯ãã¹ãµã€ãã¹ã¯ãªããã£ã³ã°ïŒXSSïŒã®è匱æ§ã«ã€ããŠèª¬æããããšæããŸãã ãã°ãšããŠã20幎ã»ã©åã«ç»å ŽããŸããã ãã®éã圌ã¯å€§ããå€ç°ããä»ã®çš®é¡ã®è匱æ§ã倧éã«çã¿åºããŸããã ä»æ¥ã¯åœŒã«ã€ããŠã話ããŸãã ãã®ç¹å®ã®ã¿ã€ãã®è匱æ§ãžã®é¢å¿ãé«ããããã«ãããã€ãã®çµ±èšãæäŸããããšæããŸãã ãã®ãããªäŒç€Ÿã¢ã«ãã€ããããŸãã 誰ããç¥ããªãå Žåãããã¯äžçæ倧ã®ã³ã³ãã³ãé ä¿¡æ¥è ã®1ã€ã§ãããããŸããŸãªãœãŒã¹ã«ãããšãããŸããŸãªå°åã®ã€ã³ã¿ãŒããããã©ãã£ãã¯ã®15ã30ïŒ ãå¶åŸ¡ããŠããŸãã ããã¯ãããããããŸãã ååæããšã«ã¬ããŒããçºè¡ããã¬ããŒãã®1ã€ã¯ã»ãã¥ãªãã£ã¬ããŒããšåŒã°ããŸãã ãã®ã¬ããŒãã®èå³æ·±ãç¹ã¯äœã§ããïŒ æ»æã®ç·æ°ã«å¯ŸããXSSæ»æã®å²åã¯ãã§ã«20ïŒ ãè¶ ããŠããŸãã
ããã¯2017幎ã®ç¬¬1ååæã®ã¿ã§ãã å¹³åããŠãåãµã€ãã¯æ£ç¢ºã«XSSã®å©ããåããŠ30å以äžæ»æãããŠããŸãã ããªãå¿é ã§ãããïŒ
XSSã«ã€ããŠè©±ããŠããŸãããããã¯äœã§ããïŒ ããã«äŸãå¿ èŠã§ãã åéãäœããã®ãªã³ã¯ãéä¿¡ããŠãããµããããŸãããã ã¡ãŒã«ãSkypeãã¡ãã»ã³ãžã£ãŒãŸãã¯ãã£ããã ãã®ãªã³ã¯ã®ãã¹ãŠã¯ããã®ãã©ã¡ãŒã¿ãŒã«ä»ãªããŸããã
ãã®å Žåãã¹ã¯ãªããã¯éåžžã«æçœã§ãã ãã®ããããã®ãªã³ã¯ãã¯ãªãã¯ããŠã¯ãªãã¯ããŸããã 次ã«äœãèµ·ãããŸããïŒ ãªã³ã¯ããã©ã£ãŠããã®ãµã€ããèŠããšãããã«ãããŒãžãèŠã€ãããŸããããŸãã¯ãèšå®ããåºæºã§äœãèŠã€ãããŸããã§ããããšè¡šç€ºãããŸãã ããããç§trickã¯ãã¹ã¯ãªãããæ¢ã«ããŒãžã«ãããšããããšã§ãã ã¹ã¯ãªããã¯ãã§ã«å®è¡ãããŠãããããŒã¿ãçã¿ãŸããã ç¯çœªãç¯ãããŠããŸãã
ãã®ã¿ã€ãã®æ»æã¯ãã¢ã¯ãã£ãXSSããšåŒã°ããŸããã€ãŸããæ»æè ã¯ãŠãŒã¶ãŒãšçŽæ¥é£æºããŸãã 圌ã¯ã¹ãã ãã¡ãã»ãŒãžãéä¿¡ããã©ãããããããã®ãªã³ã¯ãããªãã«äŒããããšããŸãã ãããŠãããªããççŽã«èšã£ãŠãããããªããéãããã®ãªã³ã¯ãã¯ãªãã¯ããŠåæ Œãããªã-ããã ãã§ãã 倱ããããã¹ãŠãèæ ®ããŠãã ããã ãããŠãçµå±ã®ãšããã誰ããããªããèŠç¥ãã¬äººãšè»ã«å ¥ãã¹ãã§ã¯ãªãããšãç¥ã£ãŠããŸããããªãã¯èŠç¥ãã¬äººãããèåãåã£ãŠã¯ãããŸãããããªãã¯èŠç¥ãã¬äººãããªã³ã¯ãã¯ãªãã¯ããŠã¯ãããŸããã 誰ããç¥ã£ãŠããŸãããããã§ãã¯ãªãã¯ããŸãã ãªãã§ïŒ
Googleã«åé¡ãããå¯èœæ§ããããŸãã ãã®ãããªãªã³ã¯ãã¯ãªãã¯ããŸããïŒ
ã©ãããŠïŒ éåžžã«äŸ¿å©ãªçãåç §ãã¯ãªãã¯ããŸãã ãããŠãã¢ã¯ãã£ããªXSSã®ã¹ã¯ãªãããé ãããŠããŸãã ãŸãã¯ãããã«å¥ã®äŸãQRã³ãŒãããããŸãã
äœããããŸããïŒ ããã§ç§ã¯åçãæ®ããŸããã ãã®ãªã³ã¯ãèªãã§ãããšæãïŒ ç§ã¯ãããåã£ãŠè¡ããŸããã ã¹ã¯ãªãããå®è¡ãããããŒã¿ãçãŸããŸããã
次ã®ãã¥ãŒã¯ããã·ãXSSã§ãã ç§ãæ»æè ã ãšæ³åããŠã¿ãŸãããããããµã€ãã«è¡ã£ãŠã³ã¡ã³ããæ®ããŸããã ã³ã¡ã³ãã«ã¯ãä»ã®ããŒãžã«ãªãã€ã¬ã¯ãããŠã¯ãããŒãååŸããéåžžã®ã¹ã¯ãªãããå«ãŸããŠããŸãã ãã®ã¿ã€ãã®æ»æã¯ãªãããã·ããšåŒã°ããŸããïŒ ç§ã«ã¯ããå°ãæ·±ãç¥èãå¿ èŠã§ããããŒãžã®ã¬ã³ããªã³ã°æ¹æ³ãã¹ã¯ãªããã®å®è¡æ¹æ³ãç解ããå¿ èŠããããŸãã ããã¯ãããæ·±ããããæ·±å»ãªã¬ãã«ã§ãã ã€ãŸããç§ã¯ãµã€ãã§çŽæ¥äœæ¥ããããã§è匱æ§ãæ¢ããŸãã ããããèŠã€ãããããã«ããã®ã¹ã¯ãªãããå®è£ ããŸããããã ãã§ãããã以äžå¿ èŠãªããšã¯ãããŸããã ããªãã¯ãæ®éã®ãŠãŒã¶ãŒãšããŠãåã³ãã®ããŒãžã«ã¢ã¯ã»ã¹ããŸã-ããã ãã§ããããŒã¿ã¯ãã§ã«çãŸããŠããŸãã ãããŠãããªãã¯äœãèµ·ãã£ããããæ°ä»ããªãã§ãããã
äŸãšããŠã話ãããŸãã æè¿ããµã³ã¯ãããã«ãã«ã¯è©Šéšã®ãŠã§ããµã€ãã®ã¡ã€ã³ããŒãžã«ã次ã®ç¢æã衚瀺ãããŸããããè©Šéšã«åæ ŒããåŸãã³ã³ãã¥ãŒã¿ãŒã»ãã¥ãªãã£åŠéšã«å ¥ãã®ã«ååãªãã€ã³ãããããŸããã å ¥ã£ãŠãã人ãã¡ã«ä»äºãæäŸããªããã°ãªããŸãããã å®éããã®ããã¯ã¯XSSãšã¯é¢ä¿ãããŸããã§ããã ããã¯ããã«ä¿®æ£ããã30ååŸã«ã¯äœãèµ·ãããªãã£ãããã«ãµã€ãã¯æ©èœããŸããã ããããååã§ããå¥ã®åŠçã30ååŸã«åã³ãµã€ãããããã³ã°ããŸããã ãã³ã³ãã¥ãŒã¿ãŒã»ãã¥ãªãã£éšéã«å ¥ãã®ã«ååãªãã€ã³ããæã£ãŠããªãã£ããµã³ã¯ãããã«ãã«ã¯ã®ç·ã«åæ ããŸãã ååã«æãŠã°ããã®ã«ã ãã®ç·ã¯ãç§ã話ããè匱æ§ããã®ãŸãŸäœ¿ããŸããã 圌ã¯ãªãã€ã¬ã¯ãã§ã³ã¡ã³ããæ®ããŸããã ãµã³ã¯ãããã«ãã«ã¯è©Šéšã®ãŠã§ããµã€ãã«ã¢ã¯ã»ã¹ãããšããã«ãããã«ãã®ããŒãžã«ãªãã€ã¬ã¯ãããããã®ç¢æãèªã¿ãŸããã ããããïŒ ã¯ã ãã ïŒ ãšãŠãç°¡åã§ãã ãµã€ããç Žå£ããããšã¯å¯èœã§ããïŒ ç°¡åã§ãã ã芧ã®ãšããããããã®è匱æ§ã¯DOMããªãŒã®è匱æ§ã«åºã¥ããŠããŸãã ç§ãã¡ã圌ãšã©ã®ããã«ä»äºãããããç§ãã¡ãããã«ãããããã®ã¯ãéåžžã«èå³æ·±ãçµæã«ã€ãªãããŸãã
éåžžã®å ¥åãèŠãŠã¿ãŸãããã
æ°åãæååãå ¥åã§ããŸãããäœãèµ·ãããŸããããã¹ãŠãããŸããããŸãã ããããããã¹ãã«æ¬¡ã®ãããªã¹ã¯ãªãããå«ãŸããŠããå ŽåïŒ
ããŒãžããªããŒããããã©ã¡ãŒã¿ãŒã䜿çšããŠãã®å ¥åãåæç»ããŸããã ãã¹ãŠãå ¥åãéããããã¹ã¯ãªãããå®è¡ãããŸãã ããŠãä»ã¹ã¯ãªãããæ¿å ¥ããŠããã®ã¯èª°ã§ããïŒ ããã¯ããŸãã«ãæçœã§ãããåçŽãããŸãã iframeãæ¿å ¥ã§ãããšããŸãã
åãããšãèµ·ãããŸãã å ¥åãéããããiframeãããŒããããããã«æžããããçš®ã®ã¹ã¯ãªãããå®è¡ãããŸããã è匱æ§ã
åçä»ãã®å¥ã®äŸã ç»åãæ¿å ¥ããŸãããç¡å¹ãªURLãšonerrorããã¯ãå«ãŸããŠããŸãã
ãã¡ãããç»åãèªã¿èŸŒãããšãããšããã®ãããªURLã¯ãããŸãããonerrorããã¯ãæ©èœããã¹ã¯ãªãããå®è¡ãããŸãã æããã«ãã¹ã¯ãªããããããšèšãã§ãããã ãããŠãåãç»åãé衚瀺ã«ããŠãã®æ¹æ³ã§å«ãããšã ã¹ã¯ãªãããããããšã¯æããã§ããïŒ ãŸãã¯ãã®ããã«ã
ãŸãã¯ãjs-packã®å人ãããŸãã
ã¢ã©ãŒãïŒ ãã®ã³ãŒãã§äœãèµ·ãã£ãŠããã®ã誰ãç¥ã£ãŠããŸããã çå£ã«ã圌ã¯äœãããŠããŸããïŒ ããã¯éåžžã®ã¢ã©ãŒãã§ãããéãæ¬åŒ§ãšéãæ¬åŒ§ã®åœ¢ã§è¡šç€ºãããŸãã ããã¯äœã§ãã ãããæ©èœããããšãç解ããæ¹æ³ã¯ïŒ
ããã¯1ã€ã®å ¥åã®äŸã§ãã äŸãèŠãŠã¿ãŸãããã eBayïŒITãšã¯äœã®é¢ä¿ããªãäŒç€Ÿã®1ã€ïŒã¯ãæ°ãæåã«æ¬ã売ãããšã«æ±ºããŸããã ããã«ãã®ãããªæ¬ããããŸãã æãèå³æ·±ãã®ã¯ãæ¬ã®ååãããã§ããããšã§ãïŒ
ãã®æ¬ã¯å®äŸ¡ã§ã25ãã«ã§ãã eBayã§ãã®ããŒãžã«ã¢ã¯ã»ã¹ãããšããã«ãã¢ã©ãŒãã衚瀺ãããŸãã ç§ãä¿¡ããŠããã®ããŒãžã¯ãŸã é¢é£ããŠããŸããããã°ã¯ä¿®æ£ãããŸããã ã³ãã¥ããã£ã¯ãã®æ¬ã§ãã®ãžã§ãŒã¯ãéåžžã«æ°ã«å ¥ã£ããããããŸããŸãªåœã§è²©å£²ããå§ããŸããã ãããã¹ãŠã§ãŒãã³ã§æã人æ°ã®ããæ¬ã®è²©å£²ãµã€ãã§ãã åäœããŸãã ãã€ãã§ãã åäœããŸãã
ãããŠãä»ã«ãããããã®äŸããããŸãã ãŸã ãã¹ãŠä¿®æ£ãããŠããŸããã ãããŠãå ¥åã®ã¿ã®è匱æ§ã«ã€ããŠè©±ããŸããã ãã¹ãŠã®å±æ§ãšã¿ã°ã®è匱æ§ã®ããããã®ãªã¹ãããããŸãã ãããããããŸãã ãŸãããããã®åãªã³ã¯ã«ã¯ãããŒã¿ãå€æŽããæ¹æ³ããã®ä¿è·ãŸãã¯ãã®ä¿è·ããã€ãã¹ããæ¹æ³ã®ããã«å€§ããªãªã¹ãããããŸãã æãã
ãããããããã®æ»æè ã¯èª°ã§ããïŒ åœŒãã¯ç§ãã¡ã®ãµã€ãã«äœãæãã§ããŸããïŒ æµãäžç®ã§ç¥ã£ãŠããã°ãããã«ã€ããŠäœããããããšãã§ããŸãã åäŸã¯åžžã«2ã€ã®ã¿ã€ãã«åããããŠãããããåäŸæ代ãæãåºããŠãã ããã åãã§åã建ãŠãåäŸãã¡ããããŠåãåã³ã§ãããã®åãå£ããåäŸãã¡ã 倧人ã®äžçã§ã¯äœãå€ãã£ãŠããŸããã ç§ãã¡ã¯ãŠã§ããµã€ããäœæããŸããã誰ãããããç Žå£ããã®ã¯æ¥œãã¿ã®ããã§ãã ç§ãä¿¡ããŠã圌ãã¯ç§ãã¡ãåãããšãšåãããã«å£ããã³ãŒããšå£ããã³ãŒãããåãåã³ãåŸãã 楜ãã¿ã®ããã«ãããè¡ã人ã ãããŸãã ãããŠãç§ãã¡ãå 責ã§ãµã€ããç»é²ããç Žãããšãã§ããç¹å¥ãªãµã€ãããããŸãã ç§ã¯ãã®ãµããŒã«ã€ããŠç¥ã£ãŠããŸãã ãã°ãèŠã€ããããšã§äœããã®å ±é ¬ãåŸãããšãã§ããŸãã 倧èŠæš¡ã§æ·±å»ãªãµã€ã-æ·±å»ãªãéã 3çªç®ã®éšåã ãããæ£ç¢ºã«ç§ãã¡ããäœããçãããšããæ»æè ã§ãã ãããŠãç§ãã¡ã®ãµã€ãããäœãçãããšãã§ããŸããïŒ åœŒãããããçãããšããŠããããšãç¥ã£ãŠããã°ããããé ãããšãã§ããŸãããïŒ ã¯ãããŒãšæåã«çãŸãããã®ãç§ãã¡ã®åºã«ãããã®ã ã»ãã·ã§ã³ã¹ãã¬ãŒãžãããŒã«ã«ã¹ãã¬ãŒãžã«ããããšãã§ããŸãã ã€ã³ããã¯ã¹UDPã䜿çšãããšãããŒã¿ãååŸã§ããããã«ãªãã°ãããŒã¿ã¯åãã§ç·©åãããŸãã ããŠãä»ã§ã¯ã¯ãããŒã䜿çšãã人ã¯ã»ãšãã©ããŸããã
ä»ã«äœãçãããšãã§ããŸããïŒ ãã¹ã¯ãŒã ãã¹ã¯ãŒããçãæ¹æ³ã¯ãããããããŸãã éåžžã®ã¹ã¯ãªããã䜿çšããã°ãããçš®ã®ããŒã¢ãããããŒããŠã³ãããã¥ã¡ã³ãã«åã«æããŠãã¯ãªãã¯ãããã¹ãŠãèšé²ã§ããŸãã 次ã«ãããããã¹ãŠã®ãµã€ãã«éä¿¡ããããã§ãã·ã³ã§éžæããŸãã ãŸãã¯ããã£ãã·ã³ã°ãªã©ãããè³¢ã人ãªããæ¢åã®ãã©ãŒã ã®äžã«åœã®ãã©ãŒã ã眮ããéä¿¡ããã ãã§ãã æè¿ç»å ŽããååãšããŠãããã®XSSæ»æã®æ¥å¢ã®çç±ã§ããäž»ãªç®æšã¯ããã€ãã³ã°ã§ãã ç§ãã¡ã®ã³ã³ãã¥ãŒã¿ãŒã®åãç§ãã¡ã®é»è©±ã®åã¯æé·ããŠããŸãã ãªããããã®åãçã¿ãŸãããïŒ
ãã©ã«ãŒã·ã®äŸãæããŸãã æèšè£œé ã®ããã®ãœããšãåŸã®ã¹ããŒã¹ã§æ倧ã®å·¥å Žã®1ã€ã§ããLuch Plantã 圌ãã®ã¡ã€ã³ããŒãžã§æãåæ¢ã«æ¡æãããã 圌ãããããã§å°ãèŠããŠããŠãæ§ããŸãããïŒã
ã¹ãã£ã³ãã«ããããæ°äººã解éããããµã€ãã¯å ã®åœ¢ã«æ»ããŸããã ãããããã®ãã€ãã³ã°ã®ã©ãã ããç§ãã¡ã®ç¥èãªãã«èµ·ãã£ãŠããã®ã§ããããïŒ ããã«ã€ããŠå°ããããããšã¯ãããŸããã åºåãåºåãããã«ãŒã®åéã§ç 究ã«åŸäºããŠããããªã倧äŒæ¥ã®AdGuardã¯ãAlexaã®ãªã¹ãã®ããããµã€ãã3é±éç 究ããŸããã ç§ã¯ç 究ããç 究ããæåã®10äžäººã®ãã¡220人ãæ¡æãããŠããããšãçºèŠããŸããã 100,000ã®ãã¡220ã¯0.22ïŒ ã§ãããäœäžããŸãã ãããããããã®220ã®ãµã€ãã§3é±éã5å人ã®ãŠãŒã¶ãŒãããããšãå€æããŸããã ãã®éã«äœãæ¡æã§ãããæ³åããŠã¿ãŠãã ããã ãããã®220ã®ãµã€ãã«ã¯ãæã人æ°ã®ããã¢ãã«ããµã€ããã¹ããªãŒãã³ã°ã³ã³ãã³ããããã³æµ·è³çã³ã³ãã³ããå«ãŸããŠããŸããã
çãæ¹ã¯ïŒ ããæªæ¥ã¯ãªãããã§ãããã¹ãŠãæããŠããã¹ãŠãçãŸããŸãã ç§ãã¡ãæåŸ ããªããã®ã§ããã 誰ããç§ãã¡ãæã£ãŠå®ããªããã°ãªããŸããã ãããŠãååãšããŠããã¬ãŒã ã¯ãŒã¯ãè«ççãªçãã§ããã¹ãã§ãã çµå±ã®ãšãããä»ã®éçºè ã¯ãã§ã«ããã«ã€ããŠèããŠããŸãã å®éãäžè¬çãªã©ã€ãã©ãªãšãã¬ãŒã ã¯ãŒã¯ã®ããã¥ã¡ã³ããèªããšããã®æ¹åã§ã©ã®ããã«éçºãããã®ãããã®ããã«äœãããã®ããããããŸãã ãããã圌ããæ¬åœã«ç§ãã¡ãæã£ããªããç§ã®æ¬¡ã®ãããã¯ã¯...ãã¬ãŒã ã¯ãŒã¯ã®è匱æ§ã®ããã«èãããªãã£ãã ããïŒ ãã¬ãŒã ã¯ãŒã¯ãç Žãæ¹æ³ã¯ïŒ å ¥åã§è¡ãããããã«ãããŒã¿ãå ¥åã§ããŸãããç§ã¯ä¿¡ããŠããŸãããã¹ãŠãæ¬åœã«è¯ãã§ãã ããããç§ãã¡ã®ä»äºã§ã¯ããŠãŒã¶ãŒãå ¥åãããµãŒããŒããååŸããåçã³ã³ãã³ããæ¿å ¥ããããšãéåžžã«é »ç¹ã«å¿ èŠã§ãã ãã®åçãªã³ã³ãã³ãã¯æ¬åœã«è åšã§ãã ç°ãªããã¬ãŒã ã¯ãŒã¯ã¯ãããç°ãªãæ¹æ³ã§è¡ããŸãã ããçš®ã®ãã£ã¬ã¯ãã£ããããçš®ã®ããããã£ã«ããããšãã§ããŸã... AngularJSããå§ããŸãããã
ãããã£ãŠãããã§ãng-bind htmlãã£ã¬ã¯ãã£ãã¯å®éã«ã¯sanitize.jsã©ã€ãã©ãªã«ãããŸãã ããã«æããªhtmlãæ¿å ¥ããŸãããã®ã©ã€ãã©ãªã¯ãå±æ§ãã¿ã°-圌女ãæ°ã«å ¥ããªãã£ããã¹ãŠã®ãã®ãããã®ã·ãŒãã«åºã¥ããŠããã¹ãŠã®ãã®ãåãåããŸãã
å®å
šã«è²Œãä»ããããšãã§ããããããªhtmlãæ®ããŸãã ãã¹ãŠãããŸãæ©èœããŠããããã§ãã ãããããªã¹ãã®äžéšã®å±æ§ãå¿ãããšã©ããªããŸããïŒ ãããŠãããèµ·ãã£ãã usemap
ãusemap
å±æ§ã䜿çšãusemap
ãïŒ ã¬ããŒããèªããŸã§åœŒã®ããšã¯ç¥ããŸããã§ãããã圌ã䜿ã£ãããšã¯ãããŸããã§ããã ããã¯ãç»åãã¯ãªãã¯ããŠã³ã³ãã³ããåçã«ããŒãããããã®å±æ§ã§ãã éçºè
ãAngularã§ãããå¿ããŠããŸããã ãŸããããŒãžã§ã³1.5ããåã«ã¯ããã®è匱æ§ãååšããŠããŸããã ã€ãŸãããã®ã³ãŒãã¯åãã§æ¿å
¥ããŠå®è¡ããŸãã è匱æ§ã
ãããŠããã®å±æ§ã ãã§ã¯ãããŸããã ããŒãžã§ã³1.5ããåã®è匱æ§ã®çããªã¹ãã¯æ¬¡ã®ãšããã§ãã
ãã¡ããããããã®å€ãã¯åŸã®ããŒãžã§ã³ã§æ¢ã«ä¿®æ£ãããŠããŸãããããã¯ãŸã é·ããªã¹ãã§ãã ãããã«ã€ããŠã¯ãã以äžè©³ããè¿°ã¹ãŸããããããã§ãã AngularJSã¯ãã§ã«ã¬ã¬ã·ãŒãã¬ãŒã ã¯ãŒã¯ã®ããã§ãã
æ°ãããŠã¹ã¿ã€ãªãã·ã¥ãªè¥è ãèŠãå¿ èŠããããŸãã çµå±ã®ãšãããéçºè ã¯éå»ã®çµéšãèæ ®ããå¿ èŠããããŸããã Vue.jsã v-htmlãã£ã¬ã¯ãã£ãã§ã©ã®ããã«æ©èœãããã®ããã¥ã¡ã³ããèªã¿å§ããŸããã 圌ãã¯ãåçã³ã³ãã³ãã®åã蟌ã¿ã¯ã©ãããããã銬鹿ããŠãããšæžããŠããã®ã§ãããã¯ããªãèªèº«ã®è²¬ä»»ã§ãã ãããŠã圌ãã¯äœãããŸããïŒ ãªãã
Vue.jsã®ææ°ããŒãžã§ã³ãããŠã³ããŒãããŸããã
ãããŠãç¹å®ã®é åã«åçã³ã³ãã³ããæ¿å ¥ããããšããŸããã ããã£ãã
Vue.jsã¯ç§ãã¡ãå©ããŸããã ããã¯éçºè ãè¡ãå¿ èŠããããŸãã ãããŠä»ãVue.jsã«æžããŠåããŠããã«ã€ããŠèããå Žåãè匱ãªã¢ããªã±ãŒã·ã§ã³ããããŸãã ããã§ãšãããããŸã
ããŠãReactãšAngularã¯ã©ãã§ããïŒ éå»2幎éã«ã»ãã¥ãªãã£ã®åé¡ã¯çºèŠãããŠããŸããã ããã ãšæãããŸãã ç§ãã¡ã¯ReactãšAngularã䜿çšãããã®åŸã幞ãã«æ®ãããŠããŸãã ããããããã«ã¯ããå€ãã®çµ±èšããããŸãã ãããã®ãã¬ãŒã ã¯ãŒã¯ãæã€ãµã€ãã®77ïŒ ã«ã¯ãå°ãªããšã1ã€ã®è匱æ§ããããŸãã ãã®ãŽãã¯ã©ãããæ¥ãã®ã§ããïŒ ããããã©ãããã node_modulesã®è匱æ§ã èªåã§ããŠã³ããŒãããããŒãžã§ã³ãéžæããç¬èªã®ãããžã§ã¯ããè¿œå ããŸããã ã©ãããããŸããŠ
ããšãã°ãReduxã®è匱æ§ã調ã¹ãŠã¿ãŸãããã ReduxãšReactã¯ããµãŒããŒã¬ã³ããªã³ã°ãšããåªããæ©èœãæäŸããŠãããŸããã ããã¯åœæã®ãã©ãŒæ©èœã§ããã次ã®ããã«æ©èœããŸããåæç¶æ ãšããŠäœ¿çšããç¶æ ãå¿ èŠã§ãã°ããŒãã«ã¹ã³ãŒãã®å€æ°__PRELOADED_STATE__ããŠã£ã³ããŠã«é 眮ããŸãã ãããããã®åã«zashstringifitãå¿ èŠã§ãã
ãããŠããã®ã©ã€ã³ã«ã¯ç¹å¥ãªæ³šæãæãããŠããŸãã
ãã®ååã§ã©ããã«ç»é²ã§ãããã©ããªããŸããïŒ
ããŒã¿ã¯ãµãŒããŒäžã®ã©ããã«ä¿åãããã²ã©ãããšã¯äœãèµ·ãããªãã£ãããã§ãããããã§ã¯ãµãŒããŒãäºåã¬ã³ããªã³ã°ããŠããŸã...
ããã ãã§ããã¹ã¯ãªãããåã³éããããã¹ã¯ãªãããå®è¡ãããŸãã è匱æ§ã ã¯ãããã®è匱æ§ã¯Reduxèªäœã«ã¯ãªããReduxã¢ãããŒãã«ãããŸãããããŒãã¢ãžã¥ãŒã«ãããã®Reduxã䜿çšããŸãã ããã¥ã¡ã³ãã«æžããããã®ã䜿çšããŸãã 2çªç®ã®åé¡ã¯ããŒãã¢ãžã¥ãŒã«ã§ã-node_modulesã¯å¹³åããŠææ°ãªãªãŒã¹ãã1177æ¥é ããŠããŸã-3幎以äžã§ãïŒ èããŠã¿ãŠãã ããã3幎ã§æ°ããç»å Žãããã¹ãŠã®ãã®ãããããã¹ãŠã®è匱æ§-ãããã®ãã¹ãŠã¯ãããããããªãã®ã¢ããªã±ãŒã·ã§ã³ã«ãããŸãã 3幎ã§äœãèµ·ãã£ãã®ãèããŠã¿ãŸãããã jQueryã®äººæ°ã¯35ïŒ ããäœäžããŠããŸããã ããã¯ãAngularãAngularJSãReactãVueãç»å Žãããšããäºå®ã«ããããããã§ãã ãŸããããŒãžã§ã³ãèŠããšããµã€ãã®79ïŒ ãjQueryã®æåã®ããŒãžã§ã³ã䜿çšããŠããŸãã ãããŠãæåã®ããŒãžã§ã³ã§ã¯-ããã«ããŸãããªãŒãã³ãªè匱æ§ããé¡ãããŸãã
ãããã£ãŠãå€ãããŒãžã§ã³ã䜿çšãããã¹ãŠã®ãµã€ãã§ãã»ãšãã©ã®å Žåè匱æ§ãååšããŸãã ããã¯jQueryã®åé¡ã ãã§ãªãããã¹ãŠã®å€ãã¯ã©ã€ã¢ã³ãã©ã€ãã©ãªã®åé¡ã§ãããã³ãã«ããŒãããŒãã¹ããããD3ãJsTreeãå€ãããŒãžã§ã³ã®ã»ãšãã©ãã¹ãŠã®ã©ã€ãã©ãªã«ã¯å°ãªããšã1ã€ã®è匱æ§ããããŸãã ããããæŽæ°ããŠããªãå Žåããµã€ããéåžžã«å€ãå Žåã¯ãããã確èªããããšããå§ãããŸãã
ãããŠããã®ãããªããã±ãŒãžã«æ³šç®ããŸãããïŒbabelcliãjquery.jsãmangoseãgruntcliãD3.jsã å°ãªããšãäžåºŠã¯ãããã®ããã±ãŒãžã䜿çšããããšããããšæããŸãã ãããŠããããã®ããã±ãŒãžã¯å®éã«ã¯babel-cliãjqueryãmangooseãgrunt-cliãD3ãšåŒã°ããŠããŸãã ããã¯ãnpm-ææããã±ãŒãžã«æè¿çŸãã倧ããªåé¡ã§ãã æ»æè ãšããŠãç§ãã¡ã¯npmãçŽæ¥æäœããŸãã 人æ°ã®ããããã±ãŒãžãæ¢ããŠãã¿ã€ããã¹ãããŠãnpmã§åã³åãããšã人ã¯åœŒã®èšæ¶ã«é Œã£ãŠããã³ãŽãŒã¹ã1ã€ã®ãoãã§æ¯ããããã圌ã®ãããžã§ã¯ãã«æã£ãŠè¡ããŸããéç¥ã ãããã¯ãŸã£ããåãããã«æ©èœããŸãããç°å¢å€æ°ã¯ãã¹ãã€ã³ã¹ããŒã«Cookieã§çãŸããŸãã NPMã¯ãã®åé¡ãéåžžã«å¿é ããŠããŸãã 圌ã¯ãããã®ããã±ãŒãžãæ€çŽ¢ããããŠã³ã°ã¬ãŒãããã0.0.1-securityããšåŒã³ãŸãããã®ãããçŸåšããã±ãŒãžãå®å šã«åé€ããããšã¯ã§ãããæ®ãã¯readmeãšpackage.jsonã®ã¿ã§ãã ããã±ãŒãžãã¢ããã°ã¬ãŒããããšããã®åé¡ãçºçããŸãããããã§ãªãå Žåã¯ãç°å¢å€æ°ãçãŸããŸãã
誰ããããéãããããšãã§ãããšæããªããããã«äŸããããŸãã ç§ã¯æè¿npmãªããžããªã«è¡ããééã£ããã³ã°ãŒã¹ãå ¥åãããã®æ¥ã¯ããã«21人ãéå±ããŠããããšãããããŸããã 1ãæããã464人ãªã®ã§ãåäœããŸãã
ç§ãã¡ã®ãã¹ãŠã®å人ã¯åœŒãã®æµã§ããããšãããããŸãã ãªãã©ã€ã³ã¢ãŒããç¶æããã«ã¯ãããå€ãã®ããŒã¿ãå¿ èŠã«ãªããããã¯ã©ã€ã¢ã³ãã«æ ŒçŽããããŒã¿ã¯ãŸããŸãå¢ããŠããŸãã å€ãã®å Žåãããã¯äœããã®ã»ãã¥ãªãã£ããŒã¿ã«ãªãå¯èœæ§ããããŸããããããçãããšããäœããã®åæã§ãã ãããŠãããŒã¿ã¯ç§ãã¡ãšæŠã£ãŠããŸãã äžéšã®ããã±ãŒãžã«è匱æ§ãããNPMã¯ãã¢ããªã±ãŒã·ã§ã³ã«å¯Ÿããè åšã§ãã Reduxã®äŸã§ãããµãŒããŒã¬ã³ããªã³ã°ã誀ã£ãŠäœ¿çšãããŠããŸã-ããã¯è匱æ§ã§ãã
é²æ©ãæ¢ãŸã£ãŠããããèœåã¯æé·ããŠããŸããããã¯ãæ»æè ã«ãšã£ãŠèå³æ·±ãå¯èœæ§ããããŸãã
åäžããŒãžã¢ããªã±ãŒã·ã§ã³ã¯ãã¢ããªã±ãŒã·ã§ã³ãäœæããããã®åªããã¢ãããŒãã§ãã次ã«ã人ã ãã©ã®ããã«äœ¿çšããããèããŠã¿ãŸãããã ååäžã«ãã®ã¢ããªã±ãŒã·ã§ã³ãããŠã³ããŒãããŸããããå€æ¹ãŸã§åèµ·åããŸãããäœããããŸããã ãããŠãã©ããã«è匱æ§ãããã°ãããã¯çµæ¥æ©èœããSPAã§ã¹ã¯ãªãããçµæ¥æ瀺ããŸããã SPAãèšèšãããšãã¯ãããã«æ³šæãæãå¿ èŠããããŸãã
ãã£ãã·ã¥ãç§ãã¡ãšå¯ŸæŠããŸãã ãã¹ãããŠã圌ãããå ±åãããä¿®æ£ããŸãããããµãŒãã¹ã¯ãŒã«ãŒã誀ã£ãŠèšå®ãããã£ãã·ã¥ã䜿çšããŠäœæ¥ã誀ã£ãŠèšå®ããŸããã ãŸãããŠãŒã¶ãŒã®ãã£ãã·ã¥ã§ã¯ããã®ã¹ã¯ãªããã¯åŒãç¶ãæ©èœããŸããããã®è匱æ§ã¯ãŸã ãã°ããæ®ã£ãŠããŸãããããåé¡ã§ãã
äœäººãService Workerã䜿çšããŸãããïŒ ã»ãã®äžå¹Žååãç§ã¯ãããäœãæ°ããããšãšããŠè©±ããŸããã ããã§ãã¢ããªã±ãŒã·ã§ã³ã«Service Workerããªãå Žåãããã ãã§ããªã¢ã¯ãã£ãã§ã¯ãªããããã°ã¬ãã·ãã§ã¯ãããŸããã ããã§ããã¹ãŠã®ã¢ããªã±ãŒã·ã§ã³ã«ååšããã¯ãã§ãã
é¢çœã話ãããŸãã ç§ã¯ã°ãŒã°ã«ãšåéã®ç«ããã°ã©ããŒãã°ã°ãªã³ã°ãå§ããŸããã 圌ã¯éåžžã«ããŸãããã°ã©ã ããŠããã®ã§ãç§ã¯ãã®gifãæ¬åœã«å¥œãã ã£ãã®ã§ãåç §ãšããŠã¢ããªã±ãŒã·ã§ã³ã«æ¿å ¥ããŸããã ããã¯çŸããæãããç§ã¯ãããå¿ããŠãä»äºãç¶ããŸããã ãã°ããããŠãService Workerã®ãªãéçºããã¢ããªã±ãŒã·ã§ã³ã§ãäžéšã®Workerããã®ãã¡ã€ã³ã§ã¹ãã³ãéå§ãã絶ããã¹ãã³ããŠããããšã«æ°ä»ããŸããã 圌ã¯ã©ãããæ¥ãã®ïŒ ãã®åçã®ããããŒãšå¿çãåæãããšããOriginal-TrialããšãLinkããšãã2ã€ã®èå³æ·±ãè¡ã衚瀺ãããŸãã
Original-Trial
ã¯ãååãšããŠãGoogleãå®éšæè¡ã䜿çšããããã®éµã§ãã ããã«ããŠãŒã¶ãŒã®ç¥èããªããŠããããã䜿çšã§ããŸãã ãã®ææ¡ã¯ããã©ã³ããšç»åã®èªã¿èŸŒã¿ãæé©åããããã«ãService Workerã®Foreign FetchãšåŒã°ããŸãã ãŸãããã®Service Workerã¯ãªã³ã¯ããã€ã³ã¹ããŒã«ã§ããŸãã ã€ã³ã¹ããŒã«ãããç¥ããªããã¡ã«ã¯ãã¹ãªãªãžã³ãªã¯ãšã¹ããè¡ãããšãã§ããŸãã ãªã«ïŒ ç§ã¯èª°ãç§ã®ã¢ããªã±ãŒã·ã§ã³ã«æåŸ
ããŸããã§ããïŒ
䜿çšæ¹æ³ïŒService Workerã¯ã60ç§é誰ãã¢ã¯ã»ã¹ããªããšãã§ãŒãã¢ãŠãããããã«èª¿æŽãããŠããŸãã å®å šã§ã¯ãããŸããããããã·ã¥éç¥ããªãã¹ã³ããããã«ãµãããã»ã¹ã®ã©ããã§ãã³ã°ããŸãããååãšããŠã¯æ©èœããŸããããã®Service Workerã«50ç§ããšã«ã¡ãã»ãŒãžãéä¿¡ãããšãåžžã«æ©èœããŸãã ãŸãã¯ãå¥ã®ã¢ãããŒãã§ãããªã³ã©ã€ã³ã«ã¢ã¯ã»ã¹ããŠãããããService Workerã®ãŸã£ããåãã³ããŒãååŸã§ããŸãããããæ©èœããæ¯åæ°ãããã®ãããŠã³ããŒãããŸãã ããã¯äœã«äœ¿çšã§ããŸããïŒ ããã§ãããã€ãã³ã°ã ç§ãã¡ã®ç¥èããªããã°ãããã¯ã°ã©ãŠã³ãã§ãåžžã«åäœããŠãããµãŒãã¹ã¯ãŒã«ãŒããã³ã°ããŸãã ãã®è匱æ§ã¯ãChromeã®æ倧3ã€ã®ããŒãžã§ã³ã§ç¶ããŸããã ç§ã¯äœã«ã€ãªãã£ãŠããŸããã ãã¯ãããžãŒã¯éåžžã«é«éã«éçºãããŠãããé©åãªãã§ãã¯ãªãã§éåžžã«è¿ éã«æ¬çªç°å¢ã«ç§»è¡ããããããããã䜿çšããã®ã¯æãã§ãã
ããã«å¯ŸåŠããæ¹æ³ã¯ïŒ æŠãæ¹æ³ã ããšãã°ããã€ãã³ã°ã§ïŒ ãããã®ãããŸããªæäœããã¹ãŠè¿œè·¡ããŠãããã¯ãããããªæ¡åŒµæ©èœãé 眮ã§ããŸãã ãããã圌ããæ¬åœã«ç§ãã¡ãå©ããŠå©ããŠããããªãã次ã®ç« ã¯ãæ¡åŒµã¯ç§ãã¡ã®æµã§ãããããšã¯æããªãã£ãã§ãããã ç§ãã¡ã®å€ãã¯åºåãããã«ãŒã䜿çšããŠããŸãã AdBlockerãuBlockãAdGuardãªã©ã ãããŠãå®éã«ã©ã®ããã«æ©èœããããèããŠã¿ãŸãããã ã³ã³ãã³ããã¢ããããŒããããšããããã®ãããã«ãŒã¯HTMLå šäœãç»ããããã«åºåãå«ããããã¯ãé衚瀺ã«ããŸããã€ãŸããDOMã§ãããã¯ããé ãããã©ãã«ã§ãç»ãããšãã§ããŸãã 次ã«ããã©ãã¯ãªã¹ãã«ããããã€ãã®ãªãœãŒã¹ããã®ããŠã³ããŒãããããã¯ããŸããã€ãŸããå¿çãšããŠã³ã³ãã³ãã»ãã¥ãªãã£ããªã·ãŒãªããžã§ã¯ãã«ã¢ã¯ã»ã¹ã§ããŸãã ãã®åŸãå¿çèªäœã«ã¢ã¯ã»ã¹ããŸãã 圌ãã¯å¿çããçŽæ¥åºåãå«ãéšåãåãåãããšãã§ããŸãã ã€ãŸããååãšããŠããã¹ãŠãæ¡åŒµæ©èœã§å©çšå¯èœã§ãã ãããããããã®æ¡åŒµæ©èœã誰ãã®æªãæã«æž¡ããšã©ããªãã§ããããïŒ
ããã«ããªãã®ããã®æ¬åœã®ç©èªããããŸãã SergeyãChromeçšã®éåžžã«äººæ°ã®ããXMLãã¥ãŒã¢ãŒæ¡åŒµæ©èœã®äœæè ïŒ100,000ãŠãŒã¶ãŒïŒïŒ
圌ã¯ãã®ç©èªãå ±æããããªãã«äŒããããšãèš±ããŸããã ã²ãšãã³åœŒã«æ¥ãŠãè¯ããéãæäŸããŠãããŸãããç¹å¥ãªã¡ã¿æ å ±ãè¿œå ããããŠãŒã¶ãŒãã©ãããæ¥ãã®ããç¥ãããšãã§ããããã«ãªã³ã¯ãä¿®æ£ããå¿ èŠããããŸããã ååãšããŠãè¯ããéããªããç¡å®³ãªä¿®æ£...ãããŠã圌ããããã®äººã ã«ã³ãŒããæäŸãããšããã«ãæ¡åŒµæ©èœã§ãã¹ãŠã®ãªã¯ãšã¹ãã远跡ãããªã¯ãšã¹ãã«äœããã®ã¹ãããããçŸãããšããèŠæ ãããã«å§ãŸããŸããã ãã®äŸã¯ããããã®æ¡åŒµæ©èœãã©ãã ãä¿¡é Œã§ãããã瀺ããŠããŸãã çµå±ã®ãšããã圌ãã¯äœã§ãçãããšãã§ããäœã§ãä¿®æ£ããããšãã§ããŸãã ãã¡ãããSergeyã¯ãã®åé¡ãéåžžã«è¿ éã«ä¿®æ£ããããŒã«ããã¯ããŸããããããã¯éåžžã«æãããªè©±ã§ãã ãã©ãŠã¶ã®ã¢ããªã±ãŒã·ã§ã³ã«ããæ¡åŒµæ©èœãä¿¡é ŒããŠããŸããïŒ
ãããã®è匱æ§ã«ã©ã®ããã«å¯ŸåŠããŸããïŒ æ¡åŒµæ©èœãå°ãæãå Žåã¯ããŠãŒã¶ãŒãå©ããŸãããã ã©ã®æ¡åŒµæ©èœããã©ãŠã¶ã«ããããã¢ããªã±ãŒã·ã§ã³ããå€æã§ããŸãã ãããŠããããã®æ¡åŒµæ©èœãã¢ããªã±ãŒã·ã§ã³ã«ç¹ã«å®³ãåãŒãããšã確å®ã«ããã£ãŠããå Žåãããããèå¥ããããšãã§ããŸãã åæ¡åŒµåã«ã¯äžæã®IDãããããµã€ãã§çŽæ¥ç¢ºèªã§ããŸãã ããã«ããã®æ¡åŒµæ©èœã®ãããã§ã¹ãã調ã¹ãŠãã¢ããªã±ãŒã·ã§ã³ããçŽæ¥ããŠã³ããŒãã§ãããªãŒãã³ãªãœãŒã¹ãããããšã確èªã§ããŸãã
AdBlockã®äŸã§ãããã¯ããçš®ã®ã«ã¹ã¿ã CSSã§ãããšããŸãããã URLãäœæããéåžžã®æ¹æ³ã§ããŒãããããšããŸãããã®ãªãœãŒã¹ãããŒããããŠããå Žåãæ¡åŒµæ©èœã¯ããã ãã®äŸ¡å€ããããŸãã ãããã¢ããã衚瀺ããŸãã ããã«ã²ã©ããã®ãããå Žåã¯ãããéãåé€ããŠãã ãããããããªããšããã¹ãŠãçãŸããŸãã ãŠãŒã¶ãŒãæ¯æŽããŸããè²»çšã¯ããããŸãããããã3è¡ã®ã³ãŒãã§ãã
ãã£ããã³ã®ã¢ããã€ã¹ïŒå¿ èŠããªããã°ããŠãŒã¶ãŒããã¹ã¯ãªãããæ¿å ¥ããããã³ã¡ã³ããæ¿å ¥ããããã¿ã°ãå±æ§ãã¹ã¿ã€ã«ãæ¿å ¥ããããäœãæ¿å ¥ãããããªãã§ãã ããã ããããªã³ãŒãã§äœæ¥ããŸãã ããã§ããã®ãããªå¿ èŠæ§ãããå Žåã¯ããã©ãŒã ã§èªåèªèº«ãä¿è·ããŠãã ããããããã®5æåãââãšã¹ã±ãŒãããã ãã§ãå°ãªããšã1ã€ã®ã¹ã¯ãªãããã¯ã©ã€ã¢ã³ãã§å®è¡ãããããšã¯ãããŸããã 5æåã¯éåžžã«ç°¡åã§ãã
ãŸã æ¶æ¯ããå¿ èŠããããŸãã ååãšããŠãç§èªèº«ãããã€ãã®ã³ãŒããæžãããšãã§ãããšæãããå Žåãããã«å±éºãªã¿ã°ã®ããããã®ãªã¹ããããªããæ¶æ¯ããå¿ èŠãããå±æ§ããããŸãã
ãããã®å€ãããããŸããç§ãã¡ã¯ãã§ã«å€ãã®ããšãå¿ããŸãããç¥ããŸããããããããããã®å€ãããããŸãã ååã«ãã¹ããããã¿ãŒã³ããŒãœãªã¥ãŒã·ã§ã³ã䜿çšããŸãã æã人æ°ã®ããHTMLãµãã¿ã€ã¶ãŒã§ããjs-xssãDOMPurifyã§ãããéåžžã«äººæ°ã®ããã©ã€ãã©ãªã§ãã ãããã¯éåžžã«è»œéã§ãåªãããã¹ããè¡ââããã絶ããæŽæ°ãããŸããã³ãã¥ããã£ããµããŒãããŠããŸãã ãŸãããªããžã§ã¯ãã調ã¹ãŠãããã®ç¹ãèŠã€ããããã«serialize-javascriptããããŸãããã®ã©ã€ãã©ãªã䜿çšãããšãReduxã®åé¡ãéåžžã«ç°¡åã«è§£æ±ºã§ããŸãã
Content-Security-Policy-å¿çã®ç¹å¥ãªããããŒã䜿çšããŸããããã¯ããªãœãŒã¹ãããŒãžã«ããŠã³ããŒãããã«ãŒã«ãèšè¿°ããã¡ã¿ã¿ã°ãšããŠäœ¿çšã§ããŸãã ãã®ãã¡ã€ã³ããåºè·ããããšèšããŸãã ã¹ã¯ãªãããããŒãããããŒãããŸããæ»æè
ãèªåã®ãã¡ã€ã³ããäœãä»ã®ãã®ããã«ããããšãããšãããã¯æ©èœããããšã©ãŒã¡ãã»ãŒãžã衚瀺ããããããã¯ãããŸãã ããã¥ã¡ã³ãã®è©³çŽ°ã¯èª¬æããŸãããèªåã§ãã¹ãŠãèªãããšãã§ããŸããåçã®ã«ãŒã«ãã¹ã¿ã€ã«ãiframeã®æäœãã¹ã¯ãªããã®ã«ãŒã«ã«ã€ããŠèª¬æã§ããŸããããŸããŸãªèšå®ããããŸãã 2çªç®ã®ããŒãžã§ã³ã«ç»å Žããæ°ãããããã«ã€ããŠè©³ãã説æããããšæããŸãã ãã®nonce
ã¯ããµãŒããŒåŽã§çæããããã¹ãŠã®ã¹ã¯ãªããã«è¿œå ãããè¡ã§ãã ã€ãŸããæ»æè
ã¯äœããã®ã¹ã¯ãªãããæ¿å
¥ããŸãããããã®ãã³ã¹ã¯æ¯åæ°ãããããã¹ã¯ãªãããå®è¡ãããŸããã
ãŸãã¯ã2çªç®ã®æ¹æ³-ãã¹ãŠã®ã€ã³ã©ã€ã³ã¹ã¯ãªããã®ããã·ã¥åãåçŽã«èšç®ã§ããŸãã ãã®ããã·ã¥éãç¥ã£ãŠãããšãã¹ã¯ãªãããçªç¶å€æŽãããããå°ãªããšã1ã€ã®ã¹ããŒã¹ãè¿œå ãããããã¹ã¯ãªããã®é åºãå€æŽãããããããšããã¹ãŠãå®è¡ããããå®å
šã«ãªããŸãã
ãã®ãããªãšã©ãŒã¡ãã»ãŒãžãéçºã¢ãŒããã»ãŒè¡šç€ºãããŸãã æ¬çªã§ã¯ãçµ±èšãåéãããã®ã§ãããã¯ããŸã䜿çšãããŸããã Content-Security-Policyã§ã¯ãã¬ããŒããåéããããšãã§ããŸãã ç¹å¥ãªreport-uri
å±æ§ã«ãããã¬ããŒããéä¿¡ãããšã³ããã€ã³ããæå®ã§ããŸãã Content-Security-Policyã®å®è£
ãããã«æããŠããå Žåãããã¯åççã§ããããã€ãã®éèŠãªã¹ã¯ãªããããããã¯ã§ãããããæ¬çªç°å¢ã§ã¯æãã§ãã ããããã¬ããŒãå°çšã¢ãŒãã§æ¥ç¶ã§ããŸããã«ãŒã«ã¯ãŸã£ããåãããã«æ©èœããŸãããã¬ããŒãã¯ã»ãŒåã圢åŒã§éä¿¡ãããŸãããããã¯ããããã®ããããã¯ãããçç±ãã«ãŒã«ã
Content-Security-Policyã¯ãäžããããªããæããŸããã€ãŸããããªãã®ã³ãŒãã«äŸåããããã©ãŠã¶ã¬ãã«ã§ããå°ãé«ãã¬ãã«ã§èªåèªèº«ãä¿è·ããŸãã å€ããã©ãŠã¶ã§ã¯ãContent-Security-Policyã¯ãµããŒããããŠããªããããä»ã®ããããŒãç¥ãå¿ èŠããããŸãããã®ãªã¹ãã«ãããã®ãããã¯ããã«å€ãã®ãã®ããããŸãã
ã€ãŸãããªã¯ãšã¹ãã§ã®ã¿éä¿¡ãããããã¥ã¡ã³ãããã¢ã¯ã»ã¹ã§ããªãããã«ãCookieãä¿åããªãã§ãã ããã å€ããã©ãŠã¶ã§ããŸããŸãªä¿è·ããµããŒãããã«ã¯ãåŸã§èªã¿ãããããèŠããŠãããŠãã ããã ç§ãã¡ã¯éçºåŽãã身ãå®ãããšããŠããŸãããæ¬çªç°å¢ã§ã¯äœããã¹ãã§ããããïŒ ãã®ä¿è·ãèªååããããŒã«ãå¿ èŠã§ãã
ãã®ãããªãµã€ãããã³çµç¹OWASPïŒOpen Web Application Security ProjectïŒããããŸãã äœããã°ãŒã°ã«ã§æ€çŽ¢ãå§ããããééããªãããã«ãã©ãçããŸãããã¹ãŠã®è匱æ§ã«é¢ãããã¹ãŠã®é¢é£æ å ±ãšçµ±èšãåéãããŸãã ãããŠãããããã«ããªããŠããããŒã«ã®äœ¿çšã«é¢ããã¢ããã€ã¹ãæ±ããŠããããã«æããŸãã ãããã£ãŠããã®ãµã€ãã«ã¢ã¯ã»ã¹ãããšã4幎åã®ãªãªãŒã¹ã§ãã2013幎ã«ããŠã³ããŒãããããã®ãªã³ã¯ã衚瀺ãããŸãã 䜿çšããŸããïŒ ãããããªãã 2006幎ã®ãã1ã€ã®ãã³ãã§ãã ããã¯ãããããSamy Kamkarããããã³ã°ãããšãã«èµ·ããããã®ããŒã«ãç»å ŽããŸããã ã€ãŸããããã«ã¯è³¢æãªããšã¯äœããããŸããã ã»ãšãã©ã®ããŒã«ã¯Windowsã§ãåäœããŸãã ããããæãèå³æ·±ãã®ã¯ããã®ããã«ãã¥ãŒã©ãå¿ èŠãªãããšã§ãã CIã«åã蟌ã¿ãããšæããŸãã äŒæ¥åãã®æã人æ°ã®ããCIã®1ã€ã¯Jenkinsã§ããäŸãæããŸãã é説çã«èããããããããŸããããæ¬åœã«äŸ¡å€ã®ãã補åã®1ã€ã¯OWASPèªäœã®è£œåã§ããäœããã®çç±ã§ä»ã®è£œåã»ã©PRãããŠããŸããããããããµããŒãããŠããŸãã ZAPã¢ããªã±ãŒã·ã§ã³ãããã·ã¯æ¬¡ã®ããã«æ©èœããŸãã Jenkinsã®ç§ãã¡ã¯ããã®ã¢ããªã±ãŒã·ã§ã³ãããã·ãåç §ããå¿ èŠããããŸãã ãã¹ãã¢ãŒãã§ã¯ããã®ãããã·ã¯ã¢ããªã±ãŒã·ã§ã³ããã¹ãã§ããŸãã 圌ã¯ã©ã®ããã«ãããããŸããïŒ åœŒã¯åã«ã¢ããªã±ãŒã·ã§ã³ãååŸãããã¹ãŠã®å ¥åã匷å¶çã«éå§ãããã¹ãŠãé£ç¶ããŠæ¿å ¥ããæ¿å ¥ããããã®ããªããŒãããããã®ãçºçæ¹æ³ã«é¢ããã¬ããŒããåéããããŸããŸãªåœ¢åŒã§ã¬ããŒããéä¿¡ããŸãã ããã«ãé·æçã«åæãåéããã«ã¯ãã¬ããŒããäœæããããã«ZAPãã©ã°ã€ã³ãšäœããã®ãã©ã°ã€ã³ãå¿ èŠã«ãªããŸãã ãã¬ã³ããªã©ãæ§ç¯ããŸãã ãã€ãã¹é¢ã®ãã¡ãç¹ã«ããã³ããšã³ãéçºè ã«ãšã£ãŠã¯ãJenkins CIã«ãããã·ãµãŒããŒãã€ã³ã¹ããŒã«ããããšã¯éåžžã«å°é£ã§ãããã¢ããªã±ãŒã·ã§ã³ããããä»ããŠæ©èœããå Žåã¯ããã«é£ããããšãããããŸãã ããã©ãŒãã³ã¹ãäœäžããå¯èœæ§ããããŸããããœãªã¥ãŒã·ã§ã³ã¯æãç°¡åã§ã¯ãããŸããã ãããã楜ãã¿ã®ããã«ãããŒã«ã«ã«ã€ã³ã¹ããŒã«ããŠãµã€ãããã¹ãã§ããŸãã holyjs-moscow.ruã§éãã ããšããããŸãããã®ãµã€ãã§ã¯ãååãšããŠãåäžã®å ¥åã¯ãªããç Žå£ãããã®ã¯äœããããŸããã ãã ããå€ããã©ãŠã¶ã®äžéšã®ããããŒãæ¬ èœããŠãããšããããã€ãã®æšå¥šäºé ããããŸãã ã€ãŸãããã¡ã€ã³ãšãã®ãµã€ããäœããã®åœ¢ã§çµ±åããå Žåããã€ãã³ã°ã«äœ¿çšã§ããŸãã
次ã®ããŒã«ã¯Arachniã§ãåæ§ã®åçã§æ©èœããŸãã Jenkinsããããããã€ããããã¹ãç°å¢ã®URLãåç §ãããã®Arachniã«æž¡ãå¿ èŠããããŸãã Arachniã«ã¯åªããCLIããããåãããšãè¡ããã¢ããªã±ãŒã·ã§ã³ã§éãã§ãã¬ããŒããçæããŸãã 䜿çšããæ¹ã䟿å©ã§ã軜éã§ãå®è£ ãéåžžã«ç°¡åã§ãã ããã«ãã¬ããŒãã®çµæãåæãããã«ãã倱æãŸãã¯æåãšããŠããŒã¯ããããã®Text Finderãã©ã°ã€ã³ãããã³é·æçã«åæããããã®å¥ã®ãã©ã°ã€ã³ãå¿ èŠã§ãã
ããããããã¯ãã¹ãŠåçãªãã§ãã¯ã§ãã ã³ãŒããèšè¿°ããå±éãããã§ãã¯ããŸãããããã§ã«äœãééã£ãããšãæžããŠããããšãäœããã®åœ¢ã§ç解ããå¿ èŠããããŸããã€ãŸããéçåæçšã®äœããã®ããŒã«ãå«ããå¿ èŠããããŸãã Googleã§ã°ãŒã°ã«ãéå§ãããšãããã¢ãŒãã®CheckmarxãVeracodeãSonarQubeãæåã®è¡ã«è¡šç€ºãããŸã-é«äŸ¡ãªããŒã«ãäŒæ¥ã«ãšã£ãŠã¯ãããã«é«äŸ¡ã§ãã 2018 , JavaScript , ECMAScript, TypeScript, JSX, - - . ? ãã , . ESLint â . Security , , . CI .
, ? , , node-? â Node Security Platform, npm ( npm install nsp
) npm check
â . , , . , . , CI . â , package.json, , , , . , , , Snyk, . npm, , package.json, . , . Snyk , . Lighthouse, Canary, . , , dev tool, , , , , , , . Snyk GitHub, Dependency graph , , . .
, . . , . , . , - .
. , - , .
node_modules, , . Content-Security-Policy, (ESLint).
åºåã®åã ãããããåç¥ã®ããã«ãäŒè°ãè¡ã£ãŠããŸãã JavaScript â HolyJS 2018 Piter , 17-18 2018 . , ( â ), -, . èŠããã«ãç§ãã¡ã¯ããªããåŸ ã£ãŠããŸãã .