Hallo, ik ben bezig aan mijn login systeem ik gebruik op het moment het scriptje van niels, om er wat uit te leren en wat uit te breiden met mijn eigen functie's maar nu vraag ik mij aff of dit veilig is of niet?
<?php
//Controleerd of er meer dan 16 Letters
//Of minder dan 6 Letters!
if(strlen($_POST['username']) > 16) {
echo 'U naam mag maximum 16 karakters bezitten!';
} else if($_POST['username']) < 6) {
echo 'U naam moet minimum 6 Karakters bezitten!';
}
?>
[size=xsmall]Toevoeging op 31/08/2010 20:50:33:[/size]
EDIT: Bij } else if($_POST['username']) < 6) {
is het } else if(strlen($_POST['username']) < 6) {
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. [php]mb_strlen[/php] 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. [php]mb_strlen[/php] 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)
strlen ziet \0 gewoon als een byte, dus strlen("\0") levert 1 op. Volgens mij begint het feestje zodra je functies die gebruik maken van C-functies gaat proberen. file_exists() en include() zullen bijv. ophouden met lezen van de bestandsnaam bij de eerste nullbyte.
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] == "è".