Do 2025. godine, digitalni pejzaž se promenio: CAPTCHA više nije pouzdan čuvar kakav je nekada bio. Dok botovi vođeni veštačkom inteligencijom rešavaju CAPTCHA zagonetke sa skoro savršenom tačnošću, pravi korisnici ostaju frustrirani i često napuštaju sajtove kada se suoče sa izazovima. Nedavne studije pokazuju da botovi sada prolaze kroz CAPTCHA sa slikama i tekstom sa uspehom od 96–100%—daleko nadmašujući stvarne ljudske stope uspeha i smanjujući konverzije formi za čak 20%. Ali problem ide mnogo dublje od bilo koje zastarele zagonetke.
Danas, automatizovani saobraćaj dominira internetom. To sam lično shvatio. U 2024. godini, procenjeno je da je skoro polovina svih online aktivnosti generisana od strane botova, pri čemu je do 37% klasifikovano kao potpuno zlonamerno. Čak i sajtovi sa aktivnim merama ublažavanja i dalje prijavljuju 10–20% stalne aktivnosti botova. Realnost je surova: tradicionalna rešenja kao što su CAPTCHA i crne liste IP adresa postale su gotovo nemoćne pred koordinisanim, brzo evoluirajućim botnet mrežama koje mogu imitirati prave korisnike, menjati IP adrese i čak koristiti mobilne uređaje za napade velikih razmera.
Za vlasnike sajtova i online biznise, uticaj je razoran. Poplave botova mogu uništiti serverske resurse, usporiti učitavanje stranica do puzanja, i uništiti korisničko iskustvo. Ali učinci se šire dalje—Google ranking opada kako performanse stranica padaju, prihod od oglasa nestaje kako kvalitet saobraćaja opada, a odnosi sa reklamnim partnerima se kvare kada lažni posetioci preplave njihove analitike.
Ovu krizu sam lično doživeo. Sve je počelo optužbom agencije za oglašavanje: tvrdili su da je 90% saobraćaja na mom sajtu lažno. Njihov kod za praćenje, ugrađen za isporuku oglasa, otkrio je količine botova koje su preplavile ne samo njihove filtere već i moj server. Govorimo o preko milion poseta botova dnevno—saobraćaju nevidljivom za Google Analytics, ali katastrofalnom iza kulisa. Ono što sam u početku verovao da su pravi korisnici, u stvarnosti su bili deo neumornog talasa automatizovanih udaraca, poplavljujući moju infrastrukturu i preteći održivosti celog mog projekta.
Ovo nije samo priča o lošim akterima koji iskorišćavaju slabosti—ovo je priča o tome kako je sama arhitektura modernog weba pod opsadom. Optimizacije koda i nadogradnje servera nisu bile dovoljne. Izazov je postao trka u naoružanju, a moj sajt se našao u unakrsnoj vatri. Evo kako se poplava botova odvijala, skoro uništavajući sve što sam izgradio—a korake koje sam preduzeo da se borim nazad.
Moja priča o bot saobraćaju: sa 3 miliona poseta na pola miliona
Sve je počelo kada me je reklamna agencija optužila da imam 90% lažnog saobraćaja, već sam to rekao, ali: postavili su kod za praćenje na mojoj stranici da bi isporučivali oglase, a količina botova je bila problem i za njih—preplavila je njihove filtere i povećala opterećenje servera. Pričamo o preko milion bot poseta dnevno.
U početku sam bio ogorčen. U Google Analytics-u sam video 100.000 čistih dnevnih poseta. Mislio sam da su pravi korisnici. Ali njihova zabrinutost je bila oko saobraćaja van Analytics-a. Taj nevidljivi sloj pogodaka je izazivao haos na opterećenju servera. Tada je moj projekat radio na Laravel 5.3 na deljenom hostingu i verovao sam da je usko grlo performansi stari kod. Sve sam prepravio u Laravel 10 sa izvanrednom optimizacijom, uključujući dnevnu analizu miliona zapisa u bazi podataka.
I dalje je zaostajalo. Moj deljeni hosting to nije mogao da podnese. Učitavanje stranica je bilo sporo, a pravi saobraćaj je opadao—iz meseca u mesec gubio sam oko 150.000 poseta. Sa 3 miliona mesečnih poseta, na kraju sam izgubio više od polovine.
Nadogradio sam se na snažan VPS sa 16 CPU jezgara i 32GB RAM-a, očekujući da će to rešiti sve. Ali čak i sa poboljšanom infrastrukturom i prepravljenim Laravel 10 backendom, problem je ostao. Zapravo, stvari su se pogoršale—botovi su postali agresivniji, povećavajući volumen i učestalost napada. Bilo je jasno da nijedan nivo optimizacije koda ili skaliranja hardvera ne može rešiti problem koji je suštinski bio u nekontrolisanom, zlonamernom bot saobraćaju.
Ali to nije bilo sve. Dubljim istraživanjem shvatio sam da je razmera još veća: preko 2 miliona pretraga sajta dnevno, odvojeno od oko 1.5 miliona dnevnih bot poseta. A ipak, deo sajta koji se može unovčiti i pratiti (onaj koji je agencijama bio bitan) donosio je samo 100.000 prikaza dnevno. Tada je problem eskalirao. Radio sam sa reklamnom agencijom koja se oslanjala na čist ljudski saobraćaj. Morali su brzo pronaći načine da filtriraju botove ili bi njihovi analitički i sistemi za posluživanje oglasa bili preopterećeni. Optužbe, preopterećenje infrastrukture i neslaganje u prihodima—sve je bilo povezano sa ovom nevidljivom, neumoljivom poplavom botova.
Moj prvi potez je bio kreiranje prilagođenog CAPTCHA, sa ciljem da botovima prikažem praznu stranicu dok pravi korisnici prolaze. Nažalost, to je imalo suprotan efekat. Zlonamerni botovi nisu usporili—pojačali su. CAPTCHA je postala izazov koji su agresivno pokušavali da prevaziđu, udvostručujući opterećenje.
Zatim je usledilo masovno blokiranje preko .htaccess. Radilo je—nekoliko dana. Zatim su se bot mreže prilagodile, pojavile su se nove IP adrese i .htaccess je postao pretrpan i spor. Moj hosting provajder je uskočio, pomažući da se privremeno blokiraju čitavi subnetovi, ali problem se vraćao svake nedelje.
Na kraju sam se okrenuo Cloudflare-u. Ovo je bila najznačajnija promena. Iako ne savršena, omogućila mi je da filtriram preko 1.5 miliona bot zahteva u roku od 24 sata. Učitao sam blokove mreže direktno u njihov firewall. Rezultat? Od 1.5 miliona bot pogodaka, samo 20 CAPTCHA izazova je bilo pokrenuto dnevno—dokaz da Cloudflare-ovo prepoznavanje na ivici radi bolje od svega što sam probao.
Da bih ostao ispred botova, izgradio sam sopstveni sistem za interno beleženje. Beleži svaki zahtev po IP adresi i User-Agent stringu, čuvajući ih u bazi podataka. Iza kulisa, zakazani zadatak se pokreće svakog minuta da agregira podatke. Kada otkrije sumnjive aktivnosti—kao što je veliki volumen zahteva sa jedne mreže ili IP opsega—pokreće se automatsko obaveštenje putem email-a. Taj email sadrži listu IP adresa i subnetova spremnih za dodavanje u Cloudflare za blokiranje.
Još uvek sam na besplatnom planu Cloudflare-a, ali čak i to pruža dovoljno kontrole za implementaciju ručnih pravila zaštitnog zida. Ovaj proaktivan pristup omogućava mi da detektujem i odgovorim na poplave botova pre nego što preplave sistem. Na Apache nivou, prvobitno sam pokušao da koristim .htaccess za direktno blokiranje saobraćaja, ali ova metoda je imala opadajuće rezultate. Kako su se pravila gomilala, performanse sajta su opadale, što je jasno pokazivalo da blokiranje na nivou servera nije održivo bez CDN-a ili podrške na ivici.
Kako napraviti sistem prijave + CloudFlare zaštitu?
Zašto ne ograničavanje brzine ili geografsko blokiranje? Zato što ne funkcionišu u mom slučaju. Većina ovih botova pravi samo jedan zahtev po IP adresi—ali to rade koristeći stotine ili čak hiljade IP adresa unutar iste mreže. To znači da ograničavanje brzine po IP adresi ne pomaže mnogo; volumen je distribuiran, a ne koncentrisan. Što se tiče detekcije po User-Agent? Beskorisno. Neki botovi su dovoljno pametni da oponašaju Googlebot ili druge legitimne crawlere, tako da ne možete verovati samo zaglavljima. Šta je sa filtriranjem po geografskoj lokaciji? Takođe nije efikasno. Moj sajt je višejezičan i prima saobraćaj iz mnogih zemalja po dizajnu. Ove mreže za preplavljivanje to znaju i rotiraju IP adrese iz celog sveta. Možda me stružu zato što moj sajt ima vredan sadržaj—ali ne mogu ga jednostavno zaključati iza zida za registraciju. To bi uništilo korisničko iskustvo. Zato mi je trebalo nešto pametnije od uobičajenih rešenja.
Pogledajte moj kod, MYSQL upite i preporuke ispod. (Laravel 10 + MYSQL)