ã»ãŒ9幎åãCloudflareã¯å°ããªäŒç€Ÿã§ãç§ã¯ããã§åããŠããããã§ã¯ãªããåãªã顧客ã§ããã Cloudflare ãç«ã¡äžããŠãã XNUMX ãæåŸãç§ã®ãŠã§ããµã€ãã«æ¬¡ã®éç¥ãå±ããŸããã
ç§ã¯ããã« 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 ã®ãããŒãžã ã«ãŒã«ã«æ°ããã«ãŒã«ãå±éããŸããã
æ®å¿µãªãããå é±æšææ¥ã®æŽæ°ã«ã¯ãããã¯ãã©ããã³ã°ã§ HTTP/HTTPS CPU ãªãœãŒã¹ãå€éã«æµªè²»ããæ£èŠè¡šçŸãå«ãŸããŠããŸããããã®çµæãã³ã¢ã®ãããã·ãCDNãWAF æ©èœã圱é¿ãåããŸãããã°ã©ãã¯ãHTTP/HTTPS ãã©ãã£ãã¯ãåŠçããããã®ããã»ããµ ãªãœãŒã¹ããããã¯ãŒã¯å ã®ãµãŒããŒã§ã»ãŒ 100% ã«éããŠããããšã瀺ããŠããŸãã
ã€ã³ã·ãã³ãäžã®ããæç¹ã§ã® CPU 䜿çšç
ãã®çµæãåœç€Ÿã®ã¯ã©ã€ã¢ã³ãïŒããã³åœç€Ÿã®ã¯ã©ã€ã¢ã³ãã®ã¯ã©ã€ã¢ã³ãïŒã¯ãCloudflareãã¡ã€ã³ã§502ãšã©ãŒããŒãžã衚瀺ããããšã«ãªããŸããã 502 ãšã©ãŒã¯ã空ãã³ã¢ã¯ãŸã ãããã®ã®ãHTTP/HTTPS ãã©ãã£ãã¯ãåŠçããããã»ã¹ãšéä¿¡ã§ããªãã£ã Cloudflare ããã³ããšã³ã Web ãµãŒããŒã«ãã£ãŠçæãããŸããã
ãã®ä»¶ã§ã客æ§ã«ã©ãã»ã©ã®ãè¿·æãããããããã¯æ¿ç¥ããŠãããŸããç§ãã¡ã¯ãšãŠãæ¥ããããã§ãããããŠããã®å€±æã«ãããã€ã³ã·ãã³ãã«å¹æçã«å¯ŸåŠããããšãã§ããªããªããŸããã
ããªãããããã®é¡§å®¢ã®äžäººã ã£ãããããããæãããæããåæºããŠããã§ããããããã«ãç§ãã¡ã¯ (?:(?:"|'|]|}||d|(?:nan|infinity|true|false|null|undefined|symbol|math)|`|-|+)+[)]*;?((?:s|-|~|!|{}||||+)*.*(?:.*=.*)))
ããã¯ããèªäœèå³æ·±ããã®ã§ãã (ããã«ã€ããŠã¯åŸã»ã©è©³ãã説æããŸã)ãCloudflare ãµãŒãã¹ã 27 åéããŠã³ããã®ã¯æ£èŠè¡šçŸãééã£ãŠããããã ãã§ã¯ãããŸãããé害ã«è³ã£ãäžé£ã®åºæ¥äºã説æããã®ã«æéããããã察å¿ãé ããŸããããã®æçš¿ã®æåŸã§ã¯ãæ£èŠè¡šçŸã§ã®ããã¯ãã©ããã³ã°ã«ã€ããŠèª¬æãããã®æäœæ¹æ³ã«ã€ããŠèª¬æããŸãã
ã©ããã
é çªã«å§ããŸããããããã§ã®æéã¯ãã¹ãŠ UTC ã§ãã
ååŸ 13 æ 42 åã«ããã¡ã€ã¢ãŠã©ãŒã« ããŒã ã®ãšã³ãžãã¢ãæ€åºã«ãŒã«ã«å°ããªå€æŽãå ããŸããã
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 ã®è匱æ§ä¿è·ãå°å
¥ããããšã§ã (
æšææ¥ã«åé¡ãåŒãèµ·ãããã«ãŒã«ã¯ãã¯ãã¹ãµã€ãã¹ã¯ãªããã£ã³ã°ïŒXSSïŒããä¿è·ããããšãæ³å®ããŠããããã®ãããªæ»æãè¿å¹Žéåžžã«é »ç¹ã«ãªã£ãŠããŸãã
åºæïŒ
WAF ã®ãããŒãžã ã«ãŒã«ãå€æŽããæšæºæé ã¯ãã°ããŒãã«å±éã®åã«ç¶ç¶çã€ã³ãã°ã¬ãŒã·ã§ã³ (CI) ãã¹ããå®æœããããšã§ããå é±ã®æšææ¥ã«ãããå®è¡ããã«ãŒã«ãå±éããŸãããååŸ 13 æ 31 åã«ããšã³ãžãã¢ãå€æŽãå ããŠæ¿èªããããã« ãªã¯ãšã¹ããéä¿¡ããŸããã
13æ37åãTeamCityã¯ã«ãŒã«ãåéãããã¹ããå®è¡ãããŽãŒãµã€ã³ãåºããŸããã WAF ãã¹ã ã¹ã€ãŒãã¯ãWAF ã®ã³ã¢æ©èœããã¹ãããåã ã®æ©èœã«å¯Ÿããå€æ°ã®åäœãã¹ãã§æ§æãããŸããåäœãã¹ãã®åŸãèšå€§ãªæ°ã® HTTP ãªã¯ãšã¹ãã䜿çšã㊠WAF ã®ã«ãŒã«ããã¹ãããŸããã HTTP ãªã¯ãšã¹ãã¯ãã©ã®ãªã¯ãšã¹ãã WAF ã«ãã£ãŠãããã¯ãããã¹ãã (æ»æãé»æ¢ãããã)ãã©ã®ãªã¯ãšã¹ããééã§ãããã確èªããŸã (ãã¹ãŠããããã¯ããã誀æ€ç¥ãé¿ãããã)ãããããéå°ãª CPU 䜿çšçã«ã€ããŠã¯ãã¹ãããŸããã§ããããŸãã以åã® WAF ãã«ãã®ãã°ã調ã¹ããšãã«ãŒã« ãã¹ãã®å®è¡æéã¯å¢å ããŠããããååãªãªãœãŒã¹ããªãããšãçãã®ã¯å°é£ã§ããããšãããããŸããã
ãã¹ãã¯åæ ŒããTeamCity ã¯ååŸ 13 æ 42 åã«å€æŽã®èªåãããã€ãéå§ããŸããã
ã¯ã€ãã¯ã·ã«ããŒ
WAF ã«ãŒã«ã¯è åšã®å³æ修埩ã«éç¹ã眮ããŠãããããå€æŽãæ°ç§ã§ã°ããŒãã«ã«äŒæãã Quicksilver ã®åæ£ããŒããªã¥ãŒ ã¹ãã¢ã䜿çšã㊠WAF ã«ãŒã«ãå±éããŸããåœç€Ÿã®ãã¹ãŠã®ã¯ã©ã€ã¢ã³ãã¯ãããã·ã¥ããŒããŸã㯠API çµç±ã§æ§æãå€æŽãããšãã«ãã®ãã¯ãããžãŒã䜿çšããŠããããã®ãããã§åœç€Ÿã¯å€æŽã«è¶ é«éã§å¯Ÿå¿ã§ããŸãã
ã¯ã€ãã¯ã·ã«ããŒã«ã€ããŠã¯ããŸã話ããŠããŸããã§ããã以åã«äœ¿çšããŠãã
ããã·ã¥ããŒãäžã®ãã¿ã³ãã¯ãªãã¯ããã API ãåŒã³åºããŠãããäžçäžã§æ§æãå€æŽãããŸã§ã«ãããæéã¯ãããæ°ç§ã§ããã客æ§ã¯ãã®ã»ããã¢ããã®éããæ°ã«å ¥ããŸããããããŠãWorkers ã¯ãã»ãŒç¬æã«ã°ããŒãã«ãªãœãããŠã§ã¢ãå°å ¥ã§ããããã«ããŸããå¹³åããŠãQuicksilver 㯠350 ç§ãããçŽ XNUMX ã®å€æŽãäŒæããŸãã
ãããŠã¯ã€ãã¯ã·ã«ããŒã¯éåžžã«éãã§ããå¹³åããŠãäžçäžã®ãã¹ãŠã®ã³ã³ãã¥ãŒã¿ãŒã«å€æŽãäŒæããããã«ã99 ããŒã»ã³ã¿ã€ã« 2,29 ç§ãéæããŸãããéåžžãã¹ããŒãã¯è¯ãããšã§ããçµå±ã®ãšãããæ©èœãæå¹ã«ããããã£ãã·ã¥ãã¯ãªã¢ããããããšãããã¯ã»ãŒç¬æã«ã©ãã§ãè¡ãããŸãã Cloudflare Workersãä»ããã³ãŒãã®éä¿¡ã¯åãé床ã§è¡ãããŸãã Cloudflareã¯ã顧客ã«é©åãªã¿ã€ãã³ã°ã§ã®è¿ éãªã¢ããããŒããçŽæããŸãã
ãããä»åã®å Žåãã¹ããŒããç§ãã¡ã«ã²ã©ãåè«ãèšããã«ãŒã«ã¯æ°ç§ã®ãã¡ã«ã©ãã§ãå€æŽãããŸããã WAF ã³ãŒãã Lua ã䜿çšããŠããããšã«æ°ã¥ãããããããŸããã Cloudflareã¯æ¬çªç°å¢ãšè©³çŽ°ã§Luaãåºç¯å²ã«äœ¿çšããŠããŸã
ã«ãŒã«ããããã€ãããåã¯ããã¹ãŠãã¹ã ãŒãºã«é²ã¿ãŸããããã« ãªã¯ãšã¹ããäœæãããŠæ¿èªããã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æ¥ïŒ
- æ£èŠè¡šçŸãšã³ãžã³ãžã®åãæ¿ã
re2 ãŸãã¯ãã³ - ã©ã¡ããå®è¡æä¿èšŒãæäŸããŸãã ïŒäºå®ïŒ31æXNUMXæ¥ïŒ - Cloudflareã®ä»ã®ãœãããŠã§ã¢ãšåæ§ã«ãã«ãŒã«ã段éçã«å±éããããã«SOPãæžãçŽããŠããŸãããåæã«ãæ»æããã§ã«å§ãŸã£ãŠããå Žåã«ç·æ¥ã«ã°ããŒãã«ã«å±éããæ©èœãåããŠããŸãã
- Cloudflare ãªãŒãžã§ã³ãã Cloudflare ããã·ã¥ããŒããš API ãç·æ¥ã«åé€ããæ©èœãéçºäžã§ãã
- ããŒãžæŽæ°ã®èªåå
ã¯ã©ãŠããã¬ã¢ã®ã¹ããŒã¿ã¹ .
é·æçã«ã¯ãç§ãæ°å¹Žåã«äœæãã Lua 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