
ã»ãŒ9幎åãCloudflareã¯å°ããªäŒç€Ÿã§ãç§ã¯ããã§åããŠããããã§ã¯ãªããåãªã顧客ã§ããã Cloudflare ãç«ã¡äžããŠãã XNUMX ãæåŸãç§ã®ãŠã§ããµã€ãã«æ¬¡ã®éç¥ãå±ããŸããã DNSãæ©èœããŠããªãããã§ãã Cloudflare ã倿Žãå ãã ãDNSãå£ããŠããŸããã
ç§ã¯ããã« Matthew Prince ã«ãç§ã® DNS ã¯ã©ãã§ãã?ããšããã¿ã€ãã«ã§æçŽãæžããŸãããåœŒã¯æè¡çãªè©³çŽ°ãæºèŒã®é·ãè¿ä¿¡ãè¿ããŠããŸãããïŒãç§ã¯ããçããŸããã
åºå ž: ãžã§ã³ã»ã°ã©ãã ïŒã«ãã³ã°
æ¥æïŒ7幎2010æ9æ¥14æXNUMXå
ä»¶å: Re: DNS ã¯ã©ãã§ãã?
å®å : ãã·ã¥ãŒã»ããªã³ã¹çŽ æŽãããã¬ããŒããããããšããåé¡ãããã°å¿ ãé»è©±ããŸãããã¹ãŠã®æè¡æ å ±ãåéããããããã«ã€ããŠæçš¿ãã䟡å€ããããšèããããŸãããªãŒãã³ã§æ£çŽãªã¹ããŒãªãŒã楜ããã§ããã ãããšæããŸããç¹ã«ãããŒã³ã以æ¥ãã©ãã£ãã¯ãã©ã®ããã«å¢å ãããã瀺ãããã«ã°ã©ããæ·»ä»ããå Žåã¯ããã§ãã
ç§ã®ãµã€ãã§ã¯é©åãªç£èŠãè¡ãããŠãããé害ãçºçãããã³ã« SMS ãåãåããŸããç£èŠã®çµæãé害㯠13:03:07 ãã 14:04:12 ãŸã§ã«çºçããããšãããããŸãããã¹ã㯠XNUMX åããšã«å®è¡ãããŸãã
ãã£ãšåãããŸããããšãŒãããã«èªåã®äººéã¯å¿ èŠãªããšæããŸãã? ð
ãããŠåœŒã¯çããïŒ
åºå ž: ãã·ã¥ãŒã»ããªã³ã¹
æ¥æïŒ7幎2010æ9æ¥57æXNUMXå
ä»¶å: Re: DNS ã¯ã©ãã§ãã?
å®å : ãžã§ã³ã»ã°ã©ãã ã»ã«ãã³ã°ããããšããæžããŠãã ãã£ãçæ§ã«ãè¿äºããããŠããã ããŸãããç§ã¯ä»ãªãã£ã¹ã«åãã£ãŠããŸããããã°ã«äœãæžãããæ²ç€ºæ¿ã«å ¬åŒã®æçš¿ãåºå®ããäºå®ã§ããç§ãå®å šã«åæããŸããæ£çŽãããã¹ãŠã§ãã
çŸåšãCloudflare ã¯éåžžã«å€§ããªäŒç€Ÿã§ãããç§ã¯ããã§åããŠããŸãããä»ã§ã¯ç§ãã¡ã®ééãããã®çµæããããŠç§ãã¡ã®è¡åã«ã€ããŠççŽã«æžããªããã°ãªããŸããã
2æXNUMXæ¥ã®åºæ¥äº
2 æ XNUMX æ¥ãWAF ã®ãããŒãžã ã«ãŒã«ã«æ°ããã«ãŒã«ãå±éããŸããã äžçäžã®Cloudflareãããã¯ãŒã¯äžã®HTTP/HTTPSãã©ãã£ãã¯ãåŠçãããã¹ãŠã®ããã»ããµã³ã¢äžã§ãæ°ããè匱æ§ãè åšã«å¯Ÿå¿ããŠãWAF ã®ç®¡çã«ãŒã«ãç¶ç¶çã«æ¹åããŠããŸããããšãã°ã5 æã«ç§ãã¡ã¯æ¥ããŸããã SharePoint ã®é倧ãªè匱æ§ããä¿è·ããŸããåœç€Ÿã® WAF ã®éèŠãªç¹ã¯ãã«ãŒã«ãè¿ éãã€ã°ããŒãã«ã«å±éã§ããããšã§ãã
æ®å¿µãªãããå é±æšææ¥ã®æŽæ°ã«ã¯ãããã¯ãã©ããã³ã°ã§ HTTP/HTTPS CPU ãªãœãŒã¹ãå€éã«æµªè²»ããæ£èŠè¡šçŸãå«ãŸããŠããŸããããã®çµæãã³ã¢ã®ãããã·ãCDNãWAF æ©èœã圱é¿ãåããŸãããã°ã©ãã¯ãHTTP/HTTPS ãã©ãã£ãã¯ãåŠçããããã®ããã»ããµ ãªãœãŒã¹ããããã¯ãŒã¯å ã®ãµãŒããŒã§ã»ãŒ 100% ã«éããŠããããšã瀺ããŠããŸãã
ã€ã³ã·ãã³ãäžã®ããæç¹ã§ã® CPU 䜿çšç
ãã®çµæãåœç€Ÿã®ã¯ã©ã€ã¢ã³ãïŒããã³åœç€Ÿã®ã¯ã©ã€ã¢ã³ãã®ã¯ã©ã€ã¢ã³ãïŒã¯ãCloudflareãã¡ã€ã³ã§502ãšã©ãŒããŒãžã衚瀺ããããšã«ãªããŸããã 502 ãšã©ãŒã¯ã空ãã³ã¢ã¯ãŸã ãããã®ã®ãHTTP/HTTPS ãã©ãã£ãã¯ãåŠçããããã»ã¹ãšéä¿¡ã§ããªãã£ã Cloudflare ããã³ããšã³ã Web ãµãŒããŒã«ãã£ãŠçæãããŸããã

ãã®ä»¶ã§ã客æ§ã«ã©ãã»ã©ã®ãè¿·æãããããããã¯æ¿ç¥ããŠãããŸããç§ãã¡ã¯ãšãŠãæ¥ããããã§ãããããŠããã®å€±æã«ãããã€ã³ã·ãã³ãã«å¹æçã«å¯ŸåŠããããšãã§ããªããªããŸããã
ããªãããããã®é¡§å®¢ã®äžäººã ã£ãããããããæãããæããåæºããŠããã§ããããããã«ãç§ãã¡ã¯ ã CPU æ¶è²»éãé«ããªãã®ã¯ãæ£èŠè¡šçŸã®è¡šçŸãäžé©å㪠1 ã€ã® WAF ã«ãŒã«ãåå ã§ãéå°ãªããã¯ãã©ããã³ã°ãçºçããŸãããçœªæªæã®ãã衚çŸã¯æ¬¡ã®ãšããã§ãã (?:(?:"|'|]|}||d|(?:nan|infinity|true|false|null|undefined|symbol|math)|`|-|+)+[)]*;?((?:s|-|~|!|{}||||+)*.*(?:.*=.*)))
ããã¯ããèªäœè峿·±ããã®ã§ãã (ããã«ã€ããŠã¯åŸã»ã©è©³ãã説æããŸã)ãCloudflare ãµãŒãã¹ã 27 åéããŠã³ããã®ã¯æ£èŠè¡šçŸãééã£ãŠããããã ãã§ã¯ãããŸãããé害ã«è³ã£ãäžé£ã®åºæ¥äºã説æããã®ã«æéããããã察å¿ãé ããŸããããã®æçš¿ã®æåŸã§ã¯ãæ£èŠè¡šçŸã§ã®ããã¯ãã©ããã³ã°ã«ã€ããŠèª¬æãããã®æäœæ¹æ³ã«ã€ããŠèª¬æããŸãã
ã©ããã
é çªã«å§ããŸããããããã§ã®æéã¯ãã¹ãŠ UTC ã§ãã
ååŸ 13 æ 42 åã«ããã¡ã€ã¢ãŠã©ãŒã« ããŒã ã®ãšã³ãžãã¢ãæ€åºã«ãŒã«ã«å°ããªå€æŽãå ããŸããã èªåããã»ã¹ã䜿çšããŸããããã«ããã倿ŽèŠæ±ãã±ãããäœæãããŸããããã®ãããªãã±ãã㯠Jira ãéããŠç®¡çããŸã (äžã®ã¹ã¯ãªãŒã³ã·ã§ãã)ã
3 ååŸãPagerDuty ã®æåã®ããŒãžã衚瀺ãããWAF ã®åé¡ãå ±åãããŸãããããã¯ãéåžžã®åäœãç£èŠããããã«ãCloudflare ã®å€éšã§ WAF (æ°çŸåãããŸã) ã®æ©èœããã¹ãããç·åãã¹ãã§ããããã®ããåŸã«ã¯ãä»ã® Cloudflare ãšã³ãããŒãšã³ããµãŒãã¹ãã¹ãã®å€±æãäžççãªãã©ãã£ãã¯ã®åé¡ãåºç¯å²ã«ããã 502 ãšã©ãŒãããã³äžçäžã®éœåžã«ãããã€ã³ã ãªã ãã¬ãŒã³ã¹ (PoP) ããã®äžè¶³ã瀺ã倧éã®ã¬ããŒãã«é¢ããã¢ã©ãŒãã®ããŒãžãç¶ããŸããã CPU ãªãœãŒã¹ã®ã


ãããã®ã¢ã©ãŒããããã€ãåä¿¡ããäŒè°ããé£ã³åºããããŒãã«ã«åããéäžã§ããœãªã¥ãŒã·ã§ã³éçºéšéã®è²¬ä»»è ãããã©ãã£ãã¯ã® 80% ã倱ããããšèšããŸãããç§ã¯ SRE ãšã³ãžãã¢ã®å ã«é§ãã€ããŸããã圌ãã¯ãã§ã«åé¡ã«åãçµãã§ããã®ã§ããæåãç§ãã¡ã¯ãããäœããã®æªç¥ã®æ»æã§ãããšèããŸããã

Cloudflareã®SREãšã³ãžãã¢ã¯äžçäžã«æ£ãã°ã£ãŠããã0æéäœå¶ã§ç¶æ³ãç£èŠããŠããŸããéåžžããããã®ã¢ã©ãŒãã¯ç¯å²ãéå®ãããç¹å®ã®ããŒã«ã«ãªåé¡ãéç¥ããå éšããã·ã¥ããŒãã§è¿œè·¡ãããXNUMX æ¥ã«è€æ°å解決ãããŸãããããããããã®ããŒãžãšéç¥ã¯éåžžã«æ·±å»ãªäºæ ã瀺ããŠãããããSRE ãšã³ãžãã¢ã¯çŽã¡ã«é倧床ã¬ãã« PXNUMX ã宣èšããçµå¶é£ãšã·ã¹ãã ãšã³ãžãã¢ã«é£çµ¡ããŸããã
ãã®ãšãããã³ãã³ã®ãšã³ãžãã¢ãã¡ã¯ã¡ã€ã³ããŒã«ã§è¬çŸ©ãèããŠããŸãããè¬çŸ©ã¯äžæãããå šå¡ã倧ããªäŒè°å®€ã«éãŸããããã«å°éå®¶ãåŒã°ãããããã¯ãSRE ãèªåãã¡ã§å¯ŸåŠã§ããå žåçãªåé¡ã§ã¯ãããŸããã§ãããé©åãªå°éå®¶ãé¢äžãããããšãæ¥åã§ããã
14:00 ã«ãåé¡ã¯ WAF ã«ãããæ»æã¯ãªãã£ããšå€æããŸãããããã©ãŒãã³ã¹ ããŒã ã CPU ããŒã¿ãæœåºãããšãããWAF ãåå ã§ããããšãæããã«ãªããŸãããå¥ã®åŸæ¥å¡ã¯ strace ã䜿çšããŠãã®çè«ã確èªããŸãããä»ã®èª°ãããWAF ã«åé¡ãããããšããã°ã§ç¢ºèªããŸãããååŸ14æ02åãäžçäžã§XNUMXã€ã®ã³ã³ããŒãã³ããã·ã£ããããŠã³ããCloudflareã«çµã¿èŸŒãŸããã¡ã«ããºã ã§ããã°ããŒãã«ãã«ã䜿çšããããšãææ¡ããããšããããŒã å šäœãç§ã®ãšããã«ãã£ãŠæ¥ãŸããã
WAF ã®ã°ããŒãã« ãã«ãã©ã®ããã«è¡ã£ããã¯å¥ã®è©±ã§ããããã¯ããã»ã©åçŽã§ã¯ãããŸãããåœç€Ÿã¯èªç€Ÿè£œåã䜿çšããŠãããåœç€Ÿã®ãµãŒãã¹ä»¥æ¥ ãæ©èœãããå éšã³ã³ãããŒã« ããã«ãèªèšŒããŠãã°ã€ã³ã§ããŸããã§ãã (ãã¹ãŠãä¿®æ£ãããåŸãå éšã³ã³ãããŒã« ããã«ãç®çã§äœ¿çšãããŠããªãå Žåã«è³æ Œæ å ±ãç¡å¹ã«ããã»ãã¥ãªãã£æ©èœãåå ã§ãäžéšã®ããŒã ã¡ã³ããŒãã¢ã¯ã»ã¹ã§ããªããªã£ãããšãããããŸãã)é·ãéïŒã
ãããŠãJira ããã«ã ã·ã¹ãã ãªã©ã®å éšãµãŒãã¹ã«ã¢ã¯ã»ã¹ã§ããŸããã§ãããåé¿çã®ã¡ã«ããºã ãå¿ èŠã§ããããããã¯ããŸã䜿çšãããŸããã§ãã (ããã解決ããå¿ èŠããããŸã)ãæçµçã«ã14 人ã®ãšã³ãžãã¢ã 07 æ 14 åã« WAF ãç¡å¹ã«ããããšã«æåãã09 æ XNUMX åã«ã¯ãã©ãã£ãã¯ãš CPU ã¬ãã«ãã©ãã§ãæ£åžžã«æ»ããŸããã Cloudflareã®æ®ãã®ä¿è·ã¡ã«ããºã ã¯éåžžã©ããæ©èœããŸããã
次ã«ãWAF ã®åŸ©å ã«çæããŸããç¶æ³ãç°åžžã ã£ãããã1 ã€ã®éœåžã§å¥ã®ãã©ãã£ãã¯ã䜿çšããŠãã¬ãã£ã ãã¹ã (倿Žãæ¬åœã«åé¡ãªã®ãèªåãã) ãšããžãã£ã ãã¹ã (ããŒã«ããã¯ãæ©èœããããšã確èªãã) ãå®è¡ããããããææé¡§å®¢ã転éããŸããã
14æ52åãåå ãåãã£ããšç¢ºä¿¡ããŠä¿®æ£ããWAFãå床ãªã³ã«ããŸããã
Cloudflareã®ä»çµã¿
Cloudflareã«ã¯ãWAFã®ã«ãŒã«ç®¡çãå°éãšãããšã³ãžãã¢ã®ããŒã ãããŸããæ€åºçãåäžããã誀æ€ç¥ãæžãããæ°ããªè åšãåºçŸãããšãã«è¿ éã«å¯Ÿå¿ããããåªããŠããŸããéå» 60 æ¥éã§ãWAF ã®ç®¡çã«ãŒã«ã«å¯Ÿã㊠476 ä»¶ã®å€æŽãªã¯ãšã¹ããåŠçãããŸãã (å¹³å 3 æéã« XNUMX ä»¶)ã
ãã®ç¹å®ã®å€æŽã¯ãå®éã®ã¯ã©ã€ã¢ã³ã ãã©ãã£ãã¯ãã«ãŒã«ãééãããã®ã®ãäœããããã¯ãããªãã·ãã¥ã¬ãŒã·ã§ã³ ã¢ãŒãã§å±éããå¿ èŠããããŸããããã®ã¢ãŒãã䜿çšããŠãã«ãŒã«ã®æå¹æ§ããã¹ãããåœéœæ§çãšåœé°æ§çãæž¬å®ããŸãããã ããã·ãã¥ã¬ãŒã·ã§ã³ ã¢ãŒãã§ãã£ãŠããã«ãŒã«ã¯å®éã«å®è¡ããå¿ èŠãããããã®å Žåãã«ãŒã«ã«ã¯ããã»ããµ ãªãœãŒã¹ãéå°ã«æ¶è²»ããæ£èŠè¡šçŸãå«ãŸããŠããŸããã
äžèšã®å€æŽãªã¯ãšã¹ããããããããã«ãå±éèšç»ãããŒã«ããã¯èšç»ãããã³ãã®ã¿ã€ãã®å±éçšã®å éšæšæºæäœæé (SOP) ãžã®ãªã³ã¯ããããŸããã«ãŒã«ã倿Žããããã® SOP ã«ãããã«ãŒã«ãã°ããŒãã«ã«å ¬éã§ããŸããå®éãCloudflareã§ã¯ãç©äºã¯ãŸã£ããç°ãªãæ¹æ³ã§è¡ãããSOPã§ã¯ããã¹ãããã³å éšäœ¿çšã®ããã«ãœãããŠã§ã¢ãæåã«ç€Ÿå ã®Point of PresenceïŒPoPïŒïŒåŸæ¥å¡ã䜿çšããïŒã«åºè·ããæ¬¡ã«ç€Ÿå ã®å°æ°ã®ã¯ã©ã€ã¢ã³ãã«åºè·ããããšãèŠå®ãããŠããŸããéé¢ãããå Žæã«ã次ã«å€æ°ã®ã¯ã©ã€ã¢ã³ãã«ããããŠåããŠå šäžçã«ã
èŠãç®ã¯ãããªæãã§ãã BitBucket çµç±ã§å éšçã« git ã䜿çšããŸãã倿Žã«åãçµããšã³ãžãã¢ã¯ã³ãŒããéä¿¡ããããã TeamCity ã«çµã¿èŸŒãŸããŸãããã«ããåæ Œãããšãã¬ãã¥ãŒæ åœè ãå²ãåœãŠãããŸãããã« ãªã¯ãšã¹ããæ¿èªããããšãã³ãŒããã¢ã»ã³ãã«ãããäžé£ã®ãã¹ãã (å床) å®è¡ãããŸãã
ãã«ããšãã¹ããæ£åžžã«å®äºãããšãJira ã§å€æŽãªã¯ãšã¹ããäœæãããé©åãªãããŒãžã£ãŒãŸãã¯ãªãŒããŒã倿Žãæ¿èªããå¿ èŠããããŸããæ¿èªåŸãDOGãPIGãããã³ãããããPoP åç©åããžã®å±éãè¡ãããŸãã ïŒç¬ãè±ãã«ããªã¢ïŒã
DOG PoP ã¯ãCloudflare ã®åŸæ¥å¡ã®ã¿ã䜿çšãã Cloudflare PoP (ä»ã®éœåžãšåæ§) ã§ããå éšäœ¿çšã®ããã® PoP ã䜿çšãããšã顧客ã®ãã©ãã£ãã¯ããœãªã¥ãŒã·ã§ã³ã«æµå ¥ãå§ããåã«åé¡ãçºèŠã§ããŸãã䟿å©ãªãã®ã
DOG ãã¹ããæåãããšãã³ãŒã㯠PIG (ã¢ã«ã¢ãã) ã¹ããŒãžã«é²ã¿ãŸãããã㯠Cloudflare PoP ã§ãå°éã®ç¡æã®é¡§å®¢ãã©ãã£ãã¯ãæ°ããã³ãŒããééããŸãã
ãã¹ãŠãæ£åžžã§ããã°ãã³ãŒã㯠Canary ã«å
¥åãããŸããäžçã®ããŸããŸãªå°åã« 3 ã€ã® Canary PoP ããããŸãããã®ã³ãŒãã§ã¯ãææã¯ã©ã€ã¢ã³ããšç¡æã¯ã©ã€ã¢ã³ãã®ãã©ãã£ãã¯ãæ°ããã³ãŒããééããããããšã©ãŒã®æåŸã®ãã§ãã¯ãšãªããŸãã
Cloudflareã§ã®ãœãããŠã§ã¢ãªãªãŒã¹ããã»ã¹
ã³ãŒãã Canary ã§åé¡ãªããã°ããªãªãŒã¹ããŸãã DOGãPIGãCanaryãå šäžçã®ãã¹ãŠã®æ®µéãééããã«ã¯ãã³ãŒãã®å€æŽã«å¿ããŠæ°æéãŸãã¯æ°æ¥ããããŸãã Cloudflareã®ãããã¯ãŒã¯ãšã¯ã©ã€ã¢ã³ãã¯å€æ§ã§ãããããã³ãŒãããã¹ãŠã®ã¯ã©ã€ã¢ã³ãã«ã°ããŒãã«ã«ãªãªãŒã¹ããåã«ãã³ãŒãã培åºçã«ãã¹ãããŸãããã ããè åšã«ã¯è¿ éã«å¯Ÿå¿ããå¿ èŠããããããWAF ã¯ç¹ã«ãã®ããã»ã¹ã«åŸããŸããã
WAFã®è
åš
é廿°å¹Žéã§ãäžè¬çãªã¢ããªã±ãŒã·ã§ã³ã«ãããè
åšã倧å¹
ã«å¢å ããŸãããããã¯ããœãããŠã§ã¢ ãã¹ã ããŒã«ã®å¯çšæ§ãåäžããããã§ããããšãã°ãæè¿æ¬¡ã®ããã«æžããŸããã ).

åºæïŒ
å€ãã®å ŽåãæŠå¿µå®èšŒãäœæãããããã« Github ã§å ¬éããããããã¢ããªã±ãŒã·ã§ã³ãä¿å®ããŠããããŒã ã¯ã¢ããªã±ãŒã·ã§ã³ãè¿ éã«ãã¹ãããé©åã«ã»ãã¥ãªãã£ã確ä¿ãããŠããããšã確èªã§ããŸãããããã£ãŠãCloudflareã¯ã顧客ããœãããŠã§ã¢ãä¿®æ£ããæ©äŒãåŸãããšãã§ããããã«ãæ°ããæ»æã«ã§ããã ãæ©ã察å¿ããèœåãå¿ èŠãšããŠããŸãã
Cloudflare ã®è¿ éãªå¯Ÿå¿ã®å¥œäŸã¯ã5 æã« SharePoint ã®è匱æ§ä¿è·ãå°å ¥ããããšã§ã (ïŒããã®çºè¡šãè¡ãããçŽåŸãç§ãã¡ã¯ãã客æ§ã® SharePoint ã€ã³ã¹ããŒã«ã®è匱æ§ãæªçšããããšããèšå€§ãªæ°ã®è©Šã¿ã«æ°ã¥ããŸãããåœç€Ÿã®ã¹ã¿ããã¯åžžã«æ°ããè åšãç£èŠããã客æ§ãä¿è·ããããã®ã«ãŒã«ãäœæããŠããŸãã
æšææ¥ã«åé¡ãåŒãèµ·ãããã«ãŒã«ã¯ãã¯ãã¹ãµã€ãã¹ã¯ãªããã£ã³ã°ïŒXSSïŒããä¿è·ããããšãæ³å®ããŠããããã®ãããªæ»æãè¿å¹Žéåžžã«é »ç¹ã«ãªã£ãŠããŸãã

åºæïŒ
WAF ã®ãããŒãžã ã«ãŒã«ã倿Žããæšæºæé ã¯ãã°ããŒãã«å±éã®åã«ç¶ç¶çã€ã³ãã°ã¬ãŒã·ã§ã³ (CI) ãã¹ãã宿œããããšã§ããå é±ã®æšææ¥ã«ãããå®è¡ããã«ãŒã«ãå±éããŸãããååŸ 13 æ 31 åã«ããšã³ãžãã¢ã倿Žãå ããŠæ¿èªããããã« ãªã¯ãšã¹ããéä¿¡ããŸããã

13æ37åãTeamCityã¯ã«ãŒã«ãåéãããã¹ããå®è¡ãããŽãŒãµã€ã³ãåºããŸããã WAF ãã¹ã ã¹ã€ãŒãã¯ãWAF ã®ã³ã¢æ©èœããã¹ãããåã ã®æ©èœã«å¯Ÿãã倿°ã®åäœãã¹ãã§æ§æãããŸããåäœãã¹ãã®åŸãèšå€§ãªæ°ã® HTTP ãªã¯ãšã¹ãã䜿çšã㊠WAF ã®ã«ãŒã«ããã¹ãããŸããã HTTP ãªã¯ãšã¹ãã¯ãã©ã®ãªã¯ãšã¹ãã WAF ã«ãã£ãŠãããã¯ãããã¹ãã (æ»æã黿¢ãããã)ãã©ã®ãªã¯ãšã¹ããééã§ãããã確èªããŸã (ãã¹ãŠããããã¯ããã誀æ€ç¥ãé¿ãããã)ãããããéå°ãª CPU 䜿çšçã«ã€ããŠã¯ãã¹ãããŸããã§ããããŸãã以åã® WAF ãã«ãã®ãã°ã調ã¹ããšãã«ãŒã« ãã¹ãã®å®è¡æéã¯å¢å ããŠããããååãªãªãœãŒã¹ããªãããšãçãã®ã¯å°é£ã§ããããšãããããŸããã
ãã¹ãã¯åæ ŒããTeamCity ã¯ååŸ 13 æ 42 åã«å€æŽã®èªåãããã€ãéå§ããŸããã
ã¯ã€ãã¯ã·ã«ããŒ
WAF ã«ãŒã«ã¯è åšã®å³æä¿®åŸ©ã«éç¹ã眮ããŠããããã倿Žãæ°ç§ã§ã°ããŒãã«ã«äŒæãã Quicksilver ã®åæ£ããŒããªã¥ãŒ ã¹ãã¢ã䜿çšã㊠WAF ã«ãŒã«ãå±éããŸããåœç€Ÿã®ãã¹ãŠã®ã¯ã©ã€ã¢ã³ãã¯ãããã·ã¥ããŒããŸã㯠API çµç±ã§æ§æã倿Žãããšãã«ãã®ãã¯ãããžãŒã䜿çšããŠããããã®ãããã§åœç€Ÿã¯å€æŽã«è¶ é«éã§å¯Ÿå¿ã§ããŸãã
ã¯ã€ãã¯ã·ã«ããŒã«ã€ããŠã¯ããŸã話ããŠããŸããã§ããã以åã«äœ¿çšããŠãã ããŒãšå€ã®ãã¢ã®ã°ããŒãã«ã«åæ£ãããã¹ãã¢ãšããŠæ©èœããŸããããéçšäžã®åé¡ããã£ããããç§ãã¡ã¯ç¬èªã®ã¹ãã¢ãäœæãã180 以äžã®éœåžã§è€è£œããŸãããçŸåšãQuicksilver ã䜿çšããŠãæ§æå€æŽãã¯ã©ã€ã¢ã³ãã«ããã·ã¥ããWAF ã«ãŒã«ãæŽæ°ããã¯ã©ã€ã¢ã³ãã«ãã£ãŠäœæããã JavaScript ã³ãŒãã Cloudflare Workers ã«é åžããŸãã
ããã·ã¥ããŒãäžã®ãã¿ã³ãã¯ãªãã¯ããã API ãåŒã³åºããŠãããäžçäžã§æ§æã倿ŽãããŸã§ã«ãããæéã¯ãããæ°ç§ã§ããã客æ§ã¯ãã®ã»ããã¢ããã®éããæ°ã«å ¥ããŸããããããŠãWorkers ã¯ãã»ãŒç¬æã«ã°ããŒãã«ãªãœãããŠã§ã¢ãå°å ¥ã§ããããã«ããŸããå¹³åããŠãQuicksilver 㯠350 ç§ãããçŽ XNUMX ã®å€æŽãäŒæããŸãã
ãããŠã¯ã€ãã¯ã·ã«ããŒã¯éåžžã«éãã§ããå¹³åããŠãäžçäžã®ãã¹ãŠã®ã³ã³ãã¥ãŒã¿ãŒã«å€æŽãäŒæããããã«ã99 ããŒã»ã³ã¿ã€ã« 2,29 ç§ãéæããŸãããéåžžãã¹ããŒãã¯è¯ãããšã§ããçµå±ã®ãšãããæ©èœãæå¹ã«ããããã£ãã·ã¥ãã¯ãªã¢ããããããšãããã¯ã»ãŒç¬æã«ã©ãã§ãè¡ãããŸãã Cloudflare Workersãä»ããã³ãŒãã®éä¿¡ã¯åãé床ã§è¡ãããŸãã Cloudflareã¯ã顧客ã«é©åãªã¿ã€ãã³ã°ã§ã®è¿ éãªã¢ããããŒããçŽæããŸãã
ãããä»åã®å Žåãã¹ããŒããç§ãã¡ã«ã²ã©ãåè«ãèšããã«ãŒã«ã¯æ°ç§ã®ãã¡ã«ã©ãã§ã倿ŽãããŸããã WAF ã³ãŒãã Lua ã䜿çšããŠããããšã«æ°ã¥ãããããããŸããã Cloudflareã¯æ¬çªç°å¢ãšè©³çްã§Luaãåºç¯å²ã«äœ¿çšããŠããŸã æã ã Lua WAF ã䜿çšãã å éšçã«ç §åã®ããã«ããã¯ãã©ããã³ã°ãé©çšããŸããå¶åŸ¡äžèœã«ãªã£ã衚çŸããä¿è·ããã¡ã«ããºã ã¯ãããŸããã以äžã§ã¯ãããã«ã€ããŠè©³ãã説æããããã«å¯ŸããŠç§ãã¡ãåãçµãã§ããããšã«ã€ããŠèª¬æããŸãã
ã«ãŒã«ããããã€ãããåã¯ããã¹ãŠãã¹ã ãŒãºã«é²ã¿ãŸããããã« ãªã¯ãšã¹ããäœæãããŠæ¿èªãããCI/CD ãã€ãã©ã€ã³ãã³ãŒããåéããŠãã¹ããããããã€ãšããŒã«ããã¯ã管çãã SOP ã«åŸã£ãŠå€æŽãªã¯ãšã¹ããéä¿¡ããããããã€ãå®äºããŸããã
Cloudflare WAF å°å
¥ããã»ã¹
äœãããŸããããªãã£ã
å
ã»ã©ãè¿°ã¹ãããã«ãç§ãã¡ã¯æ¯é±æ°åã®æ°ãã WAF ã«ãŒã«ãå°å
¥ããŠããããã®ãããªå°å
¥ã«ããæªåœ±é¿ããä¿è·ããããã®å€ãã®ã·ã¹ãã ãå°å
¥ããŠããŸãããããŠãäœãåé¡ãçºçãããšãã¯ãéåžžãè€æ°ã®ç¶æ³ãäžåºŠã«çµã¿åããã£ãŠèµ·ãããŸããçç±ã 1 ã€ã ãèŠã€ãã£ãå Žåã¯ããã¡ããå®å¿ã§ããŸãããå¿
ããããããšã¯éããŸãããããããéãªã£ãŠãHTTP/HTTPS ãµãŒãã¹ã®å€±æã«ã€ãªãã£ãçç±ã§ãã
- ãšã³ãžãã¢ããéå°ãªçµæãããããå¯èœæ§ã®ããæ£èŠè¡šçŸãäœæããŸããã .
- æ£èŠè¡šçŸã«ããéå°ãª CPU ã®æµªè²»ãé²ãæ©èœããæ°é±éåã® WAF ã®ãªãã¡ã¯ã¿ãªã³ã°ã§èª€ã£ãŠåé€ãããŸããããã®ãªãã¡ã¯ã¿ãªã³ã°ã¯ãWAF ã®ãªãœãŒã¹æ¶è²»ãæžããããã«å¿ èŠã§ããã
- æ£èŠè¡šçŸãšã³ãžã³ã«ã¯è€éãã®ä¿èšŒããããŸããã§ããã
- ãã¹ã ã¹ã€ãŒãã¯éå°ãª CPU æ¶è²»ãæ€åºã§ããŸããã§ããã
- SOP ã«ãããè€æ°æ®µéã®ããã»ã¹ãå¿ èŠãšããã«ãç·æ¥ã§ãªãã«ãŒã«å€æŽãã°ããŒãã«ã«å±éããããšãã§ããŸãã
- ããŒã«ããã¯èšç»ã§ã¯ãå®å šãª WAF ãã«ãã 2 åå®è¡ããå¿ èŠããããé·ãæéãããããŸããã
- äžççãªäº€éåé¡ã«é¢ããæåã®èŠå ±ãçºããããã®ãé ãããŸããã
- ã¹ããŒã¿ã¹ããŒãžã®æŽæ°ã«æéãããããŸããã
- äžå ·åã«ããã·ã¹ãã ãžã®ã¢ã¯ã»ã¹ã«åé¡ãããããã€ãã¹æé ãååã«ç¢ºç«ãããŠããŸããã§ããã
- SRE ãšã³ãžãã¢ã¯ãã»ãã¥ãªãã£äžã®çç±ã«ããè³æ Œæ å ±ã®æå¹æéãåãããããäžéšã®ã·ã¹ãã ã«ã¢ã¯ã»ã¹ã§ããªããªããŸããã
- åœç€Ÿã®é¡§å®¢ã¯ãCloudflare ãªãŒãžã§ã³ãçµç±ãããããCloudflare ããã·ã¥ããŒãã API ã«ã¢ã¯ã»ã¹ã§ããŸããã§ããã
å é±ã®æšææ¥ããå€ãã£ãããš
ãŸããWAF ã®ãªãªãŒã¹ã«é¢ãããã¹ãŠã®äœæ¥ãå®å šã«åæ¢ããæ¬¡ã®ããšãè¡ã£ãŠããŸãã
- åé€ãã CPU éå°äœ¿çšä¿è·ãåå°å ¥ããŸãã ïŒæºåãã§ããŠïŒ
- WAF ã®ç®¡çã«ãŒã«å ã® 3868 åã®ã«ãŒã«ããã¹ãŠæåã§ãã§ãã¯ããŠãéå°ãªããã¯ãã©ããã³ã°ã®ãã®ä»ã®æœåšçãªã±ãŒã¹ãèŠã€ããŠä¿®æ£ããŸãã (æ€èšŒå®äº)
- ãã¹ã ã»ããã«ã¯ãã¹ãŠã®ã«ãŒã«ã®ããã©ãŒãã³ã¹ ãããã¡ã€ãªã³ã°ãå«ãŸããŠããŸãã ïŒäºå®ïŒ19æXNUMXæ¥ïŒ
- æ£èŠè¡šçŸãšã³ãžã³ãžã®åãæ¿ã ãŸã㯠- ã©ã¡ããå®è¡æä¿èšŒãæäŸããŸãã ïŒäºå®ïŒ31æXNUMXæ¥ïŒ
- Cloudflareã®ä»ã®ãœãããŠã§ã¢ãšåæ§ã«ãã«ãŒã«ã段éçã«å±éããããã«SOPãæžãçŽããŠããŸãããåæã«ãæ»æããã§ã«å§ãŸã£ãŠããå Žåã«ç·æ¥ã«ã°ããŒãã«ã«å±éããæ©èœãåããŠããŸãã
- Cloudflare ãªãŒãžã§ã³ãã Cloudflare ããã·ã¥ããŒããš API ãç·æ¥ã«åé€ããæ©èœãéçºäžã§ãã
- ããŒãžæŽæ°ã®èªåå .
é·æçã«ã¯ãç§ãæ°å¹Žåã«äœæãã Lua WAF ããé¢ããŠããããšã«ãªããŸãã WAF ã®ç§»åå ãããã«ãããWAF ã®é床ãåäžãã远å ã®ä¿è·ã¬ãã«ãåŸãããŸãã
ãŸãšã
ãã®é害ã«ãããåœç€Ÿããã³ã客æ§ã«ã¯ãè¿·æããããããŸãããç§ãã¡ã¯ç¶æ³ãä¿®æ£ããããã«è¿ éã«è¡åããçŸåšãã¯ã©ãã·ã¥ã®åå ãšãªã£ãããã»ã¹ã®æ¬ é¥ã«åãçµãã§ããã»ããå°æ¥æ°ãããã¯ãããžãŒã«ç§»è¡ããéã«æ£èŠè¡šçŸã«é¢ããæœåšçãªåé¡ãé²ãããã«ããã«æ·±ã調æ»ããŠããŸãã
ãã®åºŠã®ãµãŒãã¹åæ¢ã«ã€ããŠã¯éåžžã«åœæããŠãããã客æ§ã«ãè©«ã³ç³ãäžããŸãããããã®å€æŽã«ããããã®ãããªããšãäºåºŠãšèµ·ãããªãããã«ãªãããšãé¡ã£ãŠããŸãã
å¿çšãæ£èŠè¡šçŸãããã¯ãã©ããã³ã°ãã
åŒã®ä»çµã¿ãçè§£ããã«ã¯:
(?:(?:"|'|]|}||d
(?:nan|infinity|true|false|null|undefined|symbol|math)|`|-
|+)+[)]*;?((?:s|-|~|!|{}||||+)*.*(?:.*=.*)))CPU ãªãœãŒã¹ããã¹ãŠäœ¿ãæãããå Žåã¯ãæšæºã®æ£èŠè¡šçŸãšã³ãžã³ãã©ã®ããã«åäœãããã«ã€ããŠå°ãç¥ã£ãŠããå¿
èŠããããŸããããã§åé¡ãšãªãã®ã¯ãã¿ãŒã³ã§ã .*(?:.*=.*). (?: ãããŠå¯Ÿå¿ãã ) ã¯éãã£ãã㣠ã°ã«ãŒãã§ã (ã€ãŸããæ¬åŒ§å
ã®åŒã¯ 1 ã€ã®åŒãšããŠã°ã«ãŒãåãããŸã)ã
éå°ãª CPU æ¶è²»ã®ã³ã³ããã¹ãã§ã¯ããã®ãã¿ãŒã³ã¯æ¬¡ã®ããã«èª¬æã§ããŸãã .*.*=.*ããã®åœ¢åŒã§ã¯ããã¿ãŒã³ãäžå¿
èŠã«è€éã«èŠããŸããããããããéèŠãªã®ã¯ãçŸå®ã®äžçã§ã¯ããããã©ã°ã¡ã³ããšãã®åŸã«å¥ã®ãã©ã°ã¡ã³ããç¶ãããšããšã³ãžã³ã«èŠæ±ããåŒ (WAF ã«ãŒã«ã®è€éãªåŒãªã©) ãèŽåœçãªããã¯ãã©ããã³ã°ã«ã€ãªããå¯èœæ§ãããããšã§ããã ããããã

æ£èŠè¡šçŸã§ã¯ . 1 æåãšäžèŽããå¿
èŠãããããšãæå³ããŸãã .* - 0 å以äžã®æåãã貪欲ã«ãäžèŽãããŸããã€ãŸããæå€§ã®æåããã£ããã£ããŸãã .*.*=.* ã¯ã0 å以äžã®æåãšäžèŽããæ¬¡ã« 0 å以äžã®æåãšäžèŽãããªãã©ã« = æåãæ€çŽ¢ãã0 å以äžã®æåãšäžèŽããããšãæå³ããŸãã
ãã¹ãã©ã€ã³ã«è¡ã£ãŠã¿ãŸããã x=xããšãã衚çŸã«çžåœããŸã .*.*=.*. .*.* çå·ãæåã®ãã®ãšäžèŽããåã« x (ã°ã«ãŒãã®ãã¡ã®1〠.* äžèŽ xã2çªç®ã®ãŒãæåïŒã .* after = æåŸã«äžèŽ x.
ãã®æ¯èŒã«ã¯ 23 ã®æé ãå¿
èŠã§ããæåã®ã°ã«ãŒã .* в .*.*=.* 貪欲ã«åäœããæååå
šäœãšäžèŽããŸã x=xããšã³ãžã³ã¯æ¬¡ã®ã°ã«ãŒãã«ç§»åããŸã .*ãäžèŽããæåããããªãã®ã§ã2 çªç®ã®ã°ã«ãŒã .* ãŒãæåãšäžèŽããŸã (ããã¯èš±å¯ãããŸã)ããã®åŸããšã³ãžã³ãæšèã«ç§»åããŸã =ããã以äžã·ã³ãã«ã¯ãããŸãã (æåã®ã°ã«ãŒã) .* 衚çŸå
šäœã䜿çšãã x=x)ãæ¯èŒã¯è¡ãããŸããã
ãããŠãæ£èŠè¡šçŸãšã³ãžã³ã¯æåã«æ»ããŸããåœŒã¯æåã®ã°ã«ãŒãã«ç§»ããŸã .* ãããŠãããæ¯èŒããŸã Ñ x= ïŒãã®ä»£ãã x=x)ããã®åŸ 2 çªç®ã®ã°ã«ãŒããšå¯ŸæŠããŸã .*ã 2çªç®ã®ã°ã«ãŒã .* 2çªç®ãšæ¯èŒãããŸã x, ãããŠãŸãããŠãæåãæ®ããŸããããããŠãšã³ãžã³ãåã³ããããš = в .*.*=.*ãäœãæ©èœããŸããããããŠåœŒã¯åã³åŸæ»ãããŸãã
ä»åã®ã°ã«ãŒã㯠.* ãŸã äžèŽããŸã x=ããããã2çªç®ã®ã°ã«ãŒã .* ãããã xããŒãæåããšã³ãžã³ã¯ãªãã©ã«æåãèŠã€ããããšããŠããŸã = ãã¿ãŒã³ã®äžã§ .*.*=.*ããããåºãŠããŸããïŒçµå±æåã®ã°ã«ãŒãããã§ã«å é ããŠããŸããïŒ .*ïŒããããŠåœŒã¯åã³åŸæ»ãããŸãã
ä»åã¯ç¬¬äžã°ã«ãŒã .* æåã® x ã®ã¿ãåããŸããããã第äºã°ã«ãŒã㯠.* ã貪欲ã«ãæãããŸã =xãäœãèµ·ããããã§ã«äºæ³ããŸãããïŒãšã³ãžã³ã¯ãªãã©ã«ãšäžèŽããããšããŸã =ã倱æããŠãŸãåŸæ»ãããŸãã
æåã®ã°ã«ãŒã .* ãŸã æåã®ãã®ãšäžèŽããŸã xã 2çª .* ã ãããããŸã =ããã¡ããããšã³ãžã³ã¯æåéãäžèŽããããšã¯ã§ããŸãã =ã2çªç®ã®ã°ã«ãŒãããã§ã«ãããè¡ã£ãŠããããã .*ããããŠãŸãåŸæ»ãããããŠã3 æåã®æååãç
§åããããšããŠããŸãã
ãã®çµæãæåã®ã°ã«ãŒãã¯ã .* æåã®ãã®ã®ã¿ã«äžèŽããŸã xäºçªç® .* - æåããŒãã®å Žåããšã³ãžã³ã¯æçµçã«ãªãã©ã«ãšäžèŽããŸã = åŒã§ Ñ = åããªããŠãæ¬¡ã¯æåŸã®ã°ã«ãŒãã§ã .* ååã®ãã®ãšæ¯èŒãããŸã x.
ã®ã¿ã®23ã¹ããã x=xã Perl ã®äœ¿çšã«é¢ããçããããªãèŠã , ããã¯ãã¹ããããšããã¯ãã©ããã³ã°ãã©ã®ããã«çºçãããã瀺ããŠããŸãã

ããã¯ãã§ã«å€§å€ãªäœæ¥ã§ããã代ããã«ã©ãã§ãããã x=x ç§ãã¡ã¯æã£ãŠããŸã x=xx?ããã¯33ã¹ãããã§ããã§ããã x=xxx? 45. ãã®é¢ä¿ã¯çŽç·çã§ã¯ãããŸãããã°ã©ãã¯ä»¥äžãšã®æ¯èŒã瀺ããŠããŸãã x=x ЎП x=xxxxxxxxxxxxxxxxxxxx ïŒ20 x åŸã® =ïŒãåŸã® x ã 20 ããå Žå =ããšã³ãžã³ã¯ 555 ã¹ãããã§ãããã³ã°ãå®äºããŸãã (ãŸããè² ããŠããŸã£ãå Žåã¯ã x= æååã¯åçŽã« 20 ã§æ§æãããŸã xããšã³ãžã³ã¯äžèŽããªãããšãçè§£ãããŸã§ã« 4067 ã¹ãããããããŸã)ã

ãã®ãããªã§ã¯ãæ¯èŒã®ããã«ãã¹ãŠã®ããã¯ãã©ããã³ã°ã瀺ããŠããŸã x=xxxxxxxxxxxxxxxxxxxx:

åé¡ã¯ãæååãµã€ãºãå¢å ããã«ã€ããŠããããã³ã°æéãè¶
çŽç·çã«å¢å ããããšã§ãããã ããæ£èŠè¡šçŸãå°ã倿Žãããšãç¶æ³ãããã«æªåããå¯èœæ§ããããŸããæã£ãŠãããšããŸããã .*.*=.*; (ã€ãŸãããã¿ãŒã³ã®æåŸã«æåéãã®ã»ãã³ãã³ããããŸãã)ãããšãã°ã次ã®ãããªåŒã«äžèŽãããã«ã¯ã foo=bar;.
ãããŠãããã§åŸæ»ããããšæ¬åœã«æ²æšãªããšã«ãªããŸããæ¯èŒçš x=x 90 ã¹ãããã§ã¯ãªã 23 ã¹ãããããããŸãããããŠãã®æ°ã¯æ¥éã«å¢å ããŠããŸããæ¯ã¹ã x= ãããŠã20 x, 5353æ©å¿
èŠã§ããããããã£ãŒãã§ãã軞ã®å€ãèŠãŠãã ãã Y åã®ã°ã©ããšæ¯èŒããŠãã ããã

èå³ãããã°ã5353 ä»¶ã®å€±æãããããã³ã° ã¹ãããããã¹ãŠç¢ºèªããŠãã ããã x=xxxxxxxxxxxxxxxxxxxx О .*.*=.*;

貪欲ãªãããã³ã°ã§ã¯ãªãé
å»¶ãããã³ã°ã䜿çšããããšã«ãããããã¯ãã©ããã³ã°ã®çšåºŠãå¶åŸ¡ã§ããŸããå
ã®è¡šçŸã次ã®ããã«å€æŽãããšã .*?.*?=.*?ãæ¯èŒã®ããã« x=x 11 ã¹ããã (23 ã¹ãããã§ã¯ãããŸãã) ãå¿
èŠã§ããã¯ã©ãããšèšããš x=xxxxxxxxxxxxxxxxxxxxããã¹ãŠã®çç±ã¯ ? åŸã® .* 次ã«é²ãåã«ãæå°éã®æåæ°ãšäžèŽããããã«ãšã³ãžã³ã«æç€ºããŸãã
ããããé
å»¶ãããã³ã°ã¯ããã¯ãã©ããã³ã°ã®åé¡ãå®å
šã«è§£æ±ºããããã§ã¯ãããŸãããæ²æšãªäŸã«çœ®ãæãããš .*.*=.*; Ма .*?.*?=.*?;ã®å Žåãå®è¡æéã¯å€ãããŸããã x=x ããã§ã 555 ã¹ãããå¿
èŠã§ãã x= ãããŠã20 x - 5353
(ããå ·äœæ§ãé«ããããã«ãã¿ãŒã³ãå®å šã«æžãçŽã以å€ã«) ã§ããå¯äžã®ããšã¯ãããã¯ãã©ããã³ã° ã¡ã«ããºã ãåããæ£èŠè¡šçŸãšã³ãžã³ãæŸæ£ããããšã§ãããããä»åŸæ°é±éã«ããã£ãŠè¡ãããäºå®ã§ãã
ãã®åé¡ã®è§£æ±ºçã¯ãã±ã³ãã»ãã³ããœã³ãèšäºãæžãã 1968 幎以æ¥ç¥ãããŠããŸããã (ãããã°ã©ãã³ã°æ¹æ³: æ£èŠè¡šçŸæ€çŽ¢ã¢ã«ãŽãªãºã ã)ããã®èšäºã§ã¯ãæ£èŠè¡šçŸãéæ±ºå®çæéç¶æ ãã·ã³ã«å€æããéæ±ºå®çæéç¶æ ãã·ã³ã®ç¶æ å€ååŸã«ãå®è¡æéãäžèŽããæååã«ç·åœ¢ã«äŸåããã¢ã«ãŽãªãºã ã䜿çšã§ããã¡ã«ããºã ã«ã€ããŠèª¬æããŸãã
ããã°ã©ãã³ã°æ¹æ³
æ£èŠè¡šçŸæ€çŽ¢ã¢ã«ãŽãªãºã
ã±ã³ã»ãã³ããœã³
Bell Telephone Laboratories, Inc.ããã¥ãŒãžã£ãŒãžãŒå·ãã¬ãŒãã«ããã¹ãå ã®ç¹å®ã®æååãæ€çŽ¢ããã¡ãœããã«ã€ããŠèª¬æããã³ã³ãã€ã©åœ¢åŒã§ã®ãã®ã¡ãœããã®å®è£ ã«ã€ããŠèª¬æããŸããã³ã³ãã€ã©ãŒã¯æ£èŠè¡šçŸããœãŒã¹ã»ã³ãŒããšããŠåãåããIBM 7094 ããã°ã©ã ããªããžã§ã¯ãã»ã³ãŒããšããŠçæããŸãããªããžã§ã¯ã ããã°ã©ã ã¯ãæ€çŽ¢ããã¹ãã®åœ¢åŒã§å ¥åãåãåããããã¹ãæååãæå®ãããæ£èŠè¡šçŸãšäžèŽãããã³ã«ã·ã°ãã«ãçºè¡ããŸãããã®èšäºã§ã¯ãäŸãåé¡ã解決çã瀺ããŸãã
ã¢ã«ãŽãªãºã
以åã®æ€çŽ¢ã¢ã«ãŽãªãºã ã§ã¯ãéšåçã«æåããæ€çŽ¢ã§çµæãåŸãããªãã£ãå Žåãããã¯ãã©ããã³ã°ãçºçããŠããŸãããã³ã³ãã€ã« ã¢ãŒãã§ã¯ãã¢ã«ãŽãªãºã ã¯ã·ã³ãã«ãåŠçããŸãããã³ã³ãã€ã«ãããã³ãŒãã«åœä»€ãæž¡ããŸããå®è¡ã¯éåžžã«é«éã§ããçŸåšã®ãªã¹ãã®å é ã«ããŒã¿ãæž¡ããåŸãæ£èŠè¡šçŸå ã®ãã¹ãŠã®é£ç¶æåãèªåçã«æ€çŽ¢ãããŸãã
ã³ã³ãã€ã«ããã³æ€çŽ¢ã¢ã«ãŽãªãºã ã¯ãã¿ã€ã ã·ã§ã¢ãªã³ã° ããã¹ã ãšãã£ã¿ãŒã«ã³ã³ããã¹ãæ€çŽ¢ãšããŠçµã¿èŸŒãŸããŠããŸãããã¡ããããã®ãããªæ€çŽ¢æé ãé©çšããã®ã¯ããã ãã§ã¯ãããŸãããããšãã°ããã®ã¢ã«ãŽãªãºã ã®å€åœ¢ã¯ãã¢ã»ã³ãã©ã®ããŒãã«å ã®ã·ã³ãã«æ€çŽ¢ãšããŠäœ¿çšãããŸãã
èªè ã¯æ£èŠè¡šçŸãš IBM 7094 ã³ã³ãã¥ãŒã¿ ããã°ã©ãã³ã°èšèªã«ç²ŸéããŠããããšãåæãšããŠããŸããã³ã³ãã€ã©
ã³ã³ãã€ã©ã¯ã䞊åå®è¡ããã 2 ã€ã®ã¹ããŒãžã§æ§æãããŸããæåã®æ®µéã¯æ§æãã£ã«ã¿ãªã³ã°ã§ãæ§æçã«æ£ããæ£èŠè¡šçŸã®ã¿ãééãããŸãããã®ã¹ãããã§ã¯ãæ£èŠè¡šçŸãšäžèŽãããããã«ãã»ãæŒç®åãæ¿å ¥ããŸãã XNUMX çªç®ã®ã¹ãããã§ã¯ãæ£èŠè¡šçŸãåŸçœ®åœ¢åŒã«å€æãããŸãã第 XNUMX 段éã§ã¯ããªããžã§ã¯ã ã³ãŒããäœæãããŸããæåã® XNUMX ã€ã®æ®µéã¯æãããªã®ã§ãããã§ã¯è©³ãã説æããŸããã
Thompson ã®èšäºã¯éæ±ºå®æ§æéç¶æ ãã·ã³ã«ã€ããŠã¯è§ŠããŠããŸããããç·åœ¢æéã¢ã«ãŽãªãºã ã詳ãã説æããŠãããIBM 60 çšã®ã¢ã»ã³ããªèšèªã³ãŒããçæãã ALGOL-7094 ããã°ã©ã ã玹ä»ããŠããŸããå®è£ ã¯é£ããã§ãããã¢ã€ãã¢ã¯éåžžã«ã·ã³ãã«ã§ãã
çŸåšã®æ€çŽ¢ãã¹ãããã¯ã1 ã€ã®å ¥åãš 2 ã€ã®åºåãæã€ â ã¢ã€ã³ã³ã§è¡šãããŸãã
å³ 1 ã¯ãæ£èŠè¡šçŸã®äŸã倿ãããšãã® XNUMX çªç®ã®ã³ã³ãã€ã«æé ã®æ©èœã瀺ããŠããŸãããã®äŸã®æåã® XNUMX æå㯠aãbãc ã§ââãããããã¹ã¿ã㯠ãšã³ã㪠S[i] ãš NNODE ãã£ãŒã«ããäœæããŸããæ¢åã®ã³ãŒãã« NNODE ãé©çšããŠãçµæã®æ£èŠè¡šçŸã 5 ã€ã®ã¹ã¿ã㯠ãšã³ããªã«çæããŸã (å³ XNUMX ãåç §)
æ£èŠè¡šçŸã¯æ¬¡ã®ããã«ãªããŸã .*.*=.*ãã³ããœã³ã®èšäºã®åçã®ããã«æ³åããŠã¿ãŠãã ããã

å³ã§ã¯ã 0 0 ããå§ãŸã 3 ã€ã®ç¶æ
ãšãç¶æ
1ã2ãããã³ 3 ããå§ãŸã XNUMX ã€ã®ãµã€ã¯ã«ããããŸãããããã® XNUMX ã€ã®ãµã€ã¯ã«ã¯ XNUMX ã€ã«å¯Ÿå¿ããŸãã .* æ£èŠè¡šçŸã§ããããã®ãã 3 ã€ã®æ¥åã XNUMX ã€ã®ã·ã³ãã«ã«å¯Ÿå¿ããŸããèšå·ä»ãã®æ¥å圢 = ãªãã©ã«æåãšäžèŽããŸã =ãç¶æ
4 ãæçµã§ããããã«å°éãããšãæ£èŠè¡šçŸãäžèŽããŸãã
ãã®ãããªç¶æ
å³ãæ£èŠè¡šçŸã®ãããã³ã°ã«ã©ã®ããã«äœ¿çšã§ãããã確èªããã«ã¯ .*.*=.*ãæååã®ãããã³ã°ãèŠãŠãããŸãã x=xãå³ã«ç€ºãããã«ãããã°ã©ã ã¯ç¶æ
0 ããéå§ããŸãã 1.

ãã®ã¢ã«ãŽãªãºã ãæ©èœããã«ã¯ãã¹ããŒã ãã·ã³ãåæã«è€æ°ã®ç¶æ ã«ããå¿ èŠããããŸããéæ±ºå®æ§ã®æéãã·ã³ã¯ãå¯èœãªãã¹ãŠã®é·ç§»ãåæã«å®è¡ããŸãã
å ¥åããŒã¿ãèªã¿åãåã«ãå³ã«ç€ºãããã«ãäž¡æ¹ã®æåã®ç¶æ (1 ãš 2) ã«ãªããŸãã 2.

å³ã§ã¯ã 2 ã¯ãæåã®ãã®ãèŠããšãã«äœãèµ·ãããã瀺ããŠããŸãã x в x=x. x ç¶æ
1 ããç¶æ
1 ã«æ»ã£ãŠãäžçªäžã®ç¹ã«ãããã³ã°ã§ããŸãããŸã㯠x ç¶æ
2 ããç¶æ
2 ã«æ»ãã以äžã®ç¹ã«ãããã³ã°ã§ããŸãã
æåã«äžèŽããåŸ x в x=x ãŸã ç¶æ
1 ãš 2 ã«ããŸãããªãã©ã«æåãå¿
èŠãªã®ã§ãç¶æ
3 ãŸã㯠4 ã«å°éããããšã¯ã§ããŸããã =.
次ã«ãã¢ã«ãŽãªãºã ã¯æ¬¡ã®ããšãèæ
®ããŸãã = в x=xããã®åã® x ãšåæ§ã«ãç¶æ
1 ããç¶æ
1 ãžããŸãã¯ç¶æ
2 ããç¶æ
2 ãžã®äžäœ XNUMX ã€ã®ã«ãŒãã®ãããããšç
§åã§ããŸãããã¢ã«ãŽãªãºã ã¯ãªãã©ã«ãšç
§åã§ããŸãã = ãããŠç¶æ
2 ããç¶æ
3 ã«ç§»è¡ããŸã (ããã«ç¶æ
4)ããããå³ã«ç€ºããŸãã 3.

ãã®åŸãã¢ã«ãŽãªãºã ã¯æåŸã®ã¢ã«ãŽãªãºã ã«é²ã¿ãŸãã x в x=xãç¶æ
1 ãš 2 ããã¯ãç¶æ
1 ãš 2 ã«æ»ãåãé·ç§»ãå¯èœã§ãã ç¶æ
3 ãã x å³åŽã®ç¹ã«äžèŽããç¶æ
3 ã«æ»ãããšãã§ããŸãã
ãã®æ®µéã§ã¯åãã£ã©ã¯ã¿ãŒã x=x æ€èšããç¶æ
4 ã«å°éããã®ã§ãæ£èŠè¡šçŸã¯ãã®æååãšäžèŽããŸããåæå㯠XNUMX ååŠçãããããããã®ã¢ã«ãŽãªãºã ã¯å
¥åæååã®é·ãã«å¯ŸããŠç·åœ¢ã§ãããããŠåŸæ»ãã¯ãããŸããã
æããã«ãç¶æ
4 ã«å°éããåŸ (ã¢ã«ãŽãªãºã ãäžèŽãããšã)ã x=) æ£èŠè¡šçŸå
šäœãäžèŽããã¢ã«ãŽãªãºã ã¯ããããŸã£ããèæ
®ããã«çµäºããå¯èœæ§ããããŸãã x.
ãã®ã¢ã«ãŽãªãºã ã¯ãå ¥åæååã®ãµã€ãºã«ç·åœ¢ã«äŸåããŸãã
åºæïŒ habr.com
