Hallo,

Zou iemand mij kunnen helpen om onderstaand script spamsafe te krijgen? Ik heb natuurlijk al wel op de site gekeken naar de spam vrij contact formulier, maar ik weet niet waar ik die tussen moet voegen.

<?php
// Vul hier uw eigen e-mail adres in.
$ontvanger = "[email protected]";
// Deze code haalt de informatie uit het formulier.
$naam = $_POST['naam'];
$email = $_POST['email'];
$onderwerp = $_POST['onderwerp'];
$bericht = $_POST['bericht'];
// Dit is voor het e-mail programma dat je kunt zie van wie de mail afkomstig is en dat
// je kunt re- playen op de mail.
$verzender = "From: ".$naam." <".$email.">";
// Dit stukje code verzend het script
mail($ontvanger,$onderwerp,$bericht,$verzender);
// Vul je de link in.
$link = "index.html";
// Dit redirect je naar een andere pagina.
echo "<meta http-equiv='refresh' content='0; url=$link'>";
?>

En de juiste oplossing, maar waar hoortie? Ik zou je erg dankbaar zijn om mij te leren op welke plek ik het moet tussenvoegen!

<?
$name = stripslashes($_POST["name"]);
$email = stripslashes($_POST["email"]);

if(isEmail($email)) // Merk op dat een 'goed' emailadres zowiezo nooit een [enter] of quote kan bevatten
{
$header = "From: \"" . protectMailHeaders($name) . "\" <" . $email . ">";
}
else // Fout afhandelen
{
exit("Ongeldig emailadres");
}

function protectMailHeaders($string)
{
$string = str_replace("\n", "", $string); // Verwijder \n
$string = str_replace("\r", "", $string); // Verwijder \r
$string = str_replace("\"", "\\\"", str_replace("\\", "\\\\", $string)); // Slashes van quotes

return $string;
}

function isEmail($string)
{
$result = false;

if($string != "")
{
$expr = "/^([a-zA-Z0-9]){1,}(([a-zA-Z0-9\-_])|(([\.]){1,1}
-opmaakbreak-
([a-zA-Z0-9]){1,})){0,}([@]){1,1}([a-zA-Z0-9]){1,}
-opmaakbreak-
(([a-zA-Z0-9\-_])|(([\.]){1,1}([a-zA-Z0-9]){1,})){0,}
-opmaakbreak-
([\.]){1,1}([a-zA-Z0-9]){2,4}$/";
if(preg_match($expr, $string)) // voldoet aan expressie
{
$result = true;
}
}

return $result;
}

?>
Mocht je meer willen weten over e-mail injection en wat er tegen te doen is, bekijk dan eens deze pagina
Ziet er duidelijk uit. In dat verhaal komen ze met:

This is one suggested way that you could use it in a PHP mail() script:

if (preg_match(' /[\r\n,;\'"]/ ', $_POST['email'])) {
exit('Invalid email address');
}
else {
//code to send the mail
}


Is dat sluitend? en waar zou dat in de php-code moeten?

<?php
// Vul hier uw eigen e-mail adres in.
$ontvanger = "[email protected]";
// Deze code haalt de informatie uit het formulier.
$naam = $_POST['naam'];
$email = $_POST['email'];
$onderwerp = $_POST['onderwerp'];
$bericht = $_POST['bericht'];
// Dit is voor het e-mail programma dat je kunt zie van wie de mail afkomstig is en dat
// je kunt re- playen op de mail.
$verzender = "From: ".$naam." <".$email.">";
// Dit stukje code verzend het script
mail($ontvanger,$onderwerp,$bericht,$verzender);
// Vul je de link in.
$link = "index.html";
// Dit redirect je naar een andere pagina.
echo "<meta http-equiv='refresh' content='0; url
Zoiets?

<?php
// Vul hier uw eigen e-mail adres in.
$ontvanger = "[email protected]";
// Deze code haalt de informatie uit het formulier.
$naam = $_POST['naam'];

if (preg_match(' /[\r\n,;\'"]/ ', $_POST['email'])) {
exit('Invalid email address');
} else {
//code to send the mail
$email = $_POST['email'];
}



$onderwerp = $_POST['onderwerp'];
$bericht = $_POST['bericht'];
// Dit is voor het e-mail programma dat je kunt zie van wie de mail afkomstig is en dat
// je kunt re- playen op de mail.
$verzender = "From: " . $naam . " <" . $email . ">";
// Dit stukje code verzend het script
mail($ontvanger, $onderwerp, $bericht, $verzender);
// Vul je de link in.
$link = "index.html";
?>
Handig want ik loop hier ook al een tijdje mee te stoeien en weet nie hoe op te lossen :)
BEDANKT!!!
vergeet niet je fifth parameter

,'-f'.$returnadres)
Die spammers zijn niet voor 1 gat te vangen...

Ik heb de php-code even bekeken, en zo te zien kan het veld 'email' niet meer misbruikt worden. De injectie kan echter ook d.m.v. het veld 'onderwerp' gedaan worden. Blijkbaar wordt dat veld ook gebruikt, want kort na je testmailtjes zijn er nog een aantal spam-mailtjes verstuurd.

Iemand een idee over hoe dat te voorkomen zou zijn?


wes schreef op 23.02.2006 13:08
vergeet niet je fifth parameter

,'-f'.$returnadres)


Hoe en waar zet ik dit erin?


lissy schreef op 23.02.2006 14:19
[quote=wes schreef op 23.02.2006 13:08]vergeet niet je fifth parameter

,'-f'.$returnadres)


Hoe en waar zet ik dit erin?


[/quote]
ik denk in mail() ;)
Ohh OK dus zoiets:

<?php
mail ($To, $Subject, $Mail, $Verzender, $Headers, '-f'.$returnadres);
?>

Ik heb alleen geen $returnadres maar ik heb dit:
<?php
$Verzender = "Verzonden door: " . $_POST['Naam'] . " <" . $_POST['Email'] . ">";
?>

Wat doe ik dan?
Blijven we nog wel zitten met deze:

De injectie kan echter ook d.m.v. het veld 'onderwerp' gedaan worden.

Reageren