Dit artikel introduceert een mogelijke oplossing om dit te voorkomen.
Dit artikel is een uitbreiding op het bestaande FAQ onderwerp 'Hoe gebruik ik PHP om data uit een formulier te verzamelen?'
viewtopic.php?t=1370
Dus lees eerst dit artikel voor meer details.
De volgende aanpassingen zijn gedaan aan het bestaande script:
1. Indien het script niet werd geactivateerd door een form-POST, dan wordt een redirect gedaan naar de opgegeven URL. Vervang '/index.html' door de gewenste pagina.
2. De functie 'Valid_Input' controleert of de header velden geen 'injected' code bevatten zoals 'CC:', 'BCC:' enz.
3. De functie 'Valid_Email' controleert het e-mailadres. Het voorkomt email reeksen of andere ongeldige data.
4. Een aantal extra header velden zijn toegevoegd om de kans te verkleinen dat de gegenereerde email door spam-filters wordt aangemerkt als spam.
Het volgende PHP script vervangt de huidige feedback.php code:
Code: Select all
<?php
if ($_SERVER['REQUEST_METHOD'] != 'POST'){
header('Refresh: 0; URL=/index.html');
exit;
}
$mailto = "jenaam@jedomein.com";
$subject = "Feedback formulier";
$message = "Ingevoerde formulier waarden:";
$name = Valid_Input($_POST['name']);
$email = Valid_Email($_POST['email']);
foreach ($_POST as $key => $value){
if (!is_array($value)){
$message .= "\n".$key." : ".$value;
}
else{
foreach ($_POST[$key] as $itemvalue){
$message .= "\n".$key." : ".$itemvalue;
}
}
}
$header = "From: ".$name." <".$email.">\n";
$header .= "Reply-To: ".$email."\n";
$header .= "MIME-Version: 1.0\n";
$header .= "Content-Type: text/plain; charset=utf-8\n";
$header .= "Content-Transfer-Encoding: 8bit\n";
$header .= "X-Mailer: PHP v".phpversion();
mail($mailto, $subject, stripslashes($message), $header) or exit('Fatal Mail Error!');
function Valid_Input($data){
list($data) = preg_split('/\r|\n|%0A|%0D|0x0A|0x0D/i',ltrim($data));
return $data;
}
function Valid_Email($data){
$pattern = '/^([0-9a-z]([-.\w]*[0-9a-z])*@(([0-9a-z])+([-\w]*[0-9a-z])*\.)+[a-z]{2,6})$/i';
if (preg_match($pattern,$data)){
return $data;
}
else{
return $GLOBALS['mailto'];
}
}
?>
Het aangepaste voorbeeld kan hier worden gedowload:
http://www.wysiwygwebbuilder.com/suppor ... secure.zip
Met dank aan Kees voor het insturen van deze oplossing!