Repost-eston teoria

Liittynyt
03.07.2018
Viestejä
362
Yön pimeinä tunteina tuli mietittyä että pystyykö mitenkään toteuttamaan nettilomakkeeseen repost-estoa, ilman että käyttää hyväkseen tietokantaa tai ulkoista palvelua ?

Tarkoittaa sitä että haittaa haluava käyttäjä voi painaa F5-nappia, tai automatisoida esim. php:n curlin pommittamaan lomaketta.

Eli jos luon vaikka sessioon tai cookieen key-value parin, niin mikään ei estä käyttämästä tätä paria uudestaan jos käytössä ei siis ole tietokantaa mistä tuon parin voisi poistaa tai merkitä käytetyksi.

Tekniikalla ei niin väliä, esim. php + js
 
Yhdellä php:lla värkätyllä sivustolla on itse toteutettu vieraskirja, johon alkoi tulla spämmiä. Viritin sinne aikoinaan seuraavan systeemin, joka on toiminut todella hyvin:
- POST hylätään jos käyttäjällä ei ole sessiota
- POST hylätään jos viestin kirjoitus lomakkeen avaamisesta ei ole kulunut tiettyä aikaa (esim. 10 sekuntia, joka normaalilla käyttäjällä vähintään menee viestin kirjoittamiseen)

Vastaava toimisi varmaan auttavasti tässäkin. Eli pakollinen sessio ja aikalimiitit.
 
Toteutin Googlen recaptchan avulla tällaisen "vedenpitävän" systeemin:

selain: käyttäjä tekee captchan -> saatu token postataan palvelimelle
palvelin: validoi tokenin googlelta, jos ok, tallennetaan token sessioon -> selaimelle palautetaan ok
selain: postaa lomakkeen + tokenin palvelimelle
palvelin: tarkistaa että token täsmää sessioon tallennettuun tokeniin

Jos postatun lomakkeen token ei täsmää session tokeniin, lomake hylätään.
Jos sessioon ei ole tallennettu tokenia, lomake hylätään.
Jos tokenin validointi googlella ei onnistu, sessioon tallennettu token tyhjennetään.
Kun lomake käsitellään palvelimella, sessioon tallennettu token tyhjennetään.

Recaptchan täyttöä ei siis voi ohittaa, se on tehtävä joka kerta kun lomake lähetetään palvelimelle.

Tosin tässäkin on tietysti ongelmana se, että joissakin maissa kannattaa maksaa ihmisille että ne kirjoittelevat mainosviestejä käsin. Siihen ei auta captchat.
 
^Jos sivulla ei tarvitse käyttää mitään valtakieliä (esim. englanti), myös joku helppo sanallinen kysymys voisi olla toimiva ratkaisu. Kone ei luultavasti ainakaan vielä osaa ihan tuosta vaan moista ratkaista eivätkä maksetut kirjoittelijat ymmärrä esim. suomea. Luultavasti kysymyksiä kannattaa toki olla useampikin, ja jos kovasti on suosiota luvassa, kysymysten generointi jollain logiikalla voisi sekin olla tarpeen. Lisäksi haasteena on keksiä tarpeeksi monimutkaisia kysymyksiä, jotta niihin ei ole helppo vastata kieltä ymmärtämättäkin, mutta silti tarpeeksi yksinkertaisia, jotta vähän tyhmempikin ihminen osaa vastata. Hatusta vedettynä suomeksi joku kysymys saattaisi ehkä pystyä olemaan vaikka "Mikä on sanan "kissalle" perusmuoto?", johon vastaus on toki kissa. Tosin lieneekö tuo sitten jo liian vaikea kysymys...
 
Kiitos vastauksista. Todella hyviä ideoita!
Jos ei erillistä / valmista captha-pluginia käytetä, niin tuota session tallentamista en kyllä ymmärrä.
Koska cookie luodaan sivun lataushetkellä
ja se tarkastetaan lomakkeen postaus-hetkellä, joten ainahan sen voi curlilla laittaa tekemään noita luonteja.
Mutta tosiaan jos kookie luodaan jo sillä sivulla mistä lomakkeelle mahdollisesti tullaan tai kun näytetään tyhjä lomake ja se sitten tyhjätään kun lomake postataan + tarkistetaan että siihen tosiaan meni kauemman kuin 10 sekuntia, niin sehän suojaa aika hyvin eikä hidasta / haittaa käyttäjää yhtään.

Joku voi sanoa että tyhmäähän se on pyörää keksiä uudestaan, käytä vaan valmista plugaria, mutta tässä oli hakusessa poisto-lomakkeen varmennus ilman että käyttäjää kiusataan captchalla. Täytyy siis jotenkin varmistaa ettei F5-painallus tms. poista liikaa tietoja.
 
Koska cookie luodaan sivun lataushetkellä
ja se tarkastetaan lomakkeen postaus-hetkellä, joten ainahan sen voi curlilla laittaa tekemään noita luonteja.
Niin, jos joku oikeasti haluaa alkaa kiusaamaan jotain yksittäistä urheiluseuran vieraskirjaa, niin ei sellaista estoa olekaan jota ei voisi kiertää. Yksikään spämmibotti ei tuota kuitenkaan itse osaa tehdä, joten ratkaisu on 99%:lle nettisivuista täysin riittävä.
 

Uusimmat viestit

Statistiikka

Viestiketjuista
261 839
Viestejä
4 548 782
Jäsenet
74 851
Uusin jäsen
hieunguyen

Hinta.fi

Back
Ylös Bottom