[PHP Strlen] Veilig of niet?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Paco oste

Paco oste

31/08/2010 20:45:46
Quote Anchor link
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?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?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!';
    }

?>


Toevoeging op 31/08/2010 20:50:33:

EDIT: Bij } else if($_POST['username']) < 6) {
is het } else if(strlen($_POST['username']) < 6) {
 
PHP hulp

PHP hulp

06/05/2024 20:38:15
 
- SanThe -

- SanThe -

31/08/2010 20:52:46
Quote Anchor link
Dus 8 spatie's of 8 punten enz. vind jij acceptabel.
 
Paco oste

Paco oste

31/08/2010 20:54:06
Quote Anchor link
xD dit staat er ook nog
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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';
        }

?>
 
Erik Rijk

Erik Rijk

31/08/2010 20:55:32
Quote Anchor link
trim ook gebruiken.
 
Paco oste

Paco oste

31/08/2010 20:55:52
Quote Anchor link
of moet hij zo ?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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!';
        }


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
 
Obelix Idefix

Obelix Idefix

31/08/2010 22:06:48
Quote Anchor link
Die trimfunctie is een apart topic geworden: http://www.phphulp.nl/php/forum/topic/trim-function/72929/last/
 
Jelmer -

Jelmer -

31/08/2010 22:23:14
Quote Anchor link
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.
 
Raymond van Os

raymond van Os

01/09/2010 09:44:28
Quote Anchor link
probeer dit eens.

Quote:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$str
= "string with utf-8 chars åèö - doo-bee doo-bee dooh";
$newStr = "";
for ($i = 0; $i < strlen($str); $i++) {
  $newStr .= $str[$i];
}

?>
 
Niek s

niek s

01/09/2010 13:19:09
Quote Anchor link
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)
 
Jelmer -

Jelmer -

01/09/2010 14:42:55
Quote Anchor link
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] == "è".
 
Niek s

niek s

01/09/2010 15:48:45
Quote Anchor link
Begrijp ik, maar ik twijfelde dus of strlen
a\0b ziet als 1 of als 3 bytes. Maar dit bevestig je dus als 3 ;-)
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.