Scriptorama.nl

Header image showing a keyboard, mouse, laptop and books on design patterns

Regular expressions als validatie

Vele mensen gebruiken de functie ereg() of preg_match() om een stukje validatie te doen in hun formulieren. Die intentie is erg goed, maar je moet ook met ereg() goed oppassen dat je alles wel goed doet. Het is namelijk niet altijd even veilig.

Ik kom dit voornamelijk tegen in de forums van PHPFreakz.nl, bijvoorbeeld. Mensen proberen wel te valideren maar laten dan op het laatste moment dan toch een steekje vallen. Want het verschil tussen:

PHP:
  1. if (eregi("[a-z0-9_.-]+@[a-z0-9_-]+\.[a-z]{2,6}", $_GET['email'])) {
  2.    echo "Het is veilig: {$_GET['email']}"; // ja, niet dus.
  3. } else {
  4.    echo "Donder es op met je nep email!";
  5. }

en

PHP:
  1. /* We gebruiken nu de ^ en $ anchors om aan te geven dat deze
  2.     string alleen uit dit patroon mag bestaan */
  3.  
  4. if (eregi('^[a-z0-9_.-]+@[a-z0-9_-]+\.[a-z]{2,6}$', $_GET['email'])) {
  5.    echo "Het is veilig: {$_GET[’email’]}";
  6. } else {
  7.    echo "Donder es op met je nep email!";
  8. }

is namelijk ook het verschil tussen:

xss1.png

 

en

noxss.png

 

Buiten het feit dat je $_GET en $_POST data sowieso niet zomaar moet weergeven zonder de juiste beveiligingen, moet je ook goed controleren of je met ereg(), eregi() en ook met preg_match() wel de hele string matched, dus!

Update 9/4/2007: Gebruik je preg_match() voor je validaties? Gebruik dan altijd de D-modifier in je patroon. Meer informatie vind je in: Quick tip: waarden controlen met preg_match() in PHP.

Reageer ook!

Ik gebruik altijd deze:

preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/", $_POST['email'])

Ja dit is weer een hele goeie...
Door virus die via mijn ftp-prog mijn webruimte had vervuild ben ik erg geinteresseerd in dit soort dingen! Maar hoe meer ik lees... Ik val van de ene verbazing in de andere! Bedankt voor jullie goede werk!

[...] Lees hier waarom het belangrijk is voor de veiligheid van jouw website om deze anchors goed te gebruiken. [...]

Leave a comment
Line and paragraph breaks automatic, e-mail address never displayed, HTML allowed: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>