Ik ben op het moment bezig in php een contactformulier te maken. Hier wil ik o.a. gebruik gaan maken van de php functie filter_var().

Op het moment heb ik de volgende velden:
-naam [input type=text]
-achternaam [input type=text]
-email [input type=text]
-onderwerp [dropdown-menu]
-bericht [textarea]

Voordat ik begin zet ik de $_POST variable die ik verwacht om in $naam, $achternaam, etc. Tevens haal ik witruimte aan het begin en eind weg:

<?php
if(!empty($_POST['verstuurd'])) 
{
	$expected = array('naam', 'achternaam', 'email', 'onderwerp', 'bericht');
	foreach ($expected as $value)
	{
		${$value} = trim($_POST[$value]);
		if(empty(${$value}))
		{
			${$value} = NULL;
		}
	}
// rest van de validatie
}
?>


Nu wil ik de naam en de achternaam als volgt gaan controleren:
1. Verboden 'lettercombinaties' verwijderen (ter voorkoming van email injection). Zie de functie 'antiMailInjection()'.
2. Sanitize m.b.v. var_filter($waarde, FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW | FILTER_FLAG_ENCODE_HIGH)
3. Validate dat er geen cijfers worden gebruikt. Of misschien een regex gebruiken en zelf bepalen wat wel/niet mag.
4. Validate de lengte (min. 1, maar vooral belangrijk max. ?? om memory flooding te voorkomen).


<?php
function antiMailInjection($waarde)
{
	$verboden = array('\r', '\n', '%0a', '%0d', 'content-type:', 'bcc:', 'cc:');
	$waarde = str_ireplace($verboden, '', $waarde);
	return $waarde;
}
?>


Mijn vragen tot nu toe (zal er meer toevoegen/editen):
1. Tips/hints etc over de bovenstaande proces?
2. Mijn eerste probleem:

<?php
$inputwaarde = 'âˆ';
$sanitized = filter_var($inputwaarde, FILTER_SANITIZE_STRING, FILTER_FLAG_ENCODE_HIGH);
	
echo 'De sanitized output: '.$sanitized."\n";
?>


Het bovenstaande geeft:
De sanitized output: &#195;&#162;&#203;&#134;

Wanneer je de ASCII HTML nummers omzet in ASCII staat er: âˆ
Terwijl ik het volgende verwacht: &#226;&#136; (= ∠).

Weet iemand waar dit door komt? Wat ik verkeer doe?

3. Ik ben er achtergekomen dat je meer filters kunt toevoegen aan filter_var() door de '|' toe te voegen. Kan iemand mij uitleggen hoe de 'vertical line' werkt in php?

Alvast bedankt!

ps
(Zal het complete script (wanneer deze af is) toevoegen aan de scripts op phphulp).

Reageren