posztok

kommentek
google keresőoptimalizálás
Zoli kísérleti erőlködéseinek laboratóriuma a keresőoptimalizálás és webfejlesztés fáradalmait boncolgatva

Röviden összefoglalva a click fraud az a jelenség, amikor egy személy, vagy egy program rossz szándékkal egy fizetett hirdetésre kattint. A jelenség motiváló tényezőjének boncolgatását inkább a pszichológusokra bíznám, inkább valami másra koncentrálnék az elkövetkezőkben.

Egy-két oldalt és prezentációt átnézve egyre inkább úgy tűnik számomra, hogy az ipari méretű csalások mögött leginkább robot hálózatok állnak. Az oldalletöltések azonos IP-ről egyszerre akár több operációs rendszert azonosítva is érkezhetnek.

click fraud

forrás

A probléma ezzel a jelenséggel az, hogy vétlen hirdetés publikálók is áldozatául eshetnek a Google válaszának, az AdSense fiók felfüggesztésnek.

Pár óra alatt azonban sikerült valamiféle dögös megoldást összeeszkábálnom, amit így utólag végiggondolva nem sok teret fog engedni a click fraud kártékony jelenségének.

Első lépésként bemutatnék egy képzeletbeli AdSense kódot, hogy mindjárt bele is kezdhessünk hirdetői fiókunk biztonságosabbá tételébe.

<script type="text/javascript">
google_ad_client = "pub-xxxxxxxxxxxxxxxx";
google_ad_slot = "xxxxxx";
google_ad_width = 234;
google_ad_height = 60;
</script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>

Így néz(ne) ki a te oldaladban is egy Google hirdetés, és a forráskód megjelenítésével ez bárki számára hozzáférhető. Kimásoltam az erre a domainre dedikált kódot, majd beillesztettem egy másik oldalamba és ott is megjelent a hirdetés. Itt már kezdődnek is a gondok. Ha bárki rossz szándékkal kimásolja a javascriptet és bárhová beilleszti, szabadon kattingathat, anélkül, hogy ez neked bármilyen (webstatisztika) módon is feltűnhetne.

Ez a gondolatmenet elvisz minket a legfontosabb lépéshez. A javascript külső, védett fájlba való átmozgatásához.

<script type="text/javascript" src="adsense-kod.js">
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>

Ezt követően az adsense-kod.js-be helyezzük a kódnak ezen részletét:

google_ad_client = "pub-xxxxxxxxxxxxxxxx";
/* 234×60, létrehozva 2008.03.01. */
google_ad_slot = "xxxxxx";
google_ad_width = 234;
google_ad_height = 60;

Ezzel a lépéssel az AdSense kód külső fájlba került, de a javascript direkt elérését még nem akadályoztuk meg. Használjuk erre az hotlinking ellen is szükséges .htaccess kódot, a következő formában.

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://(www\.)?seo.i-connector.com(/)?.*$ [NC]
RewriteRule .*\.(js)$ http://seo.i-connector.com/ [R,NC]

Ezáltal a .js kiterjesztésű fájlok csak a második sorban specifikált domain fájljai számára lesznek elérhetőek. Direkt eléréskor a harmadik sorban lévő URL lesz az átirányítás végállomása.

Következzék a második lépés, amely során aktív kattinós IP adatgyűjtésbe fogunk kezdeni. Az oldalad kódjában a Google hirdetést ilyen formán építsd be.

<form method="post" action="" id="ads">
<div class="ads">
<script type="text/javascript" src="adsense-code.js">
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</div>
</form>

Lesz tehát egy ajax posztoló form, amely tartalmazza a hirdetés kódját.

A hirdetést taralmazó oldal head részébe kérlek illeszd be ezt a három sort, és már majdnem készen is leszünk.

<script src="mootools.js" type="text/javascript"></script>
<script src="control.js" type="text/javascript"></script>
<?php require "ads-controller.php" >

Amint a három fájlon szépen végigmentünk, addigra a védelem össze is áll (tartalmuk lementésekor kérlek nagyon ügyelj arra, hogy azt a szükséges fájlkiterjeszés megadásával illeszd az oldaladba).

mootools.js
Mootools.net-ről szabadon letölthető javascript keretrendszer.

control.js
Az AdSense hirdetést tartalmazó ads class-szal azonosított div felett végrehajtott egérkattintás (mousedown esemény) válaszául a div-et 800 milisecundum alatt teljesen átlátszóvá transzformálja, valamint vezérli az ajax posztolást az ip-log.php fájl futtatásaként.

Az ip-log.php fájl fogja végezni a statisztikai adatgyűjtést gyűjtést. A benne meghatározott limit változóval ($limit=1000;) indirekt módon szabályozható, hogy hányadik kattintást követően kerüljön a logfájl törlésre, azaz ismét kattinthatóvá válnak a hirdetések a korábban már kattintók számára.

Az indirekt szabályozás abból áll, hogy a logfájl mérete kerül összehasonlításra a limit változóval. Egy IP körülbelül 13 byte. 1000 osztva 13-mal durván 75 kattintás. Azt gondolom a logfájl törlésésére olyan nagyon égető szükségünk nincs is, hiszen a visszatérő látogatóid jellemzően a tartalmadra kíváncsiak, nem is igazán a hirdetések érdeklik őket, de a szkripted futását a fájlméretének növekedésével arányosan lassítani fogja, tehát inkább a fájlméret alapján válassz limitet, mintsem a kattintások száma alapján.

ads-controller.php
Működése roppant mód egyszerű, ha a látogató hirdetési kattantása miatt a logfájlba került, akkor az oldal töltődésekor eszközli a hirdetés eltűnését.

<script type="text/javascript">
window.onload = function()
{ new Fx.Style( "ads", ‘opacity’, {duration: 1000} ).start(1,0);}</script>

A szkript működését ezen a demo oldalon megtekintheted.

Kérlek, hogy ne kattints a hirdetésre, helyette Google Ads képre kattintva ugyanazt a hatást éred el!

Nyilatkozat:

  • a Google AdSense felhasználási feltételeit nem ismerem, ha valamelyik pontjával meglátásod szerint a megoldás ütközik kérlek tudasd velem,
  • a mootools hajlamos szkript ütközésre,
  • semmiért semmilyen felelősséget nem vállalok.

Ha a posztomat végig bírtad olvasni és megértetted, javaslom, hogy nyiss egy sört és dőlj hátra, mert rászolgáltál. 🙂

További kellemes napot kívánok!

Ha tetszett, amit itt olvastál egy link elhelyezésével segíthetsz a népszerűsítésében.
Egyszerűen másold ki az alábbi kódot, majd illeszd be weblapod forráskódjába.
Így fog kinézni: Click fraud, avagy védd az AdSense fiókodat stílusosan

This thing has 12 Comments

  1. sanyez
    Posted 2008 March 2 at 1:24 pm | Permalink

    Ez igen. Akkor most hátradőlök, betolok egy sört, aztán megpróbálom megvalósítani.

  2. skime
    Posted 2008 March 2 at 1:29 pm | Permalink

    Az AdSense felhasznaloi felteteleivel utkozik a beillesztendo kod barmifele megvaltoztatasa. Amugy pedig nincs igazad abban, hogy a kododat barhova felrakhatjak, es te nem fogsz tudni rola – az AdSense-en belul a beallitasoknal van egy menupont, ahol megadhatod, hogy mely oldalakon jelenhetnek meg a hirdeteseid, es kiirja neked, hogy hol jelentek meg meg.

  3. Bagi Zoltán
    Posted 2008 March 2 at 2:04 pm | Permalink

    Skime, köszönöm a hozzásszólásod, hiszek neked. Nem vagyok egy nagy adsense felhasználó. Belenéztem a TOS-ba és ezt a rendelkezést találtam a kóddal kapcsolatban.

    Ön semmilyen módon nem módosítja az Ön számára a Google által biztosított JavaScript vagy egyéb programozást, hacsak erre nem kapott kifejezett, írásos (az elektronikus levelezést is beleértve) engedélyt a Google-tól.

    Ez szémomra nem jelenti azt, hogy a javascriptnek az oldalad html kódjában meg kell jelennie.

    Nagyon kíváncsi vagyok a véleményedre, mert tapasztaltAS használónak tűnsz számomra. Mit gondolsz, ha nem jelenik meg a javascript a html-ben, de nem módosítom (becsület szavamra mondom, és ellenőrizi is fogod tudni a valódiságát) az is ütközni fog a TOS-sal? Kérdezem ezt azért, mert tíz perc alatt átvariálható az egész.

  4. skime
    Posted 2008 March 2 at 2:25 pm | Permalink

    Hát, én mindenképp írnék a helyedben az AdSense magyarországi részlegének, és megkérdezném tőlük. Enélkül csak találgatni tudunk. Én az AdSense TOS-nak mindig a legkevésbé engedékeny értelmezését szoktam alkalmazni, és ha valahol nem így teszek, megkérdezem, hogy szabad-e, vagy utánanézek, hogy megkérdezte-e már valaki. (Az általad idézett rész régebben szigorúbban volt fogalmazva, a kapott kódot semmilyen módon nem változtathattam, ha jól értem, az új megfogalmazás lehetővé teszi például a megjegyzések törlését, tehát engedékenyebb.)

  5. Bagi Zoltán
    Posted 2008 March 2 at 2:43 pm | Permalink

    Köszönöm a gyors válaszodat. Írni fogok nekik holnap, ma már nem, de tisztázni akarom a dolgot velük, mert nem szeretném, hogy fordítva hasson a védelem.
    Köszönöm mgegyszer!

  6. Posted 2008 March 3 at 12:16 pm | Permalink

    Szerintem az alapvető probléma az, hogy a Google-nak lényegében érdeke, hogy kizárja a fiókokat, miután a kifizetendő összeg közelébe került. Így lehet, hogy a Google készíti a kattintó programokat.

  7. Bagi Zoltán
    Posted 2008 March 3 at 5:20 pm | Permalink

    Sanyi, a feltételezésedet én a magam részéről elutasítom (a marha nagy kockázat miatt). Kértem az illetékesek állásfoglalását, kíváncsi leszek mikor/mit írnak válaszul.

  8. skime
    Posted 2008 March 3 at 5:59 pm | Permalink

    Sanyi, nem egeszen latom at, hogy miert erne meg a Googlenak megtartani parezer Ft-ot, ezzel elesve a kovetkezo evek beveteleitol…

  9. Posted 2008 March 26 at 2:25 pm | Permalink

    Sanyival azért sokan egyetértenek szerintem ! Személy szerint én is ismerek 3 olyan embert akinek akkor lötték ki a számláját mikor meghaladta a kifizetési küszöböt, vagy már a szélén volt ! Azért már ez nekünk is gyanus volt, de ezt soha nem tudod bizonyitani ugyanis egyoldalu a szerződés.

    Zoli, amugy reagáltak már ? / a szakértők 🙂 /

  10. Bagi Zoltán
    Posted 2008 March 26 at 3:51 pm | Permalink

    Tibi, minden reggel azon izgulok, hogy küldtek-e levelet, de még sajnos semmi infóm nincsen. Azt azonban megígérem, amint kapok valamit, azonnal közkinccsé teszem.

  11. Posted 2008 April 9 at 10:12 am | Permalink

    Az a baj, hogy ezzel igazából nem oldottad meg a problémát. Ugyanis gonosz szándékú támadóként összesen egyetlen egyszer kell megszereznem a kódotat azt pedig meg tudod tenni, csak kb 3 perccel tovább tart. (ennyi idő mire települ a firebug, és ujra indul a firefox, vissza jutok a lapodra.) Ha már egyszer sikeresen hozzá jutottam az id-hoz akkor ugyan úgy kimásolhatom a lapomra a kódot, és kattingtathatok vele.

    A google adsense fiókjában is van lehetőség, hogy beállitsd, hogy mely site-okról szeretnéd ha kattintható lenne a hirdetésed.

    Mivel azonban ez is referer alapján müködik túl sokat még itt sem kell tenni.

    Fogod magad és ha windowoson vagy akkor a c:\windows\system32\drivers\etc\hosts file-ba beirod hogy tamadniszandekozott.hu 127.0.0.1 és localhostban elinditasz egy xampp -ot. ott megcsinálod, hogy a másik lapról fent kimásolt js kód benne legyen a html-be és már kattingathatsz is bőszen.

    Vagy veszel egy firefoxot és egy referer hamisitő plugint hozzá, igy bárhonnan betöltheti a te javascriptedet a refer mindig a te oldalad lessz.

    Adjak még tippeket ?

  12. Bagi Zoltán
    Posted 2008 April 9 at 11:05 am | Permalink

    TloF, a legnagyobb baj a kommenteddel az az, hogy igaz, amit írsz.

    A referrer alapú átirányítás nem minden esetben működött helyesen, így felhajtottam egy másik lehetséges megoldást.
    A js fájlok http-accept értéke eltérő amennyiben, direkt vagy szkript indirekt elérés történik.

    Az legnagyobb probléma a dologban a firebug. Annak enabled státuszának detektálása még megoldható, de nem lenne túl elegáns erőszakkal kikapcsoltatni a firebugot.

    Ezt a vonalat mindaddig nem fogom követni, amíg az AdSense-es supportosok nem adnak választ, hogy ez belefér a TOS-ba, vagy nem fér bele.:)