Input controle (hoe moet het wel)
Gebruik bij het verwerken van het formulier binnen php de onderstaande functies voor ALLE velden die in de header worden opgenomen.
Code (php)
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
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
<?
$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;
}
?>
$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;
}
?>
Merk op: Spammers proberen een formulier op tientalle manieren uit voor ze de strijd opgeven. Wat hier mooi zou zijn, is dat je eerst detecteert of een spammer probeert je formulier te hacken (door de waarden van velden te doorzoeken op headers als 'cc:' en 'bcc:'. Indien deze worden gevonden, zou je ze direct moeten attenderen dat jou formulier 'spamvrij' is (iets voor een keurmerk? :P), hierdoor geven ze eerder op, want uiteindelijk voor iedereen beter is. Ik kom hier nog op terug, want ik ben voor m'n werk al met iets dergelijks bezig (:
Iemand nog toevoegingen?
« vorige pagina | volgende pagina »
Inhoudsopgave
- Waarom deze tutorial?
- Input controle (hoe moet het niet)
- Waar gaat het mis?
- Input controle (hoe moet het wel)
- Hoe kun je dit voorkomen?