J'avais un TP noté de PHP l'autre jour, l'occasion pour moi de découvrir les classes en PHP5, ce que je n'avais jamais vu. En effet, j'utilise très peu php, préférant le Python pour INL ou le HTML statique pour mon usage personnel.
Cela dit, j'ai redécouvert à quel point le PHP est un langage de merde.
En effet, pendant le développement de mon application web j'ai constaté que PHP échappait tout seul les chaînes récupérées par POST. Comportement de merde servant à contrer les attaques classiques de SQL injection ou autre, je suppose.
Malheureusement ça ne s'arrête pas là. En plus de ça, ce comportement est définissable dans la configuration de PHP ! Cela signifie que d'un serveur Apache à un autre le comportement peut différer !
En bref, je peux avouer que j'étais sur le cul, et me suis retrouvé contraint d'écrire la fonction suivante que j'appelle pour chaque chaîne récupérée via $_POST :
/* PHP REALLY SUCKS DICKS IN HELL */ function mystrip($string) { if(get_magic_quotes_gpc()) return stripslashes($string); else return $string; }
Ce qui est débile, c'est que maintenant il faut appeler une autre fonction pour échapper les chaînes de caractères que je veux inclure dans une requête vers ma base mySQL. On strip pour rééchapper...
Détail amusant, la fonction à appeler n'est pas mysql_escape_string comme on pouvait s'y attendre, mais mysql_real_escape_string. En effet, on imagine que la première fonction n'échappe pas vraiment les chaînes, bien sûr, c'est probablement un petit jeu pour rendre le dev PHP encore plus frustrant.
J'en profite pour rajouter une petite anecdote. Le TP noté était en fait la réalisation d'un blog avec diverses fonctions, je ne vais pas détailler, j'ai trouvé le sujet intéressant (pour changer), et comme je l'ai dis plus haut ça m'a permis d'apprendre des trucs (plus ou moins agaçants);
Le rendu devait être accompagné d'un dump de la base SQL, et comme le formateur est un garçon charmant qui a entre autres organisé un concours au sein de l'école pour faire gagner des goodies récupérés aux TechDays (un sac Microsoft, une démo de Visual Studio 2008 et SQL Server 2008, super trop cool quoi) avec des questions "geeks" (sic) dont "Quel est le nom de la femme de Bill Gates", "Où se se situe geographiquement le siège de Microsoft" et "Quel est le meilleurs blog sur les technologies Microsoft" (la réponse à la dernière question est le blog de cette personne), j'ai donc décidé de mettre en premier billet l'excellent article de pankkake concernant la fin de l'empire Microsoft.
J'ai du mal à comprendre qu'on puisse être fanboy Microsoft. Je n'aime pas spécialement plus les fanboys Linux ou Apple (et y en a un certain nombres), mais eux ont la légitimité d'avoir un "combat" contre "la grosse méchante boite qui fait du fric car l'argent c'est mal". C'est quelque chose d'éthique.
Au contraire, fanboy Microsoft implique de kiffer grave des logiciels de piètre qualité, ce dont on se rends compte facilement quand on connaît un minimum le domaine, ce qui j'espère est le cas pour quelqu'un étant formateur dans une école d'informatique.
Le PHP a ses bon côtés (mais ils sont de moins en moins significatifs au vu des librairies concurrentes qui rendent les autres langages tout à fait adaptés au développement web). Je pense que tous les développeurs PHP détestent et aiment à la fois PHP.
Mais cette pseudo-protection est finalement une mauvaise idée : elle est pénible pour le programmeur et fait croire qu’on est protégé alors que non. On peut toujours, par exemple, injecter des chaînes de caractère dans une requête SQL avec la notation en hexadécimal (ex: 0x48656c6c6f pour « Hello »).
PHP a d’autres défauts de conceptions comme la gestion des références et le typage faible (conversion implicite à tous les étages). Exemple de code valide : « $foo = null; echo $foo->bar->foobar; ». Programmer en PHP sans activer TOUS les avertissements réserve quelques (mauvaises) surprises. Après on s’étonne que le code PHP4 ne passe plus en PHP5 :-)
PS: Tiens, magic quotes va disparaitre dans PHP6…
je dis ca, je dis rien (a)
je pense que c’est ton formateur….
Bonne chance pour les dommages et intérêts :p
Fred : VDM addict
Essaies-tu de t’attirer encore plus d’ennuis ?
En tous cas j’admire le courage que vous avez.
Pour ce qui est du PHP, c’est une espèce de BASIC façon C/C++. Un assemblage de trucs qui marchent ensemble, sans réelle cohérence. Mais ça marche. Concernant les échappements, ils se sont construits comme le langage : de manière empirique. Pour ce qui est des échappements MySQL, ils ne sont pas spécifiques au PHP, mais à MySQL.
malheureusement, c’est un comportement qui n’est pas modifiable à l’exécution avec la fonction ini_set. Ca peut etre contraignant si t’as pas la main sur le serveur http ou si la fonction citée précédemment n’est pas disponible.
De la à dire que PHP c’est de la merde, c’est un peu rapide, non ? Meme si le développement du langage a été anarchique (manque de lignes directrices au niveau des fonctionnalités à implémenter, pas de convention de nommage des fonctions, etc.), il y’a des cotés positifs à utiliser PHP que tu retrouves pas ailleur : il suffit de regarder les frameworks, les applications, les classes – open source – disponibles et la facilité de déploiement d’une application.