Bienvenue sur PEBKAC.fr, le site qui recense les anecdotes où l’on se moque des utilisateurs ne maîtrisant pas l’outil informatique. PEBKAC est un acronyme signifiant « Problem Exists Between Keyboard And Chair ».
Le problème se situe entre la chaise et le clavier : soumettez vos histoires, donnez votre avis !
Ce site n'est pas le site original pebkac.fr. Je publie ici la liste des PEBKAC que j'ai pu sauvegarder avant que le site original ne soit mis hors ligne.
Étant plutôt un programmeur qu'un graphiste, vous l'avez surement remarqué, j'ai acheté un joli gabarit (template) HTML pour mon portfolio. Et tandis que je personnalisais les messages de retour sur le formulaire de contact, je suis tombé sur cette portion de PHP :

$postValues = array();
foreach ( $_POST as $name => $value ) {
    $postValues[$name] = trim( $value );
}
extract( $postValues );

Il est fortement déconseillé d'utiliser extract() sur $_POST, on peut dire que ça n'a pas été le cas, pas directement en tout cas, il valait mieux utiliser un tableau inutile entre deux... On aurait pu souhaiter l'utilisation plus avisée d'un array_map(), mais le soucis de sécurité reste ce qui me fait le plus penser à un... PEBKAC.
PEBKAC #7613 proposé par Cartman34 le 20/04/2013 | 12 commentaires | 👍🏽 👎🏽 +81
Tu veux dire qu'il a fait toute cette fonction pour respecter le conseil de ne pas faire directement extract($_post) ?
Commentaire #89754 écrit par Aaargh!!! le 20/04/2013 à 20h38 | 👍🏽 👎🏽
Pas tout à fait, étant donné qu'il trim les valeurs...

Mais bon, tout ça pour dire qu'il n'a absolument pas compris pourquoi il ne faut pas utiliser extract sur des données qu'il ne contrôle pas !
Commentaire #89758 écrit par Acné le 20/04/2013 à 20h53 | 👍🏽 👎🏽
On se croirait revenu au temps de REGISTER_GLOBALS ^^.
Commentaire #89761 écrit par caus909 le 20/04/2013 à 21h36 | 👍🏽 👎🏽
Cette fonction était géniale ! (© Kévin Michu)
Commentaire #89762 écrit par Aaargh!!! le 20/04/2013 à 21h41 | 👍🏽 👎🏽
Oui, mais le danger des données corrompues avant l'envoi reste ? Une fonction maligne peut-elle se faire exécuter ?
Commentaire #89763 écrit par Aaargh!!! le 20/04/2013 à 21h43 | 👍🏽 👎🏽
Une fois on m'avait demandé de corriger un vieux site fait à la base en PHP 3 et qui avait été déployé sur une nouvelle machine avec un register_globals à Off.
J'ai donc dû m'adapter :
 foreach($_GET  as $key => $val) { $$key = $val; }
 foreach($_POST as $key => $val) { $$key = $val; }
 
Commentaire #89768 écrit par juu le 21/04/2013 à 01h15 | 👍🏽 👎🏽
Haha, j'aurai pu poster exactement la même chose :-P
Pour mon cas le site en question n'est plus en ligne, c'est dommage je vous l'aurai bien montré. (La boîte a fermé)
Commentaire #89777 écrit par Clem le 21/04/2013 à 08h02 | 👍🏽 👎🏽
J'invoque Captain Obvious PHP.
Commentaire #89783 écrit par Shirluban le 21/04/2013 à 11h17 | 👍🏽 👎🏽
Il aurait pu faire en une ligne :

extract(array_filter($_POST, trim));

Je sais que c'est pas le problème, mais c'est plus beau comme ça !
Commentaire #89787 écrit par tchouc le 21/04/2013 à 14h06 | 👍🏽 👎🏽
@Aaargh!!! : oui. Trim ne fait que supprimer les espaces aux extrémités, pas le contenu... D'où ma dernière phrase : le danger reste.
Commentaire #89788 écrit par Acné le 21/04/2013 à 14h19 | 👍🏽 👎🏽
Il aurait au moins pu utiliser EXTR_SKIP...
Commentaire #89797 écrit par Rudloff le 21/04/2013 à 20h10 | 👍🏽 👎🏽
Ok, merci pour ces précisions. PEBKAC validée !
Commentaire #89800 écrit par Aaargh!!! le 21/04/2013 à 20h53 | 👍🏽 👎🏽