Spam via online PHP Formulier

Status
Niet open voor verdere reacties.

justinos

Gebruiker
Lid geworden
12 nov 2004
Berichten
199
Hoihoi,

Op mijn website heb ik een PHP Mailformulier staan. Sinds dat formulier online staat komt er ontzettend veel spam vandaan! Berichten van allerlei verschillende ip adressen en soms wel 7 na elkaar. Ik kan dan wel al die IP-Adressen gaan blokkeren op de website maar als er steeds nieuwe IP's gebruikt worden schiet ik dara niks mee op.. is hier wellicht iets tegen te doen?

Zulke mails krijg ik nu wekelijks in mijn postvak:

Naam: John B
E-mail: johnb@mail333.com
F
unctie: Unknown
Onderwerp: Unknown

Bericht: <a href= *** >Busty indian babes</a> Busty indian babes <a href= *** >Babe wet</a> Babe wet <a href= ***.htm >Sexy brunette ****ed</a> Sexy brunette ****ed


Spam.. spam.. spam.. is er een mogelijkheid dit te verhelpen?

Wie kan mij helpen?

Justin
 
Laatst bewerkt:
Het is niet handis om hier die links ook te plaatsen, omdat je dan kans hebt dat er mensen op klikken
Daarnaast is het plaatsen van dergelijke links in strijd met de huisregels, vooral ivm de verschillende leeftijden van mensen die op het forum komen.
 
Laatst bewerkt:
Je kunt een captcha image gebruiken. Dit is tekst die in een afbeelding wordt weergegeven en door de gebruiker ingevoerd moet worden om het formulier te kunnen verzenden. Automatische herkenning van de tekst in de afbeelding is erg moeilijk, waardoor het spam kan voorkomen.
 
Ik heb inmiddels al verschillende oplossingen kunnen vinden maar in mijn mail formulier krijg ik het niet voor elkaar om het erbij te voegen. Het probleem is dat er in mijn mail al gecontroleerd wordt naar of de verplichte velden ingevuld zijn. Als ik dan een stukje script erbij wil plakken zoals bijvoorbeeld een Captcha of 'eregi' dan werkt dat door elkaar heen en gaat het fout. Wanneer je dan op 'Verzenden' drukt controleerd ie 2 dingen, hij controleerd via de eregi of het e-mail adres goed is en de andere controle kijkt of alle verplichte velden ingevuld zijn. Het resultaat:

"Ongeldig e-mail adres.Bedankt voor het gebruiken van ons online contact formulier!"

De een zegt dat het mailadres fout is, de ander zegt dat alle velden ingevuld zijn en die verstuurd dus alsnog het mailformulier. Mijn vraag is geen gemakzucht maar ik moet simpelweg nog veel leren op het gebied van PHP.

Dit is mijn volledige script:

PHP:
<?php
// your name
$recipientname = "KAG";

// your email
$recipientemail = "***@hotmail.com";

// subject of the email sent to you
$subject = "Bericht van online contactformulier (kag.nl)";

// send an autoresponse to the user?
$autoresponse = "yes";

// subject of autoresponse
$autosubject = "K.A.G.";

// autoresponse message
$automessage = "Beste $Naam,

Dit is een automatisch gegenereerd bericht om te melden dat wij uw bericht succesvol hebben ontvangen in onze mailbox. 
Wij streven ernaar zo snel mogelijk reactie te geven.

Met vriendelijke groeten,
K.A.G.";

// thankyou displayed after the user clicks "submit"
$thanks = "Bedankt voor het gebruiken van ons online contact formulier!<br>";

?>

<style type="text/css"><!--
td,body,input,textarea {
	font-size:12px;
	font-family:Verdana,Arial,Helvetica,sans-serif;
	color:#000000}
--></style>
</head>
<body bgcolor="fce08b">
<body>

<table width="100%" height="100%"><tr>
<td valign="top"><font face="Verdana,Arial,Helvetica" size="2">

<?php
if($_POST['submitform']) {

$Naam = $HTTP_POST_VARS['Naam'];
$Email = $HTTP_POST_VARS['email'];
$onderwerp = $HTTP_POST_VARS['onderwerp'];
$bericht = $HTTP_POST_VARS['bericht'];
$functie = $HTTP_POST_VARS['functie'];

// check required fields
$dcheck = explode(",",$require);
while(list($check) = each($dcheck)) {
if(!$$dcheck[$check]) {
$error .= "$dcheck[$check]<br>";
}
}

// check email address
if ((!ereg(".+\@.+\..+", $Email)) || (!ereg("^[a-zA-Z0-9_@.-]+$", $Email))){
$error .= "Onbekent e-mail adres<br>";}

// display errors
if($error) {
?>

<b><font color="Darkred"><br><br>Foutje! U bent het volgende vergeten in te vullen:</b><br>
<?php echo $error; ?><br>
<a href="#" onClick="history.go(-1)">Ga terug</a> en probeer het opnieuw.</font>



<?php
}
else 
{

$browser = $HTTP_USER_AGENT;
$ip = $REMOTE_ADDR;

// format message
$message = "Het volgende bericht is verstuurd via het online contact formulier op ***.nl:

Naam: $Naam
E-mail: $Email
Functie: $functie

Onderwerp: $onderwerp

Bericht:

$bericht

-------------Informatie afzender----------------

Browser: $browser
Gebruikers IP: $ip";

// send mail and print success message
mail($recipientemail,"$subject","$message","From: $Name <$Email>");

if($autoresponse == "yes") {
$autosubject = stripslashes($autosubject);
$automessage = stripslashes($automessage);
mail($Email,"$autosubject","$automessage","From: $recipientname <$recipientemail>");
}

echo "$thanks";
}
} 
else {
?>

<form name="contactform" action="<?php echo $PHP_SELF; ?>" method="post">
<input type="hidden" name="require" value="Naam,email,onderwerp,bericht">
<table bgcolor="#D3D3D3" border="1" width="480" align="center"> 
<p>
<tr> 
<td valign="top" align="left" width="30%"> &nbsp;Naam *</td>
<td valign="top" width="70%"><input name="Naam" size="25"></td>
</tr><tr>  
<td valign="top" align="left"> &nbsp;Functie</td>
<td valign="top"><input name="functie" size="25"></td>
</tr><tr> 
<td valign="top" align="left"> &nbsp;E-mail *</td>
<td valign="top"><input name="Email" size="25"></td>
</tr><tr>  
<td valign="top" align="left"> &nbsp;Onderwerp *</td>
<td valign="top"><input name="onderwerp" size="50"></td>
</tr><tr>  
<td valign="top" align="left"> &nbsp;Bericht *</td>
<td valign="top"><TEXTAREA COLS=50 ROWS=10 NAME="bericht" WRAP=VIRTUAL>
</TEXTAREA>
</td>
</tr>
<tr height="30" border="0">


<table border="0" bgcolor="#ADD8E6" width="480" height="60" align="center">
<tr>

<td colspan="2" align="right" border="0"><input type="submit" value="Verzenden" name="submitform"> &nbsp;&nbsp;&nbsp;
<input type="reset" value="Reset" name="reset"> &nbsp;&nbsp;&nbsp;</td>
</tr><tr border="0">
<td border="0"><font face="verdana" size="1">
<i>* Deze velden zijn verplicht in te vullen</i></td></tr></table> </table>
</form>
<?php } ?>
</font><p></td>
</tr></table>

Dit is het stukje code dat ik zou willen verwerken in het script:

PHP:
<?php
function email_validator($email)
{
    $email_host = explode("@", $email);
    $email_host = $email_host[1];
    $email_resolved = gethostbyname($email_host);
    
    if($email_resolved == $email_host)
    {
        $valid = FALSE;
    }

    if (eregi("^[0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\\.[a-z]{2,4}$",$email))
    {
        $valid = TRUE;
    }
    
    else
    {
        $valid = FALSE;
    }
    return $valid;
}

$check_email = email_validator($mail_variabele); 
if ($check_email == FALSE)
{
    echo "Ongeldig e-mail adres.";
}
else
{
    echo "Geldig e-mail adres.";
}
?>

Hopelijk dat jullie mij kunnen helpen!
 
Als je de email_validator($email) functie aanroept vóórdat je de gegevens van je formulier controleert, dan weet je in elk geval of het door een normaal persoon is ingevuld en niet door een spammer. Is de uitkomst daarvan goed, dan kun je de inhoud van het formulier verwerken. Is de inhoud fout, dan geef je bijvoorbeeld een foutmelding en sla je de verwerking van het formulier over.
 
Ongeldig e-mail adres.
Warning: mail() [function.mail]: SMTP server response: 503 Bad sequence of commands. You must specify the recipients of a message before you can send it in c:\domains\kermisadviesgroep.eu\wwwroot\html\contact2.php on line 195
Bedankt voor het gebruiken van ons online contact formulier!


Ik doe waarschijnlijk toch iets fout ondanks dat ik al verschillende mogelijkheden geprobeerd heb.

Hier begint het PHP gedeelte waar de 'checks' gedaan worden:

PHP:
<?php 
if($_POST['submitform']) { 

$Naam = $HTTP_POST_VARS['Naam']; 
$Email = $HTTP_POST_VARS['email']; 
$onderwerp = $HTTP_POST_VARS['onderwerp']; 
$bericht = $HTTP_POST_VARS['bericht']; 
$functie = $HTTP_POST_VARS['functie']; 

// check required fields 
$dcheck = explode(",",$require); 
while(list($check) = each($dcheck)) { 
if(!$$dcheck[$check]) { 

.....

Dus het aanroepen van de functie moet hier aan het begin geplaatst worden? Vervolgens heb ik het gedeelte waarin de mail gecontroleerd wordt vervangen door dat script. Dit werkt dus niet maar ik ben bang dat ik dan weer iets fout doe :o
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan