TGIF (developer version) : keep it stupid simple 5

Posted by Alexandre Heimburger Fri, 26 Sep 2008 08:41:00 GMT

Voila un exemple de code absolument fantastique.

Aucun nom ne sera cité mais le leitmotiv de l’auteur est : "keep it stupid simple". Je vois bien le côté stupide mais qu’est ce qu’il y a de simple la dedans ?

Faisons un jeu :

- comment réduire ce bout de code en 3 lignes ?

- rien ne vous choque sur la structure de la table USERS ?

$password = $_POST['password'];

$sql  = "Select username from USERS";
$q->query($sql);
while($q->next_record())
{
    $chumbawumba = $q->f("username");
}

if ($password == $chumbawumba)
{
    header("Location: index.php?session=".$session); 
}
else 
{
    $errorMsg = "Wrong Password. Please Try again!";
}
Comments

Leave a comment

  1. nico about 1 hour later:

    une seule colonne dans la table users où login == mdp

    proposition en 2 lignes :)

    $q->query(“SELECT username FROM users WHERE username = ‘”.$_POST[‘password’].”’ LIMIT 1”; ($q->numrows() > 0 ? header(“Location: index.php?session=”.$session); : $errorMsg = “Wrong Password. Please Try again!”);

  2. Laurentj about 3 hours later:

    @nico : mauvaise réponse. tu as oublié d’échapper $_POST[‘password’]. Bonjour alors les erreurs possible de syntaxe SQL, ou pire, les problèmes de sécurité type SQL injection.

  3. Arkh about 14 hours later:

    Mais c’est quoi ce blog qui chie dans la semoule si on a pas le js activé ? Bon, reprenons :

    • 1 seul user dans la db : youpi.
    • si en fait il manque des {} : pas de where, vraiment les codeurs OO n’aiment pas du tout SQL
    • si $session est un ID de session : il faudrait peut être utiliser session_regenerate_id histoire de ne pas se faire hijacker
    • si ce n’est pas le cas, et s’il suffit d’aller sur index.php?session=admin pour avoir droit à tout : HKSS, Hack kept stupidly simple.
  4. alheim 3 days later:

    @nico : bien joué mais l’injection SQL peut faire très mal.

    @laurentj : tu proposes quoi d’autre ?

    @Arkh : je comprend pas ton 2eme point

  5. Mère Teresa 4 days later:
    $password = $_POST['password'];
    //utilisation de l'extension Filter (dispo dans le Core de PHP 5, à partir de la 5.2
    
    $sql  = "Select username from USERS";
    // transformer en 
    //SELECT COUNT(*) from USERS where username = ':username' AND password = 'motpasse'
    //verifier si users n'est pas un mot réservé de la DB
     // transformer avec les requêtes préparées, pour éviter les injections
    
Comments