Ohjelmointi

Irkkilinkkien pääsynvalvonta

sunnuntai 2.12.2007 klo 12.08

Toteutin irkkikanavan käyttöön eräänlaisen kuvablogin, johon voi lähettää kännykästä kuvaviestin matkan päältä. Irkkikanavalla on botti, joka kertoo kanavalle kuvaviestin otsikon ja URLin, josta sähköpostin sisältö löytyy. Viestin voi joko lähettää natiivisti sähköpostina kännykästä kuvaviestinä, jonka vastaanottajaksi on merkitty sähköpostiosoite, jolloin operaattorin mms-gw lähettää viestin eteenpäin sähköpostina.

Palvelu on toteutettu kahdella Perl-skriptillä ja yhdellä PHP-skriptillä. Saapunut kuvasähköposti ohjataan toiselle Perl-skripteistä, joka purkaa viestin levylle käyttäen mm. MIME- ja Unicode-pakettien luokkia. Tiedostoille annetaan satunnaisista alfanumeerisista merkeistä koostuva nimi. Viestin otsikko ja URL-osoite kirjoitetaan nimettyyn putkeen, jota myös Perlillä koodattu irkkibotti lukee ja kirjoittaa lukemansa irkkikanavalle.

Jano

Järjestelmän mielenkiintoisin osa on pääsynvalvonnasta vastaava PHP-koodi. Pääsynvalvonnalla halutaan estää kuvalinkin rajaton leviäminen irkissä, mutta toisaalta sallia helppo pääsy sisältöön omalta kanavalta. Jos käyttö ei ole tarpeeksi helppoa, ei palvelua tulla käyttämään. Toisaalta palveluun ei uskalleta laittaa niitä ehkä hauskimpia kuvia, mikäli kuvat voivat levitä liian helposti muille kanaville. Muutaman kymmenen ihmisen ylimäärinen kohdeyleisö ei ole ongelma, mutta useamman sadan ihmisen ylimääräinen yleisö ei ole haluttavaa, vaikkakin liiankin helppoa saavuttaa irkissä.

Pääsynvalvontaan ehdotettiin neljää eri lähestymistapaa:

  • ajallinen rajaus, resurssit näkyvät vain n vuorokautta
  • rajaus n:ään ensimmäiseen HTTP-pyyntöön
  • rajaus ensimmäisten n:n IP-osoitteen perusteella: tämän rajauksen käyttö yksinään mahdollistaa pysyvät urlit
  • Flickr-tyylinen rajaus: resurssit näkevät vain, jos selaimella on käyty hakemassa cookie aiemmin jostain muusta urlista

Paras olisi joku edellisten yhdistelmä. Ajallinen rajaus on ainoa, joka ei vaadi tietokantabackendin käyttöä. Nyt käytössä on pelkkä ajallinen rajaus, mutta tarkoitus on lisätä myös HTTP-pyyntöjen määrän rajaus. Lisäksi satunnaiset resurssinimet estävät nimien arvailun edellisten perusteella.