Բաց թողնել հիմնական բովանդակությունը

Ինչու rate limiting-ը կարևոր է (և ինչու արագ abuse-ը կարող է կոտրել լավ արտադրանքը)

9897 Դիտումներ

Շատ համակարգեր ձախողվում են ոչ թե որովհետև մեկ request-ը վտանգավոր է, այլ որովհետև չափազանց շատ request-եր են գալիս չափազանց արագ։

Հենց դրա համար rate limiting-ը կարևոր է։ Դա ամենապարզ և ամենապրակտիկ մեթոդներից մեկն է՝ կայքը, API-ն կամ mobile backend-ը abuse-ից, overload-ից և ավտոմատ հարձակումներից պաշտպանելու համար։

Առանց rate limit-ների նույնիսկ լավ կառուցված արտադրանքը կարող է կոտրվել արագության, կրկնության կամ մասշտաբի պատճառով։

Պարզ իրական օրինակ

Պատկերացրեք՝ ձեր app-ը ունի այսպիսի ֆիչերներ՝

  • login
  • password reset
  • OTP verification
  • search
  • checkout

Այս ֆիչերներից յուրաքանչյուրը կարող է ճիշտ աշխատել մեկ նորմալ օգտատիրոջ համար։ Բայց ի՞նչ կլինի, եթե ինչ-որ մեկը ուղարկի՝

  • 1,000 login փորձ մեկ րոպեում
  • 10,000 OTP request նույն հեռախոսահամարին
  • սկրիպտներով search request-երի մեծ burst-եր
  • շարունակական checkout փորձեր՝ քարտեր կամ promo code-եր ստուգելու համար

Այստեղ խնդիրը արդեն մեկ request-ի correctness-ը չէ։ Խնդիրը դառնում է չվերահսկվող ծավալը։

Ինչ է իրականում անում rate limiting-ը

Rate limiting-ը վերահսկում է՝ որքան հաճախ կարող է user-ը, IP-ն, device-ը, token-ը կամ client-ը կատարել որևէ գործողություն որոշ ժամանակահատվածում։

Օրինակ՝

  • 5 login attempt՝ 10 րոպեում
  • 3 OTP send՝ ժամում
  • 100 API call՝ րոպեում
  • 10 password reset request՝ օրում

Սա abuse-ը անհնար չի դարձնում։ Բայց այն դարձնում է abuse-ը ավելի դանդաղ, ավելի աղմկոտ, ավելի թանկ և ավելի հեշտ նկատելի։

Ինչու է rate limiting-ը այսքան կարևոր

  • Այն դանդաղեցնում է brute-force հարձակումները։ Հարձակվողները չեն կարող գաղտնաբառեր կամ կոդեր այնքան արագ գուշակել։
  • Այն նվազեցնում է spam-ը և abuse-ը։ Form-երը, OTP flow-երը և public endpoint-ները ավելի դժվար է շահագործել մասշտաբով։
  • Այն պաշտպանում է infrastructure-ը։ Կրկնվող request-երը կարող են վատնել CPU, memory, database capacity և third-party API quota-ները։
  • Այն պաշտպանում է user experience-ը։ Իրական օգտատերերն են տուժում, երբ համակարգը ծանրաբեռնված է bot-երով կամ script-երով։

Այսինքն՝ rate limiting-ը միայն անվտանգության մասին չէ։ Այն նաև այն մասին է, որ արտադրանքը սթրեսի տակ էլ մնա օգտագործելի։

Որտեղ է rate limiting-ը հատկապես կարևոր

  • login և signup
  • forgot password և OTP endpoint-ներ
  • search և filtering API-ներ
  • comment, message և contact form-եր
  • payment, coupon և promo code endpoint-ներ
  • file upload կամ թանկ report generation գործողություններ

Այս endpoint-ները գրավիչ են, որովհետև հաճախ public են, թանկ են կամ հեշտ են ավտոմատացվում։

Ինչ է լինում, երբ թիմերը դա անտեսում են

  • հարձակվողները կարող են brute-force անել գաղտնաբառեր կամ կոդեր
  • SMS և email ծախսերը կարող են կտրուկ աճել
  • bot-երը կարող են scrape կամ hammer անել API-ները
  • օգտատերերը կարող են տուժել spam-ից կամ repeated abuse-ից
  • համակարգերը կարող են դանդաղել կամ ձախողվել ծանրաբեռնվածության տակ

Հաճախ product-ը testing-ում դեռ աշխատում է, և բաց թողնված պաշտպանությունը ակնհայտ չի լինում։ Թուլությունը երևում է միայն այն ժամանակ, երբ ինչ-որ մեկը որոշում է ուժեղ ճնշել այն։

Լավ rate limiting-ը մեկ թվից ավելին է

Ուժեղ համակարգերը սովորաբար միավորում են մի քանի վերահսկումներ՝

  • per IP limit-ներ
  • per account limit-ներ
  • per phone կամ email limit-ներ
  • per device կամ token limit-ներ
  • cooldown-ներ repeated sensitive action-ների համար

Սա կարևոր է, որովհետև հարձակվողները հարմարվում են։ Եթե դուք limit եք դնում միայն IP-ով, նրանք կարող են փոխել IP-ները։ Եթե միայն account-ով, կարող են ստեղծել շատ հաշիվներ։ Լավ պաշտպանությունը մտածում է շերտերով։

Թաքնված դասը․ անվտանգությունը երբեմն friction-ի մասին է

Շատ product թիմեր ուզում են user journey-ից հանել ամեն հնարավոր friction-ը։ Դա լավ ցանկություն է՝ մինչև նույն friction-ի բացակայությունը չօգնի հարձակվողներին ավելի արագ շարժվել, քան իրական օգտատերը երբևէ կշարժվեր։

Լավ security design-ը հասկանում է, որ որոշ friction առողջ է։ Նպատակը ազնիվ օգտատերերի կյանքը դժվարացնելը չէ։ Նպատակը ավտոմատ abuse-ը թանկ և դանդաղ դարձնելն է։

Տարածված վտանգավոր միտքը

Տարածված միտքն է՝ «Մեր ֆիչերը պարզ է, ուրեմն ոչ ոք այն չի հարձակվի»։

Դա վտանգավոր մտածելակերպ է։ Հարձակվողները հաճախ հենց պարզ ֆիչերներն են փնտրում, որովհետև պարզ ֆիչերները հաճախ քիչ են պաշտպանված։ Այն ամենը, ինչ public է, repeatable է և automatable, կարող է դառնալ թիրախ։

Եզրակացություն

Rate limiting-ը կարևոր է, որովհետև համակարգերը հաճախ հարձակման են ենթարկվում արագությամբ, ոչ միայն խորամանկությամբ։ Լավ կայքը կամ mobile app-ը չպետք է միայն հարցնի՝ «Այս request-ը վավե՞ր է»։ Այն պետք է նաև հարցնի՝ «Քանի՞ անգամ այս գործողությունը պետք է թույլատրվի կարճ ժամանակում»։ Հենց այս հարցն է հաճախ որոշում՝ արտադրանքը resilient կլինի, թե հեշտ abuse-ի ենթակա։


Հետևեք մեզ

Մնացեք կապի մեջ և ստացեք վերջին թարմացումները

Հոդվածներ, որ արժե կարդալ

Տրամաբանական խնդիրներ — ընտրեք վերնագրով

Մեր նախագծերն ու ապրանքանիշերը