Avatar billede simplus Nybegynder
26. januar 2007 - 23:00 Der er 25 kommentarer og
1 løsning

Så spamfri som muligt - uden at bruge GDlib

Jeg står i lidt af et dilemma. Jeg skal have gjort et gæstebog så spamfri som muligt, men hvilke muligheder har jeg? Jeg ved selvfølgelig at man kan bruge GDlib til at visse et billede med tal på osv. men det synes jeg ikke er så brugervenligt. Har i andre ideer?
Avatar billede intenz Novice
26. januar 2007 - 23:12 #1
En godkend indlæg side, der kommer efter der er lagt en besked. Altså så brugeren selv kan se sit indlæg og trykke godkend.
Avatar billede simplus Nybegynder
26. januar 2007 - 23:16 #2
Ja jeg tror det var lidt af det samme som jeg tænkte på før, kan du venligst uddybe dig en smule?
Avatar billede mstorgaard Praktikant
26. januar 2007 - 23:53 #3
Du kan vel også bare lave en funktion, som stiller et tilfældigt spørgsmål, som man skal være menneske for at kunne svare på :)

Fx "Hvilken dag var det i går?"
Avatar billede simplus Nybegynder
26. januar 2007 - 23:58 #4
Ja men igen er det ikke særlig brugervenligt, så kunne GDlib jo også bruges :-)
Avatar billede intenz Novice
27. januar 2007 - 00:00 #5
Det er rimelig ligetil.
Jeg går ud fra med spam at du mener spambots. En spambot vil højst sandsynligt ikke fatte at der kommer en side mere bagefter hvor der også skal trykkes submit.

Der er mange muligheder for at gøre det, jeg ville nok vælge noget i den stil her:

Du laver din første formular hvor brugeren indtaster det der nu skal indtastes i databasen.
Brugeren trykker godkend og ryger videre til en mellem side:
Her indsættes alt det data der er indtastet i databasen, sammen med en time(); variabel, med data er endnu ikke godkendt.

Du henter det ID beskeden har fået ud igen, og sender brugeren videre til en godkend side:
header("Location: godkend.php?id=$id");

Her vises beskeden for brugeren som den vil se ud i gæstebogen (så det ser naturligt ud for brugeren) og brugeren skal trykke godkend/indsæt besked.

Når det sker sendes brugeren igen til en mellem side hvor du kan tjekke ID op mod databasen igen og godkende den besked der indeholder ID'et. Evt. med noget med:
where time < $time-300
eller lignende, så brugeren skal godkende inden et bestemt tidsinterval (5 min her, ved ikke om du syntes det er optimalt).

Du kan også lave den første form som GET og den anden som POST, for at gøre det endnu mere besværligt for en spambot at finde ud af.


Det kan også laves på utallige andre måder, men det er da et udkast.
Avatar billede simplus Nybegynder
27. januar 2007 - 00:55 #6
Jamen det lyder fremragende intenz!

Jeg har også selv tænkt lidt over det, og fandt også frem til en god løsning, den lyder som følger:

Jeg laver en sql der søger efter indlæg som er skrevet indenfor de sidst 2 min f.eks... Så hvis en af de fundne beskeder matcher med den man selv lige har skrevet, jamen så er det jo helt klart spam..

Men da din er så god bliver jeg lige nød til at overveje hvilken jeg bruger.

Jeg siger ihvertfald tak for hjælpen, kan jeg bede om et svar? :-)
Avatar billede coderdk Praktikant
27. januar 2007 - 01:57 #7
Bare en tanke: Man kunne også bruge sessions og navngive formfelterne med tilfældige bogstaver ;)
Avatar billede masik7 Nybegynder
27. januar 2007 - 10:19 #8
Jeg har en idé:
Du laver et felt og gør det usynligt med CSS, så mennesker ikke kan se. En robot højst sandsynligt skrive i alle felter, så der bliver skrevet i dette felt, bliver indlæget ikke registreret i databasen ;).

Jeg har ALDRIG fået spam siden jeg brugte dette..

Bare et forslag..
Avatar billede masik7 Nybegynder
27. januar 2007 - 10:20 #9
En ommer:
Du laver et felt og gør det usynligt med CSS, så mennesker ikke kan se det. En robot vil højst sandsynligt skrive i alle felter, så hvis der bliver skrevet i dette felt, bliver indlæget ikke registreret i databasen ;).
Avatar billede coderdk Praktikant
27. januar 2007 - 10:35 #10
God idé faktisk:

<div style="display: none">
Enter "notspam" in this field: <input type="text" name="spamcheck" value="spam">
</div>

Så skal du bare checke at $_POST['spamcheck'] er lig "spam" - hvis det ikke er, er det en robot...

Jeg ville dog ikke stole på den strategi alene... :)
Avatar billede masik7 Nybegynder
27. januar 2007 - 10:55 #11
Eller checke om det overhovedet indeholder noget, for robtten vil jo (højst sandsynligt) skrive i det
Avatar billede masik7 Nybegynder
27. januar 2007 - 11:13 #12
Men det ville være bedre:
<input type="text" name="subject" class="red">

Og med CSS:
.red {
    position:absolute;
    left:-1000px;
    top:-1000px;
}

Fordi "display: none" er for tydeligt, måske. Og der skal heller ikke være noget med "spam"..
Avatar billede simplus Nybegynder
27. januar 2007 - 15:14 #13
# coderdk

Ja det med session kunne sagtens bruges, men hvor sikker er den egentlig? Kan spammere ikke bare opsnuse sessions, eller hvordan. Det lyder dog som en spændende og god ide! - Glæder mig til at høre mere om den...

# masik7

god ide, men kunne man ikke bare indsætte det i et hidden felt så? Altså istedet for at rode med display: none; osv.
Avatar billede masik7 Nybegynder
27. januar 2007 - 15:23 #14
#simplus

Et hiddenfelt kan springes over af en robot. Det skal se så normalt/almindeligt ud så muligt ;). Og i øvrigt ville jeg jo heller ikke bruge display: none;, men:
.red {
    position:absolute;
    left:-1000px;
    top:-1000px;
}
Heh ;).

God fornøjelse til dig og god fordøjelse til din spam-dræber ;-)!
Avatar billede simplus Nybegynder
27. januar 2007 - 15:52 #15
Det må siges at være ligetil. Dog vil den stort set være ubrugelig hvs man brugte en stor skærm.. Men så kan den jo bare sættes til -5000px... det er dog det mindste problem. Jeg kan sagtens bruge det!

Smid venligst et svar...
Avatar billede simplus Nybegynder
27. januar 2007 - 15:55 #16
Min mund var lidt hurtigere end hjernen, selvfølgelig vil den ikke være ubrugelig hvis man brugte en stor skærm, fordi den jo starter fra øverste venstre hjørne lige meget hvad..
Avatar billede simplus Nybegynder
27. januar 2007 - 15:57 #17
Jeg skal dog lige høre en sidste ting: Er der en grund til at du har kaldt den Subject? Så ser den måske ud som et normalt felt for en robot eller?
Avatar billede showsource Seniormester
27. januar 2007 - 16:39 #18
Jeg kan nu godt li' coderdk's med forskelligt navn på et form felt, sammen med sessions!

<?php
session_start();


// Funktion til at lave et pasword, hentet på http://www.php.net/manual/da/function.rand.php
// Bruges her til at navngive et hiddenfelt, og sætte en session med samme navn

function randomPassword($len = 4)
{
$pass = '';
$lchar = 0;
$char = 0;
    for($i = 0; $i < $len; $i++)
    {
        while($char == $lchar)
        {
    $char = rand(48, 109);

        if($char > 57) $char += 7;
        if($char > 90) $char += 6;
        }
    $pass .= chr($char);
    $lchar = $char;
    }
return $pass;
}


// IF der bliver postet
// IF der er sat en post med samme som SESSION["myfield"] og der er sat en cookie med navnet session_name()
// IF ovennævte post er tom
// og ovennævte cookie har samme værdi som session_id() 

if($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST[$_SESSION["myfield"]], $_COOKIE[session_name()]) && empty($_POST[$_SESSION["myfield"]]) && $_COOKIE[session_name()] == session_id()) {
echo"<pre>\r\n";

echo"Andre if'er her!\r\n";

print_r($_POST);

echo"</pre>";

//header("Location:http://". $_SERVER["HTTP_HOST"] ."/". $_SERVER["PHP_SELF"]);

exit;
}

// sætter en session til navn på hiddenfelt
$_SESSION["myfield"] = randomPassword();

?>

<html><head><title>Site admin</title>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />

</head>
<body>

<form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post">
<input type="hidden" name="<?php echo $_SESSION["myfield"]; ?>">
<input type="text" name="navn" class="input"><br />
<input type="submit" value="Send" class="submit">
</form>

Hiddenfelt navn er <?php echo $_SESSION["myfield"]; ?>


</body></html>
Avatar billede simplus Nybegynder
27. januar 2007 - 17:14 #19
Super indlæg showsource!

Nu mangler jeg bare svar på en enkel ting, hvor godt beskytter det med sessions egentlig? Sådan fra 1-10?
Avatar billede masik7 Nybegynder
27. januar 2007 - 17:47 #20
Ja, nemlig så ser den mere normal ud ;).

Og et svar :)
Avatar billede showsource Seniormester
27. januar 2007 - 17:49 #21
En onclick er jo iøvrigt ikek af vejen her.

<?php
session_start();


// Funktion til at lave et pasword, hentet på http://www.php.net/manual/da/function.rand.php
// Bruges her til at navngive et hiddenfelt, og sætte en session med samme navn


// IF der bliver postet
// IF der er sat en $_SESSION["myfield"] og en post med samme som SESSION["myfield"] og der er sat en cookie med navnet session_name()
// IF ovennævte post er tom (har en value indtil onclick på submit)
// og ovennævte cookie har samme værdi som session_id() 

if($_SERVER["REQUEST_METHOD"] == "POST" && isset($_SESSION["myfield"], $_POST[$_SESSION["myfield"]], $_COOKIE[session_name()]) && empty($_POST[$_SESSION["myfield"]]) && $_COOKIE[session_name()] == session_id()) {

unset($_SESSION["myfield"]); // sletter "myfield"
$_SESSION["done"] = "Slap igennem med post"; // Bruges kun til visning. Evt. andre if'er kommer her

header("Location:http://". $_SERVER["HTTP_HOST"] . $_SERVER["PHP_SELF"]);

exit;
}

// sætter en session til navn på hiddenfelt
$_SESSION["myfield"] = session_name() . md5(rand()); // Ikke noget tal i starten af navnet !!!

?>

<html><head></head>
<body>

<form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post">
<input type="hidden" name="<?php echo $_SESSION["myfield"]; ?>" value="<?php echo rand(); ?>">
<input type="text" name="navn" class="input"><br />
<input type="submit" value="Send" class="submit" onclick="this.form.<?php echo $_SESSION["myfield"]; ?>.value='';">
</form>

Hiddenfelt navn er <?php echo $_SESSION["myfield"];

if(isset($_SESSION["done"])) {
echo"<p>". $_SESSION["done"];
unset($_SESSION["done"]);

}

?>


</body></html>
Avatar billede showsource Seniormester
27. januar 2007 - 17:52 #22
Prøver lige igen!

<?php
session_start();

// IF der bliver postet
// IF der er sat en $_SESSION["myfield"] og en post med samme som SESSION["myfield"] og der er sat en cookie med navnet session_name()
// IF ovennævte post er tom (har en value indtil onclick på submit)
// og ovennævte cookie har samme værdi som session_id() 

if($_SERVER["REQUEST_METHOD"] == "POST" && isset($_SESSION["myfield"], $_POST[$_SESSION["myfield"]], $_COOKIE[session_name()]) && empty($_POST[$_SESSION["myfield"]]) && $_COOKIE[session_name()] == session_id()) {

unset($_SESSION["myfield"]); // sletter "myfield"
$_SESSION["done"] = "Slap igennem med post"; // Bruges kun til visning. Evt. andre if'er kommer her

header("Location:http://". $_SERVER["HTTP_HOST"] . $_SERVER["PHP_SELF"]);

exit;
}

// sætter en session til navn på hiddenfelt
$_SESSION["myfield"] = session_name() . md5(rand()); // Ikke noget tal i starten af navn på feltet !!!

?>

<html><head></head>
<body>

<form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post">
<input type="hidden" name="<?php echo $_SESSION["myfield"]; ?>" value="<?php echo rand(); ?>">
<input type="text" name="navn" class="input"><br />
<input type="submit" value="Send" class="submit" onclick="this.form.<?php echo $_SESSION["myfield"]; ?>.value='';">
</form>

Hiddenfelt navn er <?php echo $_SESSION["myfield"];

if(isset($_SESSION["done"])) {
echo"<p>". $_SESSION["done"];
unset($_SESSION["done"]);

}

?>


</body></html>
Avatar billede simplus Nybegynder
27. januar 2007 - 18:35 #23
Uha, det ser fremragende ud!
Hvor godt beskytter det at bruge random navne?
Avatar billede masik7 Nybegynder
27. januar 2007 - 19:02 #24
Tak for point..:)
Avatar billede intenz Novice
27. januar 2007 - 21:05 #25
Det beskytter formegentlig rigtig godt, da spambots gemmer informationen omkring formularen i en database og så sender data (post eller get) ud fra den information der findes i deres database. Så hvis felter ændres hele tiden, dropper de det nok bare og går videre til den næste (eller spam'en kommer ikke ind selvom de prøver).
Avatar billede olympus Nybegynder
30. januar 2007 - 01:08 #26
Man kunne også følge masik7's første indskydelse og læse:

http://ekot.dk/www/spamtrap/
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester