Тақрибан 9 сол пеш Cloudflare як ширкати хурд буд ва ман барои он кор намекардам, ман танҳо муштарӣ будам. Як моҳ пас аз оғози Cloudflare, ман огоҳинома гирифтам, ки вебсайти ман jgc.orgЧунин ба назар мерасад, ки DNS кор намекунад. Cloudflare тағирот ворид кард Буферҳои протокол, ва DNS шикаста буд.
Ман дарҳол ба Матто Принс бо унвони "DNS-и ман куҷост?" навиштам ва ӯ ҷавоби тӯлонии пур аз тафсилоти техникӣ фиристод (тамоми мукотибаро дар ин ҷо хонед), ки ман ба он ҷавоб додам:
Гузориши олӣ, ташаккур. Агар мушкиле пайдо шавад, ҳатман занг мезанам. Эҳтимол пас аз ҷамъоварӣ кардани тамоми маълумоти техникӣ дар ин бора навиштан лозим аст. Ман фикр мекунам, ки одамон аз як ҳикояи ошкоро ва ростқавл баҳравар хоҳанд шуд. Хусусан, агар шумо ба он графикҳо замима кунед, то нишон диҳед, ки трафик пас аз оғози кор чӣ гуна афзоиш ёфтааст.
Ман дар сайти худ мониторинги хуб дорам ва дар бораи ҳар як нокомӣ СМС мегирам. Мониторинг нишон медиҳад, ки нокомӣ аз соати 13:03:07 то 14:04:12 рух додааст. Санҷишҳо ҳар панҷ дақиқа гузаронида мешаванд.
Истифодаи CPU дар як нуқтаи ҳузур дар вақти ҳодиса
Дар натиҷа, мизоҷони мо (ва мизоҷони мо) бо саҳифаи хатогии 502 дар доменҳои Cloudflare анҷом ёфтанд. 502 хатогиҳо аз ҷониби веб-серверҳои пешрафтаи Cloudflare тавлид карда шуданд, ки то ҳол ядроҳои ройгон доштанд, аммо натавонистанд бо равандҳои коркарди трафики HTTP/HTTPS муошират кунанд.
Мо медонем, ки ин ба мизоҷони мо чӣ қадар нороҳатӣ овардааст. Мо сахт шарм дорем. Ва ин нокомӣ моро аз бархӯрди муассир бо ҳодиса бозмедорад.
Агар шумо яке аз ин муштариён мебудед, шумо эҳтимол тарс, хашмгин ва хафа шудаед. Гузашта аз ин, мо надорем вайроншавии глобалӣ. Истеъмоли зиёди CPU аз як қоидаи WAF бо ифодаи муқаррарии нодуруст ифода ёфтааст, ки боиси бозгашти аз ҳад зиёд гардид. Ин аст ифодаи гунаҳкор: (?:(?:"|'|]|}||d|(?:nan|infinity|true|false|null|undefined|symbol|math)|`|-|+)+[)]*;?((?:s|-|~|!|{}||||+)*.*(?:.*=.*)))
Чӣ гуна мо барои WAF куштори ҷаҳонӣ кардем, ин қиссаи дигар аст. Ин на он қадар оддӣ аст. Мо маҳсулоти худамонро истифода мебарем ва аз хидмати худ Дастрасӣ кор накард, мо натавонистем аутентификатсия кунем ва ба панели идоракунии дохилӣ ворид шавем (вақте ки ҳама чиз ислоҳ шуд, мо фаҳмидем, ки баъзе аъзоёни даста аз сабаби хусусияти амниятӣ, ки маълумоти эътимодномаро ғайрифаъол мекунад, дастрасӣ аз даст додаанд, агар панели идоракунии дохилӣ барои муддати дароз).
Ва мо натавонистем ба хидматҳои дохилии худ, ба монанди Jira ё системаи сохтмон дастрасӣ пайдо кунем. Ба мо механизми ҳалли мушкилот лозим буд, ки мо онро кам истифода мебурдем (инро низ бояд кор карда баромад). Ниҳоят, як муҳандис тавонист WAF-ро соати 14:07 хомӯш кунад ва соати 14:09 сатҳи трафик ва CPU дар ҳама ҷо ба ҳолати муқаррарӣ баргашт. Механизмҳои боқимондаи муҳофизати Cloudflare ба таври муқаррарӣ кор мекарданд.
Пас аз он мо ба барқарорсозии WAF шурӯъ кардем. Вазъият ғайримуқаррарӣ буд, аз ин рӯ мо дар як шаҳр санҷишҳои манфӣ (аз худ мепурсидем, ки оё тағирот воқеан мушкил аст) ва санҷишҳои мусбӣ (боварӣ ҳосил кунед, ки бозгашт кор мекард) дар як шаҳр бо истифода аз трафики алоҳида ва интиқоли муштариёни пулакӣ аз он ҷо гузаронида шуд.
Дар соати 14:52 мо итминон ҳосил кардем, ки сабабашро фаҳмидем ва ислоҳ кардем ва боз WAF-ро фаъол кардем.
Ва он гоҳ муҳаррики ифодаи муқаррарӣ ба ибтидо бармегардад. Вай ба гурухи якум мегузарад .* ва мукоиса мекунад с x= (ба ҷои x=x), баъд гурухи дуюмро кабул мекунад .*. Гурухи дуюм .* бо дуюм мукоиса карда мешавад x, ва мо боз ягон аломат надорем. Ва вакте ки двигатель боз мерасад = в .*.*=.*, ҳеҷ чиз кор намекунад. Ва боз ба ақиб бармегардад.
Ин дафъа гурух .* то ҳол мувофиқат мекунад x=, балки гурухи дуюм .* дигар на x, ва аломатҳои сифр. Мотор кӯшиш мекунад, ки аломати аслӣ пайдо кунад = дар намуна .*.*=.*, вале намебарояд (охир, гурухи якум аллакай онро ишгол кардааст .*). Ва ӯ боз ақибнишинӣ мекунад.
Ин аллакай кори зиёде аст, аммо ба ҷои он чӣ мешавад x=x дорем x=xx? Ин 33 қадам аст. Ва агар x=xxx? 45. Муносибат хаттӣ нест. График муқоисаро аз x=x ба x=xxxxxxxxxxxxxxxxxxxx (20 x после =). Агар мо 20 x пас аз =, муҳаррик мувофиқатро дар 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.
Ягона коре, ки метавон анҷом дод (ба ҷуз аз нав навиштани намуна барои мушаххасоти бештар) даст кашидан аз муҳаррики ифодаи муқаррарӣ бо механизми бозгашти он мебошад. Ин аст он чизе ки мо дар тӯли чанд ҳафтаи оянда мекунем.
Мақолаи Томпсон дар бораи мошинҳои ҳолати ниҳоии ғайримуқаррарӣ сухан намегӯяд, аммо он алгоритми вақти хатиро хуб шарҳ медиҳад ва барномаи ALGOL-60-ро пешниҳод мекунад, ки рамзи забони ассемблерро барои IBM 7094 тавлид мекунад. Иҷроиш мушкил аст, аммо идея хеле содда аст.
роҳи ҷустуҷӯи ҷорӣ. Он бо аломати ⊕ бо як вуруд ва ду баромад нишон дода мешавад.
Дар расми 1 вазифаҳои марҳилаи сеюми тартибдиҳӣ ҳангоми табдил додани мисоли ифодаи муқаррарӣ нишон дода шудаанд. Се аломати аввал дар мисол a, b, c мебошанд ва ҳар кадом як вуруди стек S[i] ва майдони NNODE эҷод мекунанд.
Пеш аз он ки вақти хондани маълумоти воридотӣ дошта бошад, он ба ҳарду ҳолати аввал мегузарад (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 мувофиқат карда шавад, аммо алгоритм метавонад ба асли аслӣ мувофиқат кунад. = ва аз ҳолати 2 ба ҳолати 3 (ва фавран 4) гузаред. Ин дар расм нишон дода шудааст. 3.
Пас аз он алгоритм ба охирин мегузарад x в x=x. Аз иёлатҳои 1 ва 2 ҳамон гузаришҳо ба ҳолати 1 ва 2 имконпазиранд. Аз ҳолати 3 x метавонад ба нуқтаи тарафи рост мувофиқат кунад ва ба ҳолати 3 баргардад.
Дар ин марҳила, ҳар як аломат x=x баррасӣ ва азбаски мо ба ҳолати 4 расидем, ифодаи муқаррарӣ ба ин сатр мувофиқат мекунад. Ҳар як аломат як маротиба коркард карда мешавад, аз ин рӯ ин алгоритм дар дарозии сатри вуруд хаттӣ аст. Ва ҳеҷ ақибнишинӣ.