உங்கள் Rate Limiter ஒரு பாதுகாப்பு நடவடிக்கை (Security Control) அல்ல
ஒரு பாட் (bot) சில நிமிடங்களிலேயே எனது API-லிருந்து ஒரு பாஸ்போர்ட்டிற்கான அனைத்துத் தரவுகளையும் எடுத்துச் சென்றது.
எனது rate limiter அதைத் தடுக்கவில்லை.
மாதத்திற்கு 3,000 அழைப்புகள் (calls) என்ற வரம்பு இருந்தது. ஒரு முழு பாஸ்போர்ட் ஸ்கேன் செய்ய 195 அழைப்புகள் மட்டுமே தேவைப்படும். அந்த பாட் எனது வரம்பிற்குள்ளேயே இருந்து அனைத்தையும் திருடிச் சென்றது.
Rate limiting உங்கள் உள்கட்டமைப்புச் செலவுகளைப் (infrastructure costs) பாதுகாக்கிறது. அது உங்கள் தரவைப் (data) பாதுகாப்பதில்லை.
இந்த இரண்டு கருத்துக்களையும் நீங்கள் ஒன்றாகக் கருதினால், உங்கள் தரவு கசிந்துவிடும்.
Rate limiters ஒரு கேள்வியைக் கேட்கின்றன: இந்த கிளையன்ட் (client) இப்போது எனக்கு அதிக செலவை ஏற்படுத்துகிறாரா?
Scrapers வேண்டுமென்றே அந்த வரம்பிற்குள்ளேயே செயல்படுகின்றன. எனது scraper நிமிடத்திற்கு 25 கோரிக்கைகளில் (requests) இயங்கியது. அது மிகக் குறைந்த சுமை (load) தான். எனது முழுத் தரவுத்தொகுப்பையும் (dataset) நகலெடுக்க அதற்கு 40,000 அழைப்புகள் மட்டுமே தேவைப்படும். ஒரு ஹேக்கர் பல இலவசக் கணக்குகளைப் பயன்படுத்தினால், எந்த அளவு வரம்பும் (volume cap) அவர்களைப் பிடிக்காது.
அளவை (volume) மட்டும் பார்ப்பதை நிறுத்துங்கள். அடையாளம் (identity), பரப்பளவு (coverage) மற்றும் முறை (pattern) ஆகியவற்றைக் கவனியுங்கள்.
நான் இரண்டு தவறுகளைச் செய்தேன். முதலாவதாக, நான் மூல IP-யைப் (source IP) பதிவு செய்யவில்லை. ஒரு ஹேக்கர் மீண்டும் இலவசமாகப் பதிவு செய்து கொள்ளலாம்.
முதலில் உங்கள் லாக்ஸ்களை (logs) சரிசெய்யுங்கள். உங்கள் தரவுத்தளத்தில் (database) IP மற்றும் நாடு (country) ஆகிய நெடுவரிசைகளைச் (columns) சேர்க்கவும். ரிமோட் முகவரிக்கு (remote address) பதிலாக Cloudflare-லிருந்து வரும் உண்மையான கிளையன்ட் IP-யைப் பயன்படுத்தவும். இது நெட்வொர்க் மட்டத்தில் (network layer) தாக்குபவர்களைத் தடுக்க உதவும்.
இரண்டாவதாக, உங்கள் வரம்புகளை மாற்றவும்.
மாதத்திற்கு எத்தனை கோரிக்கைகள் என்பதை மட்டும் வரையறுக்க வேண்டாம். ஒரு பாஸ்போர்ட் ஒரு நாளைக்கு எத்தனை வெவ்வேறு இடங்களைச் (destinations) சரிபார்க்க முடியும் என்பதைக் கட்டுப்படுத்துங்கள். ஒரு உண்மையான பயனர் சில இடங்களை மட்டுமே சரிபார்ப்பார். ஆனால் ஒரு scraper அனைத்தையும் சரிபார்க்க முயற்சிக்கும்.
ஒரு தரவுத் திருட்டு (data sweep) ஒரு குறிப்பிட்ட அடையாளத்தைக் கொண்டிருக்கும்:
- அது அடர்த்தியானது (dense).
- அது வரிசைக்கிரமமானது (sequential).
- அது ஒரு மூலத்திற்கான அனைத்தையும் உள்ளடக்கியது.
செயல்பாட்டின் ஸ்லைடிங் விண்டோவை (sliding window) கவனிப்பதன் மூலம் இந்த முறையைக் கண்டறியலாம். ஒரு பாஸ்போர்ட் குறுகிய காலத்தில் அதிகப்படியான இடங்களைச் சென்றடைந்தால், அதை அடையாளம் கண்டுத் தடுக்கவும் (flag it). அந்த கீயைக் (key) கட்டுப்படுத்தவும் அல்லது உடனடியாகத் தடுக்கவும்.
இப்போது நீங்கள் எண்களை மட்டும் எண்ணாமல், நடத்தையை (behavior) வைத்துச் செயல்படுகிறீர்கள்.
உங்கள் உத்தியை இரண்டு பணிகளாகப் பிரிக்கவும்:
- Rate Limiter: உங்கள் பணத்தைப் பாதுகாக்கவும். ஒவ்வொரு கீய்க்கும் (per-key) அளவு வரம்புகளைப் பயன்படுத்தவும்.
- Extraction Defense: உங்கள் தரவைப் பாதுகாக்கவும். அடையாளம், பரப்பளவு மற்றும் கால இடைவெளியைப் (cadence) பயன்படுத்தவும்.
உங்களிடம் rate limiter மட்டுமே இருந்தால், உங்களிடம் ஒரு கட்டணக் கட்டுப்பாட்டு முறை (billing guardrail) மட்டுமே உள்ளது. உங்களிடம் பாதுகாப்பு இல்லை.
மூலம்: https://dev.to/mathis_higuinen_6db9b244c/your-rate-limiter-is-not-a-security-control-4b3f
