Minulla on PHP-lomake kotisivuillani ja siihen syöttäessä tietoa tiedot tallentuu tietokantaan. Nyt kuitenkin joka päivä tulee spammia jostain päin, joka lisäilee sekalaista merkkijonoa, mikä on todella häiritsevää.
Muistaakseni juskus luin asiasta, mutta en kyllä nyt osaa hahomottaa, että mistä löytyisi ratkaisu tuon korjaamiseen. Tuo on selvästi joku skripti, joka noita tuonne lisäilee.
Yksinkertaisimmillaan CAPTCHA voi olla helppo kysymys. Esimerkiksi "Kirjoita laatikkoon kuinka paljon on 2 + 2". Tai kuva jostain tunnetusta eläimestä ja viereen kysymys "Mikä eläin kuvassa on?" Sitten vain ennen tallennusta tarkistaa tuon vastauksen ennen palautteen lähettämistä/tallentamista.
Itse tosin olen sen verran vainoharhainen omiin koodeihini, että jos koodi kuvittelee tunnistavansa viestin spämmiksi, tulostan viestin ym, tiedot sivulle ja kehotan käyttäjää kopiomaan sen ja lähettämään sen sähköposti-osoitteeseen, joka löytyy yhteystiedot-sivulta. Mikään ei ota enempää päähän, kun se, että pitkä teksti häviää bittitaivaaseen.
Olen värkännyt vieraskirjan. Tein siihen sellaisen piilokentän, missä on sivunlataus aikaleima. Sitten kun formi lähetetään, niin katsotaan kuinka kauan on mennyt aikaa tietojen täytössä (verrataan piilotettua leimaa nykyiseen aikaleimaan). Jos palautteen lähettäjä on liian nopea, niin tehdään sitten tarvittavat toimenpiteet.
Itse olen tehnyt vielä niin, että loin kantaan blokatut -taulun, mihin tallennan automaattisesti kaikki IP:t, jotka ovat täyttäneet lomakeen liian nopeasti. Kun samasta IP:stä tullaan taas sivulle, niin en muodosta formia ollenkaan.
Tämä toimii aika hyvin, joskaan ei täydellisesti.
Ja tuosta leimasysteemiin voi ympätä vielä ns. lipuke-systeemin, jossa lomakkeelle lisätään piilotettuna serverillä vaikkapa siitä aikaleimasta lasketun lipukkeen. Tallennussivulla sitten muodostetaan lipuke uudelleen ja verrataan lähetettyyn. HotlinkStopperi-koodivinkistäni löytyy periaate, mutta ei se ihan suoraan tähän hommaan taida käydä, pitäisi muistaa päivittää kyseistä vinkkiä.
Miten mahtaisi toimia tekstilaatikko, jota ei saakaan täyttää tai jossa on ennalta määrätty teksti? Laatikon voisi vaikka piilottaa CSS:llä, jottei se hämää käyttäjiä.
Kurjaa, kun ei ole yhtään omaa sivua, jolla noita botteja kävisi, niin ei pääse itse testaamaan erilaisia ideoita.
Itse tallennan tietokantaan aikaleiman uusimmasta viestistä ja vertaan seuraavan viestin aikaleimaa siihen. Jos on yli 60 sekuntia mennyt niin tallennetaan viesti ja jos ei niin ohjataan disney.com sivustolle :)
Edit:
Lisäksi tuossa sinun "sivunlatausaikaleimassa" voitaisiin tehdä muunmuassa niin, että jos on skripti niin sen piiloitetun fieldin tieto voidaan hyvin muuttaa vaikka nollaksi jollon on kulut joku 39 vuotta muka edellisestä viestistä. Tai sitten pistetään suoraan post.php (olettaen että tuohon tulee POST-data) kaikki nuo tiedot.
Testilaatikko ei ainakaan mulla toiminut kovin hyvin. Toki, tyhmänä pistin sen piilotetuksi suoraan html:ssä, enkä käyttänyt CSSää, joten olisikohan noi botit sen sitte tajunnu.
Tesmulle pieni kysymys. Kuinka siis hoidat tuon 60 sekunnin jutun? Mitä jos jotkut kirjoittavat vieraskirjaan yhtäaikaa ja lähettävät viestin esim. 50 sekunnin välillä toisistaan. Ohjautuuko jälkimmäinen Disneyn ihmeelliseen maailmaan?
Näin teen homman itse...
Tämä on lisätty formille
Tässä tarkistetaan, kuinka kauan on kulunut ja tehdään tarvittavat toimenpiteet.
(Jos kulunut yli 4 sekuntia, sivun latauksesta, niin oletan sen olevan ihminen)
if(time() - $_POST["time"] > 4){ AL_GuestbookProvider::SaveGuestbookMessage($_POST["name"],$_POST["email"], $_POST["www"], $_POST["message"], $_SERVER["REMOTE_ADDR"]); }else{ AL_GuestbookProvider::SaveGuestbookMessage($_POST["name"],$_POST["email"], $_POST["www"], $_POST["message"], $_SERVER["REMOTE_ADDR"], false); BlockIp($_SERVER["REMOTE_ADDR"]); }
Tuolla BlockIp:ssä tallennan kantaan IP osoitteen.
Tarkistan aina sivulla, onko sivulle tulijan IP blokattu. Jos on, niin en tulosta ollenkaan viestinlähetyslomaketta. Tämä on toiminut mulla suhteellisen hyvin. Tiedän sen, koska tallennan kaikki viestit kantaan (spämmitkin), mutta näytän vain ne, jotka oletan olevan normaalilta käyttäjältä.
Itsellä on käytössä tuo CSS:llä piilotettu kenttä ynnättynä linkin takaa löytyvillä tarkistuksilla. http://mureakuha.com/keskustelut/2?12744#a110323
Tallennan jokaiselle IP:lle aikaleiman tietokantaan ja sitten sieltä haen sen kun yritetään samasta IP:stä lähettää uusi viesti. Yli 10min vanhat aikaleimat poistuu automaattisesti MySQL:stä (crontab)
Arttut02 kirjoitti:
Testilaatikko ei ainakaan mulla toiminut kovin hyvin. Toki, tyhmänä pistin sen piilotetuksi suoraan html:ssä, enkä käyttänyt CSSää, joten olisikohan noi botit sen sitte tajunnu.
Mikä laatikko se muka on, jos on <input type="hidden" />
? Jos botti menisi tuollaista muuttamaan, sitä voisi jo väittää typeräksi. :) Pointtina on juuri, että laatikko näyttäisi HTML:n osalta aivan tavalliselta tekstilaatikolta. Itse kokeilisin text-tyyppistä inputtia tai textareaa.
Metabolix kirjoitti:
Arttut02 kirjoitti:
Testilaatikko ei ainakaan mulla toiminut kovin hyvin. Toki, tyhmänä pistin sen piilotetuksi suoraan html:ssä, enkä käyttänyt CSSää, joten olisikohan noi botit sen sitte tajunnu.
Mikä laatikko se muka on, jos on
<input type="hidden" />
? Jos botti menisi tuollaista muuttamaan, sitä voisi jo väittää typeräksi. Pointtina on juuri, että laatikko näyttäisi HTML:n osalta aivan tavalliselta tekstilaatikolta. Itse kokeilisin text-tyyppistä inputtia tai textareaa.
Tarkoitin seuraavanlaista merkintää, vaikka väärin taisin asian edellisessä viestissä ilmaistakkin...
<input type="text" style="visibility: hidden" />
Voisin kuvitella, että piilotus erillisessä CSS filessä voisi ihan hyvin toimiakkin. En ole sitä itse kyllä testannut. Eiköhän näiden kaikkien ehdotusten yhdistelmä rupea aika hyvin botit jo suodattamaan.
Kannattaa heti suoraan tästä hetkestä eteenpäin tehdä ne css-tyylitykset erillisessä tiedostossa.
Aihe on jo aika vanha, joten et voi enää vastata siihen.