RSS

Odwiedziny: oczekiwane i niechciane

Liczba odsłon: 182

Niedługo po pierw­szej po­waż­nej prze­bu­do­wie, Świat Owo­ców zo­stał wy­po­sa­żo­ny w licz­nik od­wie­dzin. Rosnąca licz­ba czy­ta­ją­cych to, co prag­nę prze­ka­zać, naj­le­piej mo­ty­wu­je do pi­sa­nia wię­cej i le­piej. Aby jed­nak nie zo­stać wpra­wio­nym w stan eksta­zy szyb­ko ros­ną­cy­mi, acz ma­ło wia­ry­god­ny­mi wska­za­nia­mi, od sa­me­go po­cząt­ku po­mi­ja­łem w li­cze­niu od­wie­dzi­ny ge­ne­ro­wa­ne przez róż­ne­go ro­dza­ju boty inter­ne­to­we, naj­częś­ciej re­pre­zen­tu­ją­ce ser­wi­sy wy­szu­ku­ją­ce.

Czas pły­nie i nie­daw­no do­ko­na­łem ko­lej­nej po­waż­nej prze­bu­do­wy sil­ni­ka i mo­ty­wu gra­ficz­ne­go stro­ny. Przy okaz­ji też zre­zyg­no­wa­łem z wpro­wa­dzo­ne­go w prze­szłoś­ci me­cha­niz­mu iden­ty­fi­ko­wa­nia uni­ka­to­wych od­wie­dzin za po­mo­cą „cias­te­czek” HTTP. W ten spo­sób stra­ci­łem jed­nak moż­li­wość względ­nie wia­ry­god­ne­go mie­rze­nia licz­by od­wie­dza­ją­cych. Musiałem wy­myś­lić in­ne roz­wią­za­nie, przy okaz­ji też re­zyg­nu­jąc z do­tych­cza­so­wych, sku­tecz­nych lecz pry­mi­tyw­nych roz­wią­zań ba­zu­ją­cych w więk­szoś­ci na ko­dzie PHP.

Mój no­wy po­mysł po­le­ga na re­zyg­na­cji z mie­rze­nia uni­ka­to­wych od­wie­dzin. Owszem, ta­ki wskaź­nik jest dość cie­ka­wy i ma spo­rą war­tość in­for­ma­cyj­ną, jed­nak dla twór­cy stro­ny WWW istot­niej­sze jest to, ile ra­zy jest ona czy­ta­na. Większą sa­tys­fak­cję da­je oso­ba re­gu­lar­nie wra­ca­ją­ca i czy­ta­ją­ca no­we tek­sty, niż ktoś, kto raz zerk­nął na stro­nę, pod­niósł licz­nik od­wie­dzin, lecz nig­dy już nie wró­cił.

Co za­tem mie­rzyć, sko­ro nie od­wie­dzi­ny? Postanowi­łem zli­czać wy­świet­le­nia po­szcze­gól­nych ele­men­tów stro­ny. Stało się to łat­wiej­sze dzię­ki zlik­wi­do­wa­niu po­dzia­łu mię­dzy arty­ku­ły i wpi­sy blo­gu oraz re­zyg­na­cji z dzie­le­nia dłuż­szych ar­ty­ku­łów na pod­stro­ny. Poprzed­nio je­den ar­ty­kuł mie­ścił się na wie­lu stro­nach, obec­nie jed­no od­wo­ła­nie rów­na się jed­ne­mu tek­sto­wi. Oczywiś­cie, oso­ba wie­lo­krot­nie od­świe­ża­ją­ca je­den tekst mo­że za­fał­szo­wać po­miar, jest to jed­nak błąd sta­ty­stycz­ny, z któ­rym jak naj­bar­dziej mo­gę się po­go­dzić.

Wróciłem jed­nak w ten spo­sób do punk­tu wyj­ścia: jak nie dać się oma­mić auto­ma­tom prze­glą­da­ją­cym za­war­tość ser­wi­sów WWW? Na szczęś­cie więk­szość z nich przed­sta­wia się bez py­ta­nia i moż­na łat­wo stwier­dzić, czy zigno­ro­wać od­wo­ła­nie przy zli­cza­niu. Nie chcia­łem jed­nak re­zyg­no­wać z moż­li­woś­ci mo­ni­to­ro­wa­nia ru­chu ge­ne­ro­wa­ne­go przez boty. Zdecydowa­łem za­tem, że za­pi­sy­wać bę­dę wszyst­kie od­wie­dzi­ny, a wi­zy­ty bo­tów bę­dę usu­wał z po­mia­ru do­pie­ro przy ge­ne­ro­wa­niu sta­tys­tyk.

W ba­zie da­nych mu­sia­ły za­tem po­wstać trzy ta­be­le. W pierw­szej za­pa­mię­ty­wa­ne są po­szcze­gól­ne od­wie­dzi­ny: iden­ty­fi­ka­tor ele­men­tu ser­wi­su, da­ta i czas wy­świet­le­nia da­nej stro­ny oraz adres IP od­wie­dza­ją­ce­go. Druga za­wie­ra li­stę adre­sów IP, któ­rych nie chcę uwzględ­niać w sta­tys­ty­kach. Trzecia prze­cho­wu­je tym­cza­so­wo iden­ty­fi­ka­to­ry User-Agent klien­tów, na pod­sta­wie któ­rych mo­gę post fac­tum stwier­dzić, czy adres, któ­ry od­wie­dził mo­ją stro­nę nie po­wi­nien zo­stać wy­klu­czo­ny nie tyl­ko z przy­szłych, ale i z już do­ko­na­nych po­mia­rów licz­by od­wie­dzin.

Na pierw­szy rzut oka wszyst­ko to sta­no­wi wy­łącz­nie zbiór su­ro­wych da­nych. Za po­mo­cą od­po­wied­nich wy­ra­żeń SQL mo­gę jed­nak wy­do­być z te­go zbio­ru do­wol­ne pod­su­mo­wa­nie:

Już w pierw­szych dniach dzia­ła­nia no­we­go sys­te­mu oka­za­ło się, że nie wszyst­kie boty są po­ży­tecz­ne. O ile boty ser­wi­sów Google.com czy Bing.com są u mnie mi­le wi­dzia­ne, to nie wi­dzę po­wo­du, by Świat Owo­ców in­dek­so­wa­ły boty chiń­skie­go Baidu.com. Jeszcze gor­sze są od­wie­dzi­ny bo­tów usiłu­ją­cych za­mieś­cić ko­men­ta­rze za­wie­ra­ją­ce re­kla­my i od­noś­ni­ki i choć w spo­rym za­kre­sie za­bez­pie­czy­łem się przed tym, wo­lał­bym, że­by w ogó­le nie mia­ły one wstę­pu do mo­je­go ser­wi­su. Rozszerzy­łem za­tem ta­be­lę igno­ro­wa­nych adre­sów IP o ko­lum­nę de­cy­du­ją­cą o tym, czy da­ny adres ma być tyl­ko igno­ro­wa­ny w sta­tys­ty­kach, czy też otrzy­mu­je cał­ko­wi­ty za­kaz wstę­pu.

Nieocenio­ny stał się przy tym ser­wis Project HoneyPot, któ­ry za po­mo­cą wie­lu roz­pro­szo­nych „pod­sta­wio­nych” ser­we­rów wy­kry­wa boty wę­dru­ją­ce po Sieci i iden­ty­fi­ku­je ich cha­rak­ter. Pozwala to uzys­kać wstęp­ne in­for­mac­je o his­torii da­ne­go adre­su IP, a w szcze­gól­noś­ci o tym, czy jest on zna­ny z mo­ni­to­ro­wa­nia stron WWW, roz­sy­ła­nia spa­mu lub za­miesz­cza­nia ko­men­ta­rzy re­kla­mo­wych.

Na ra­zie po wy­kry­ciu nie­chcia­ne­go od­wie­dza­ją­ce­go sil­nik mo­jej stro­ny ge­ne­ru­je pu­sty do­ku­ment z ko­dem błę­du 403, ozna­cza­ją­cym brak do­stę­pu do treś­ci. W każ­dej chwi­li mo­gę jed­nak na pod­sta­wie ba­zy da­nych wy­ge­ne­ro­wać skrypt iptables, od­ci­na­jąc nie­mi­le wi­dzia­nym auto­ma­tom do­stęp nie tyl­ko do treś­ci stron, ale do wszyst­kich zbio­rów mo­je­go ser­we­ra.

Chwilowo sys­tem zli­cza­nia od­wie­dzin dzia­ła w tle i two­rzy pierw­sze sta­tys­ty­ki, lecz je­go dzia­ła­nie po­zos­ta­je nie­wi­docz­ne. Już za kil­ka­naś­cie dni gdzieś w na­głów­kach ar­ty­ku­łów po­win­ny się wresz­cie po­ja­wić licz­by in­for­mu­ją­ce o tym, ile osób prze­czy­ta­ło da­ny wpis.