[PHP Strlen] Veilig of niet?
Code (php)
Toevoeging op 31/08/2010 20:50:33:
EDIT: Bij } else if($_POST['username']) < 6) {
is het } else if(strlen($_POST['username']) < 6) {
Dus 8 spatie's of 8 punten enz. vind jij acceptabel.
Code (php)
1
2
3
4
5
2
3
4
5
<?php
if(!preg_match('#\A([a-z]*[0-9]){2,}[a-z]*\z#i', $_POST['password'])){
echo $LoginErrors[] = 'Geen geldig wachtwoord ingevoerd';
}
?>
if(!preg_match('#\A([a-z]*[0-9]){2,}[a-z]*\z#i', $_POST['password'])){
echo $LoginErrors[] = 'Geen geldig wachtwoord ingevoerd';
}
?>
trim ook gebruiken.
Code (php)
1
2
3
4
5
2
3
4
5
if(strlen($_POST['username']) > 16 && preg_match('#\A([a-z]*[0-9]){2,}[a-z]*\z#i')) {
echo 'U naam mag maximum 16 karakters bezitten!';
} else if(strlen($_POST['username']) < 6 && preg_match('#\A([a-z]*[0-9]){2,}[a-z]*\z#i') {
echo 'U naam moet minimum 6 Karakters bezitten!';
}
echo 'U naam mag maximum 16 karakters bezitten!';
} else if(strlen($_POST['username']) < 6 && preg_match('#\A([a-z]*[0-9]){2,}[a-z]*\z#i') {
echo 'U naam moet minimum 6 Karakters bezitten!';
}
Toevoeging op 31/08/2010 21:43:49:
Erik Rijk op 31/08/2010 20:55:32:
trim ook gebruiken.
Kun je mij deze functie misschien uitleggen, want ik snap er de ballen van :O
mb_strlen kan wel goed met utf8 omgaan, en zal in dit voorbeeld wel 1 teruggeven.
Ook even iets om aan te denken: strlen() telt het aantal bytes. UTF8 kan voor één karakter meerdere bytes gebruiken, waardoor je het effect hebt dat strlen('é') bijv. 3 terug kan geven. Jelmer rrrr op 31/08/2010 22:23:14:
Ook even iets om aan te denken: strlen() telt het aantal bytes. UTF8 kan voor één karakter meerdere bytes gebruiken, waardoor je het effect hebt dat strlen('é') bijv. 3 terug kan geven. mb_strlen kan wel goed met utf8 omgaan, en zal in dit voorbeeld wel 1 teruggeven.
Yesh.
Ik weet verder ook niet wat strlen() ook al weer deed met een \0. Wat heel veel ook hack gevoellig maakt (escapen als %00 in je post of get)
Raymond: dat script is niet bijzonder interessant. Je kopieert gewoon alle bytes van $str naar $newStr. Wat die bytes betekenen maakt PHP niet zoveel uit. Maar probeer maar eens een waarde voor $x te vinden waarbij $str[$x] == "è".
a\0b ziet als 1 of als 3 bytes. Maar dit bevestig je dus als 3 ;-)