Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Vieraskirjan roskaviestit

Sivun loppuun

manninen [02.08.2010 10:32:56]

#

Hei!

Vieraskirjaani tulee kokoajan tämänkaltaista sotkua.

UP1nTJ <a href=\"http://oamdabyfcidj.com/\">oamdabyfcidj</a>, [url=http://mzlszwdaimll.com/]mzlszwdaimll[/url], [link=http://gbydtyinfxaq.com/]gbydtyinfxaq[/link], http://cbluitsgalip.com/

Miten nämä olisi paras estää?

Mod. lisäsi kooditagit

-tossu- [02.08.2010 10:54:58]

#

Jos se tulee aina samasta IP-osoitteesta, IP-bannit on varmaan helpoin ratkaisu. Toinen vaihtoehto on se, että laitat vieraskirjaan jonkun Captcha-virityksen.

trilog [02.08.2010 11:28:52]

#

Tarvitset vieraskirjaasi jonkun varmistuksen, että kirjoittaja on ihminen. Edellä mainittu CAPTCHA on varmaankin paras, mutta näissä voi olla ongelmana, että edes ihminen ei saa (helposti) selvää merkeistä. Jotkin pienet kysymykset ("Mikä on Suomen pääkaupunki?") tai laskutoimitukset ("Paljonko on neljä plus kolme?"), joihin oletat kirjoittajan osaavan vastata, ovat hyviä estämään botteja. Näiden pitää vaihtua joka sivulatauksella, sillä botit voivat saada tarpeaksi monen yrityskerran jälkeen oikean vastauksen. Tyhmimmät botit voi rajata pois lisäämällä sivulle kentän, joka on piilotettu CSS:llä (display: none;). Sen sisältö tarkistetaan palvelimen päässä, ja hylätään viesti, jos kenttä ei ole tyhjä.

Antti Laaksonen [02.08.2010 12:48:13]

#

Vielä yksi mahdollisuus on hylätä viestit, joissa on kiellettyjä sanoja. Esimerkiksi jos kaikissa roskaviesteissä lukee "[link=", ne voi tunnistaa tämän perusteella.

manninen [02.08.2010 15:30:57]

#

Kokeilenpa ensin rajata tyhmät botit pois ja jos ongelma jatkuu niin siirryn Captcha-viritykseen.

pake10 [02.08.2010 17:26:51]

#

Tein yksinkertaisen esimerkin tuollaisesta toteutuksesta.

Tarkistus:

<img src="varmista.php">

<form action="" method="post" />
<input type="text" name="varmista" />
<input type="submit" name="submit" value="Lähetä" />
</form>

<p>Ole hyvä ja syötä yllä oleva koodi alla olevaan kenttään.</p>

<?php

if (isset($_POST["submit"])) {

    if ($_COOKIE["varmistus"] == $_POST["varmista"]) {
        laheta_viesti();
    } else {
        tulosta_virhe();
    }

    setcookie("varmistus", "", time()-9000);
}

?>

Kuvan luonti:

<?php

header('Content-type: image/png');

$merkit = "abcdefghijlmnopqrstuvwxyz123456789";
$merkkijono = "";

for ($i = 0; $i < 8; $i++) {
    $merkkijono .= $merkit[rand(0, 33)]; // Arvotaan luku 0:n ja 33:n väliltä ja haetaan vastaava kirjain merkeistä.
}

$kuva = imagecreate(124, 38); // Luodaan kuva.

// Määritetään värit.
$tausta = imagecolorallocate($kuva, 255, 255, 255);
$teksti = imagecolorallocate($kuva, 0, 0, 0);
$viiva = imagecolorallocate($kuva, 0, 0, 255);

// Piirretään.
imagestring($kuva, 5, 10, 10, $merkkijono, $teksti);
imageline($kuva, 12, 12, rand(0, 40), rand(0, 40), $viiva);

imagepng($kuva);
imagedestroy($kuva);

setcookie("varmistus", $merkkijono);

?>

Jos botti ei osaa tallentaa keksejä, tuon pitäisi toimia. Keksistä nimittäin selviää generoitu merkkijono.

manninen [02.08.2010 23:58:07]

#

Kiitoksia

raakaliha [03.08.2010 00:34:45]

#

Eikös yleensä "Jätä seuraava kenttä tyhjäksi" -viritelmäkin tepsi tuollasiin, joka siis tungetaan css:llä piilotettuun diviin. Spämmibotit täyttävät yleensä jokaisen kentän samalla sotkulla.

pake10 [03.08.2010 10:58:09]

#

raakaliha kirjoitti:

Eikös yleensä "Jätä seuraava kenttä tyhjäksi" -viritelmäkin tepsi tuollasiin, joka siis tungetaan css:llä piilotettuun diviin. Spämmibotit täyttävät yleensä jokaisen kentän samalla sotkulla.

Miksi se pitäisi olla piilotettu divi?

raakaliha [03.08.2010 16:23:17]

#

Siis ei pidä, on kauniimpi vaa.

pake10 [05.08.2010 16:17:03]

#

raakaliha kirjoitti:

Siis ei pidä, on kauniimpi vaa.

Voihan botinkin tehdä niin, että se navigoi nettiselaimella osoitelistaa pitkin, siirtyy kentästä toiseen, täyttää ne ja painaa submit-nappia. Harvat taitaa näin tehdä, mutta on näitäkin varmasti olemassa.

Metabolix [06.08.2010 15:07:11]

#

On olemassa jopa botteja, jotka ajavat sivuun liittyvän JavaScriptin, ja tämä on varmasti suurempi saavutus kuin muutaman yksinkertaisen CSS-tyylin tunnistaminen. Niinpä valitettavasti suoraviivainen piilottaminen ei ole varma temppu. Parempaan tulokseen saattaisi päästä mutkikkaammilla CSS-kikkailuilla, jotka eivät varsinaisesti tee elementistä näkymätöntä vaan vain sijoittavat sen niin, ettei oikea käyttäjä voi huomata sitä.

Pete2 [06.08.2010 18:25:29]

#

Metabolix kirjoitti:

On olemassa jopa botteja, jotka ajavat sivuun liittyvän JavaScriptin, ja tämä on varmasti suurempi saavutus kuin muutaman yksinkertaisen CSS-tyylin tunnistaminen. Niinpä valitettavasti suoraviivainen piilottaminen ei ole varma temppu. Parempaan tulokseen saattaisi päästä mutkikkaammilla CSS-kikkailuilla, jotka eivät varsinaisesti tee elementistä näkymätöntä vaan vain sijoittavat sen niin, ettei oikea käyttäjä voi huomata sitä.

Ei JavaScriptillä mitään varmistuksia tehdä, miten sen ajaminen liittyy asiaan? Jos display tagit luetaan niin jotain tämän tapaista voi kokeilla:

<div style="width: 0px; height: 0px; overflow: hidden;">
	<!-- ... -->
</div>

raakaliha [08.08.2010 23:16:41]

#

Näin sellaisen jutun kerran, jossa pyydettiin lisäämään kahteen vierekkäiseen kenttään toisistaan poikkeavat, nollaa suuremmat kokonaisluvut; mitä olette tästä mieltä?


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta