Dr. Baranyai László, fénykép

Dr. Baranyai László

 

Visszajelzés űrlap védelme

Mar 12, 11:32 AM, Software | Tippek és trükkök

 

Az ember azt hinné, hogy leáldozóban van a SPAM. Gondoltam értelmetlen lenne olvashatatlan leveleket és link nélküli levélszemetet küldeni. Ez utóbbi tisztán trollkodás mások postafiókjában, hiszen még kínálni sem kínál semmit, csak rabolja a gépek erőforrásait és az időmet. Sajnos még mindig népszerű, számottevő tábora van. Ezért elkezdtem csiszolgatni egy céges visszajeltés űrlapot.

Ellenőrzések a feldolgozás előtt

A visszajelzés űrlap PHP kódja ellenőrzi a feltételeket és amennyiben átment rajtuk az üzenet, a szerver kiküldi a cég erre a célra fenntartott postafiókjába. A tartalmi szűrést most nem részletezem, de egy-két trükkel további erőforrások igénybe vétele nélkül gyorsan kidobhatjuk a szemetet. A feladó címének ellenőrzésére számos technika létezik, de annyian hamisítják az e-mail címeket vagy másokét használják, hogy praktikusan nincs értelme. Jut eszembe, ezúton is üdvözlöm a marhát, aki a Pizza rendeléséhez az én domain címem nem létező postafiókját adta meg kapcsolatként.

Első lépés a gyakori trollok kitiltása. Akiről már a megjelenésekor tudható, hogy rosszindulatú, bátran tiltsuk ki a szolgáltatásból. Ezt hívják fekete listának. Sajnos van néhány fizetett troll, akik otthonról, más szolgáltatókon keresztül nagy mennyiségben küldenek szét szemetet. Szerencsére a felhasznált hálózatok száma véges, így pár hónap alatt megvan a végleges lista a szervereikről és szolgáltatóikról. Ezt felhasználva egyszerűen megtagadjuk a kiszolgálásukat:

<?php
 // blacklisted networks
 $black=array('9.8.7.','8.7.6.5', ...stb...);
 $pos = false; 
 $i = 0;
 do {
  $pos = strpos($_SERVER['REMOTE_ADDR'],$black[$i],0);
  $i++;
 } while ($pos===false && $i<count($black));
 if ($pos!==false && $pos===0) {
  header('HTTP/1.1 403 Blacklisted',ture,403);
  exit;
 }
?>

A fenti kódrészletben a $black tömb tartalmazza a kitiltott címek listáját. A címek elejének egyezőségét figyelve csoportokat is kitilthatunk, pl. ’9.8.7.’ minden számítógépre vonatkozik a 9.8.7.0 – 9.8.7.255 tartományból. Érdemes ellenőrizni a támadó címeket a whois szolgáltatással és az ott látható tartományt is beírhatjuk. Ezzel sajnos a zóna tisztességes felhasználóit is kitiltjuk, ezért a fekete listát érdemes frissíteni és csak idiglenesen elhelyezni benne a címeket.

Ha megtörtént az első ellenőrzés és nem tiltottuk ki a látogatót, az e-mail feldolgozása előtt célszerű megvizsgálni, hogy valóban a mi szolgáltatásunk használója küldi-e az üzenetet? Egyik lehetőség, hogy megvizsgáljuk az oldalunk látogatója-e a feladó vagy közvetlenül akarja használni az e-mail küldő programunkat?

<?php
 // check direct access
 $pos = isset($_SERVER['HTTP_REFERER']) ? stripos($_SERVER['HTTP_REFERER'],'http://www.example.com/') : false;
 if ($pos===false || $pos>0) {
  header('HTTP/1.1 403 XSS Not Allowed',ture,403);
  exit;
 }
?>

Ha a HTTP fejléc szerint nem látogatta meg a honlapunkat, nyilván nem is töltötte ki az űrlapot. Sajnos ezt a címet könnyen lehet hamisítani, ha valaki kicsit jobban felkészült. Szerencsére a lökött tinédzserek és bérelt házimunkások jelentős része itt elvérzik. A többieknek – másik lehetőség – készítsünk ellenőrző kódot (token), amit az űrlap letöltésekor gyártunk a látogató egyedi adataiból, pl. böngésző, IP cím, dátum, stb.. Ha a feladott levél nem tartalmazza az ellenőrző kódot, ismét megpróbálták kikerülni az ellenőrzést.

<?php
 // validate token checksum
 $tchk = md5( /* amit csak szeretnénk */ );
 if (!isset($_POST['token']) || strcmp($_POST['token'],$tchk)!==0) {
  header('HTTP/1.1 403 Missing Checksum',ture,403);
  exit;
 }
?>

Az adatok összeállítása után MD5 checksum ellenőrző összeget készítek, amit az űrlap is megkap. Az ellenőrző összegből nem tudják visszafejteni, hogy pontosan mit használtam fel, így hamisítani sem lehet. Ez természetesen csak a gyakorlatban igaz, elméletben elérhető a kellő kapacitás, amivel visszafejthető, de az nem egy szemetelő laptopján működik.

A fenti sorrend egyben javaslat is az erőforrások megőrzése céljából. Minél egyszerűbb és egyértelműbb tesztekkel kezdjük, annál többet spórolunk a trollok kiszűrésén. A kitiltás a fenti példákban HTTP fejléc kiküldésével és a program leállásával történik, amit kiegészíthet akár egy átirányítás vagy szöveges tájékoztatás.

Érdekes tapasztalat volt a kitiltott címek földrajzi hovatartozásának figyelése. Magyarországon nyilván mindenkinek van némi elvárása a SPAM forrásokkal kapcsolatban. Ezt részben igazolni tudom, első körben orosz (RU), ukrán (UA) és román (RO) címekről érkezett szemét. Miután kitltottam őket, a terület más szolgáltatói jelentek meg, azonban őket követve francia, görög és amerikai szervereket használtak. Ebből nyilvánvaló lett, hogy a szemetelés mögött nem csak unatkozó vagy bérelt trollokat kell lássunk, hanem intelligens programokat is. Amikor kiderült, hogy nem érik el a szolgáltatást, másik listára kerültem és onnan folytatták. Jelenleg a fekete listám 30 zónát tartalmaz. Érdekes módon van egy A zóna, amelyben a szolgáltató a teljes A zónát lefoglalta és mobil klienseket fogad. Van 11 db B zóna, ami jelentős ügyfélkörnek tűnik, de ismét a szolgáltatók által lefoglalt zónákról van szó, amelyeken pl. VPN kapcsolatot és anonym böngészést biztosítanak az ügyfeleiknek.

Tapasztalatszerzésre és információ gyűjtésre jó ez a módszer, de aki egyszerű és hatékony megoldást szeretne, annak a Google reCAPTCHA ingyenes szolgáltatását javaslom. Az űrlapba épített klikkelés szemetelő programokkal nehezen megoldható, ezért egy ideig ez biztosan védelmet nyújt. Aki szeretné megismerni a részleteket és van ideje trollokkal játszani, építse fel saját ellenőrző rendszerét és látni fogja a szemetelő programok alkalmazkodását is.

 

 

comments powered by Disqus

 

Banggood reklám