Spam in mijn gastenboek

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Hans Vereyken

Hans Vereyken

10/04/2007 13:46:00
Quote Anchor link
Ik heb een tijdje geleden een gastenboek in elkaar gestoken, dat heeft mij veel tijd en moeite gekost aangezien ik niet veel ken van php. Twee dagen na dat ik het online geplaatst had kwam de spam al opzetten. Ik merkte één overeenkomst, de e-mailadressen waren niet echt, daarom heb ik op de e-mailadressen een controle ingevoegd:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function isValidEmail($email){
    $pattern = "^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$";
    if (eregi($pattern, $email)){
        list($Username, $Domain) = split("@",$email);
        if(getmxrr($Domain, $MXHost)){
            return true;
        } else {
            if(fsockopen($Domain, 25, $errno, $errstr, 30)){
                return true;
            } else {
                return false;
            }
        }
    } else {
        return false;
    }  
}

Deze had ik gevonden op één of andere website.
Dit heeft de spam zeker doen afnemen, maar sinds twee dagen is de spam er helemaal terug, ik weet dat ik wss de zoveelste ben die met dit probleem afkom, maar ik slaag er niet in gevonden oplossing op een goede manier te integreren in mijn script.
Eén ding hebben alle spam-berichten gemeen, ze proberen url's te posten door <a href="url>klik</a> in te typen. Ik probeer nu dus een controle uit te voeren op het bericht die een fout geeft als hij dergelijke code tegenkomt, url's moeten in het vak website getypt worden.
Is er iemand die mij daarbij kan helpen? of andere mogelijkheden ziet om de spam terug te dringen.

Hier is mijn volledig script:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
<?php include('gastenboek.inc'); ?>

<?php
// alle fouten rapporteren
error_reporting (E_ALL);

// functie voor het checken van een geldig e-mailadres
function isValidEmail($email){
    $pattern = "^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$";
    if (eregi($pattern, $email)){
        list($Username, $Domain) = split("@",$email);
        if(getmxrr($Domain, $MXHost)){
            return true;
        }
else {
            if(fsockopen($Domain, 25, $errno, $errstr, 30)){
                return true;
            }
else {
                return false;
            }
        }
    }
else {
        return false;
    }  
}

?>

<center>
    <a name="teken"></a>
    <p align="center" style="margin-top: 0; margin-bottom: 0"><b><u><font face="Arial, Helvetica, sans-serif" size="5">Teken het Gastenboek</font></u></b></p>
    <p class="MsoNormal">&nbsp;</p>
    <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" name="form">
        <table>
            <tr>
                <td colspan="2"><?php
                    if (isset($_POST['submit'])){
                        $bericht = nl2br ($_POST['berichtpt']);
                        if ($_POST['naam'] == ""){
                            echo "<font color=red face=Arial>Naam niet ingevuld<br></font>";
                            $naamIs = "false";
                        }
else {
                            $naamIs = "true";
                        }

                        if ($_POST['email'] == ""){
                            echo "<font color=red face=Arial>E-mail niet ingevuld<br></font>";
                            $emailIs = "false";
                        }
else {
                            if (isValidEmail($_POST['email'])){
                                    $emailIs = "true";
                                }
else {
                                      echo "<font color=red face=Arial>E-mail onjuist<br></font>";
                                    $emailIs = "false";
                                }
                            }

                        if ($_POST['berichtpt'] == ""){
                            echo "<font color=red face=Arial>Bericht niet ingevuld<br></font>";
                            $berichtIs = "false";
                        }
else {
                            $berichtIs = "true";
                        }

                        if ($naamIs == "true"){
                            if ($emailIs == "true"){
                                if ($berichtIs == "true"){
                                    $date = date("F j, Y \a\\t g.i a", time());

                                    // opmaak bericht
                                    $post = "

<p><table border=0 callpadding=1 cellspacing=0 width=100%><tr>
<td align=center><table border=0 width=500 cellpadding=3><tr>
<td width=70><span class=MsoNormal align=justify><font face=Arial><b>Datum:</b></font></span></td>
<td><span class=MsoNormal align=justify><font face=Arial>$date</font></span></td>
</tr><tr>
<td><span class=MsoNormal style4 align=justify><font face=Arial><b>Naam:</b></font></span></td>
<td><span class=MsoNormal align=justify><font face=Arial><a href=mailto:$email>$naam</a></font></span></td>
</tr><tr>
<td><span class=MsoNormal align=justify><font face=Arial><b>Website:</b></font></span></td>
<td><span class=MsoNormal align=justify><font face=Arial><a href=$website target=_blank>$website</a></font></span></td>
</tr><tr>
<td colspan=2><span class=MsoNormal align=justify><font face=Arial>$bericht</font></span></td>
</tr></table></td>
</tr></table>
</p><br><hr><br>

"
;

                                    // open gastenboek.inc
                                    $inc = "gastenboek.inc";
                                    $book = fopen("$inc", "r+");

                                    // als gastenboek.inc ni ope wilt
                                    if(!$book) die ("<font color=red face=Arial>Fout bij het posten van het gastenboek, probeer later opnieuw. Als dit vaker voorkomt verwittig dan aub de webmaster via Contacts.<br></font>");

                                    // write new entry to top of file
                                    flock($book,1);
                                    $old_data = fread($book, filesize($inc));
                                    rewind($book);
                                    fwrite($book, "$post" . $old_data);
                                    flock($book,3);
                                    fclose($book);

                                    // Opmaak e-mail
                                    $message = "
                                    
Automatisch gegenereerde e-mail:
Nieuw bericht in gastenboek zilverenorgel.be:

Naam: $naam
Email: $email
Website: $website

Bericht: $bericht

-----------------------------

"
;

                                    // zend email
                                    mail("[email protected]","Nieuw bericht in gastenboek","$message","From: $naam <$email>");
                                    
                                    // bedankt berichtje en formulier verbergen
                                    echo "<font face=Arial>Bedankt ". $_POST['naam'].", uw bericht werd succesvol gepost</font>";
                                    $okIs = "true";
                                }
                            }
                        }
                    }

                ?>
</td>
            </tr>
            <?php
            if ($okIs == "true"){
                echo "<br>";
            }
else {
            ?>
            
            <tr>
                <td width="70"><span class=MsoNormal align=justify><strong><font face=Arial>Naam:</font></strong></span></td>
                <td><input type="text" name="naam" size="40" <?php if (isset($_POST['submit'])){ echo "value=\"".$_POST['naam']."\""; } ?>></td>
            </tr><tr>
                <td><span class=MsoNormal align=justify><strong><font face=Arial>Email:</font></strong></span></td>
                <td><input type="text" name="email" size="40" <?php if (isset($_POST['submit'])){ echo "value=\"".$_POST['email']."\""; } ?>></td>
            </tr><tr>
                <td><span class=MsoNormal align=justify><strong><font face=Arial>Website:</font></strong></span></td>
                <td><input type="text" name="website" size="40" value="http://" <?php if (isset($_POST['submit'])){ echo "value=\"".$_POST['website']."\""; } ?>></td>
            </tr><tr>
                <td colspan="2"><span class=MsoNormal align=justify><strong><font face=Arial>Bericht:</font></strong></span></td>
            </tr><tr>
                <td colspan="2"><textarea name="berichtpt" cols="56" rows="10" <?php if (isset($_POST['submit'])){ echo $_POST['berichtpt']; } ?>></textarea></td>
            </tr><tr>
                <td colspan="2"><input type="submit" value="Verzend" id="button" name="submit">
                <input type="reset" value="Begin opnieuw" id="button" name="reset"></td>
            </tr>
            <?php } ?>
        </table>
    </form>
</center>


Alvast bedankt
Hansje
 
PHP hulp

PHP hulp

20/04/2024 14:32:16
 
Stijn

stijn

10/04/2007 14:02:00
Quote Anchor link
je kunt kijken of iets voor komt in een variable met strstr
dus
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
if(strstr("<a href=",$bericht))
 echo"Dit mag niet gepost worden.";
?>
 
Leroy Boerefijn

Leroy Boerefijn

10/04/2007 14:11:00
Quote Anchor link
voor het outputten moet je er htmlspecialchars overheen halen..
dan worden alle tekens vervangen bijv:

< &lt;
> &gt;

enz..

edit zo krijg je dus ipv een link gewoon de code te zien ;)
Gewijzigd op 01/01/1970 01:00:00 door Leroy Boerefijn
 
Thijs X

Thijs X

10/04/2007 14:14:00
Quote Anchor link
Voeg een goede CAPTCHA toe en je probleem is verholpen. ( Het is natuurlijk nooit 100% maar hoe meer variatie erin zit hoe beter ).
In script lib van PHPhulp staan er wel een aantal, van plaatjes tot sommen.

Ook hier staat een optie om te proberen.
Gewijzigd op 01/01/1970 01:00:00 door Thijs X
 
Hans Vereyken

Hans Vereyken

10/04/2007 15:56:00
Quote Anchor link
@stijn: het lukt mij niet dit op een juiste manier in mijn script te planten. Ik heb geprobeerd met strstr, dat is mij helaas niet gelukt, maar het heeft mij wel op het goede spoor gezet, met stristr lukt het wel zoals ik het wil, het ziet er zo uit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
$string = $bericht;
if (stristr($string, 'href') === FALSE) {
  $berichtIs = "true";
} else {
  echo "<font color=red face=Arial>Go away, this form is SPAM free<br></font>";
  $berichtIs = "false";
}

@Leroy: Dat werkt zonder problemen. Als er nu toch nog spam doorkomt is hij tenminste niet aanklikbaar.
@thijs: ik hou niet zo van captcha, maar de andere optie heb ik wel gebruikt, een extra veld invoegen lijkt mij idd een goed idee.
Nu maar afwachten of de spamstroom stopt...

Bedankt allemaal!
groetjes
Hansje
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.