Maison > développement back-end > tutoriel php > 7 autres erreurs communément commises par les développeurs PHP

7 autres erreurs communément commises par les développeurs PHP

Lisa Kudrow
Libérer: 2025-02-20 10:25:11
original
923 Les gens l'ont consulté

7 More Mistakes Commonly Made by PHP Developers

7 autres erreurs communément commises par les développeurs PHP

De retour fin juin, Toptal, The Freelance Marketplace, a publié un article sur 10 erreurs les plus courantes commet les programmeurs PHP. La liste n'était pas exhaustive, mais elle a été bien écrite et a souligné que des pièges très intéressants devraient se méfier - même si je ne libère pas personnellement les erreurs comme très courantes.

Je vous encourage à lui donner une lecture approfondie - il a des informations vraiment précieuses que vous devez connaître - en particulier les huit premiers points. Il y a quelques jours, Anna Filina s'est étendue sur la liste avec sept nouvelles entrées. Bien que moins spécifique et commun, ses points ont toujours du poids et doivent être pris en compte lors du développement.

Les plats clés

  • Évitez d'utiliser l'extension MySQL décontenancée pour les bases de données SQL, car elle n'est pas sécurisée, peu fiable et manque de prise en charge des fonctionnalités SSL et MySQL modernes. Au lieu de cela, optez pour des alternatives comme MySQLI ou PDO, qui offrent une meilleure sécurité et plus de fonctionnalités.
  • Évitez de supprimer les erreurs dans votre code en utilisant l'opérateur @. Au lieu de cela, permettez aux erreurs d'être enregistrées et de les aborder en réparant votre code. Cela aide à maintenir l'intégrité de votre application et empêche les problèmes d'être ignorés ou négligés.
  • Soyez prudent de révéler trop d'informations sur votre configuration back-end, surtout si vous utilisez un cadre connu. Cela peut exposer votre application à des attaques potentielles si une vulnérabilité de sécurité dans ce cadre est découverte. N'oubliez pas non plus de supprimer les configurations de développement lorsque vous poussez à la production pour éviter un accès non autorisé.

7 Erreurs supplémentaires Les développeurs PHP font souvent

On m'a demandé par quelqu'un de Toptal de jeter un œil à sa liste et de contribuer potentiellement, et certains de nos abonnés sur les réseaux sociaux ont exprimé leur intérêt à voir la liste se poursuivre également, donc j'aimerais profiter de cette occasion pour Ajoutez quelques-unes de mes propres entrées à cette liste dont j'ai besoin à plusieurs reprises d'avertir les membres de mon équipe ou les abonnés.

1. Utilisation de l'extension MySQL

Cette nouvelle est assez ancienne, mais le nombre de développeurs inconscients du fait est inquiétant. Lorsque vous utilisez des bases de données SQL, en particulier MySQL, beaucoup trop de développeurs optent toujours pour l'extension MySQL. L'extension MySQL est officiellement obsolète. Il n'est pas sûr, peu fiable, ne prend pas en charge SSL et manque certaines fonctionnalités MySQL modernes. Il génère également des avis de dépréciation qui ne cassent pas votre application, ils apparaissent simplement en haut de votre application. Hilarante, ce que cela signifie, c'est qu'il est également possible de simplement Google pour tous les différents sites qui utilisent cette configuration en insécurité en recherchant simplement cela. Le monde de la blessure à ces applications est exposé à cause de ce gâchis est stupéfiant.

Au lieu d'utiliser MySQL, optez pour l'une des alternatives: MySQLI ou PDO. Par exemple, l'utilisation de mysqli est presque aussi simple que d'ajouter la lettre «I» à la fin des appels de l'API:

<span>$c = mysql_connect("host", "user", "pass");
</span><span>mysql_select_db("database");
</span><span>$result = mysql_query("SELECT * FROM posts LIMIT 1");
</span><span>$row = mysql_fetch_assoc($result);</span>
Copier après la connexion

vs

<span>$mysqli = new mysqli("host", "user", "pass", "database");
</span><span>$result = $mysqli->query("SELECT * FROM posts LIMIT 1");
</span><span>$row = $result->fetch_assoc();</span>
Copier après la connexion

C'est tout ce qu'il a fallu pour rendre la configuration incommensurablement plus sécurisée.

Vous devez cependant opter pour PDO. Plus à ce sujet au point 2.

2. N'utilisant pas PDO

Ne vous méprenez pas, MySqli est (littéralement) des générations avant l’ancienne extension MySQL. Il est tenu à jour, sécurisé, fiable et rapide. Cependant, c'est spécifique à MySQL. L'utilisation de l'OPD vous permettrait d'utiliser une syntaxe orientée objet merveilleusement pratique et vous préparerait à Tango avec d'autres bases de données SQL comme PostgreSQL, MS SQL, etc. De plus, PDO vous permettra d'utiliser des paramètres nommés, une fonctionnalité si utile, peu de gens peuvent imaginer aller à tout autre chose après en avoir profité. Enfin et surtout, il y a ceci: vous pouvez injecter des données récupérées directement dans un nouvel objet, qui est un gain de temps délicieux dans de grands projets.

3. Ne pas réécrire des URL

Un autre problème généralement ignoré et facile à résoudre. Les URL comme myapp.com/index.php?p=34&g=24 ne sont tout simplement pas acceptables de nos jours. En raison de son apparition incroyablement difficile d'écrire un bon guide de réécriture d'URL qui couvrirait chaque serveur et cadre, presque tous les frameworks ont un guide sur la façon de configurer des URL propres (Laravel, Phalcon, Symfony, Zend) et tout ce qui ne fait pas. T ne vaut pas la peine d'être utilisés - ils ne se soucient évidemment pas des pratiques modernes.

4. Suppression des erreurs

J'ai écrit à ce sujet dans un article précédent, mais cela vaut la peine d'être mentionné. Chaque fois que vous vous retrouvez à utiliser l'opérateur @, reconsidérez et abordez le problème sous un angle différent plus attentivement. Prenez-vous sur parole lorsque je dis que 20 lignes de code de boucle de chauffeur autour de la fonctionnalité d'une application sont meilleures qu'une seule ligne avec l'opérateur @ devant elle.

J'ai trouvé grâce à l'expérimentation personnelle qu'une bonne approche est celle que je préconise dans le post d'origine - transformez tous vos avis en erreurs fatales. S'assurer que rien est connecté aux journaux d'erreur parce qu'il n'y a littéralement que rien à enregistrer ne vaut mieux que de prétendre que Poop ne frappe pas le ventilateur en tenant @ devant vos yeux.

Nous avons récemment couvert certains modules complémentaires Heroku pour les applications PHP prêtes à la production, et l'une d'entre elles était l'excellent PaperTrail - un module complémentaire qui vous permet de pousser toutes les erreurs de votre application à leur backend pour une recherche, un regroupement et une élimination plus faciles sur; Donc, même si certaines erreurs se produisent, il est préférable de les laisser être enregistrées et de s'en débarrasser en réparant votre code, que de les faire taire et de jouer stupide devant vos utilisateurs.

5. Attribution dans des conditions

Même les développeurs expérimentés ont parfois un glissement du doigt et écrivent si ($ condition = 'value') {au lieu de if ($ condition == 'value') {. Nos mains glisseront, nos claviers n'enregistreront pas la pression, nous finirons par coller à partir d'une autre partie du code où l'affectation s'est réellement produite - cela se produit, et nous ne le découvrons généralement que lorsque nous exécutons l'application.

Il existe plusieurs façons d'éviter complètement ceci:

  1. Utilisez un IDE décent. Tout bon IDE (comme PHPStorm, par exemple) vous avertira des problèmes de «affectation en condition» lorsqu'il les détecte.
  2. Utilisez des «conditions Yoda». Vous les verrez dans de nombreux projets populaires, même les grands frameworks. En inversant la comparaison (comme dans, if ('value' = $ condition) {), les ides plus faibles remarqueront également le problème. Certains considèrent la syntaxe Yoda ennuyeuse et inutile, une bouée de sauvetage où il ne devrait y en avoir pas («être plus prudent avec votre code, bon sang»), mais pour chacun de siens - si cela aide quelqu'un, je suis tout à fait pour cela. Si nous étions tous élitistes, WordPress et Zend Framework n'existeraient pas.
  3. En gardant simplement cela à l'esprit, vous développerez un réflexe pour les yeux pour le vérifier à chaque fois que vous l'écrivez. Tout ce qu'il faut, c'est la pratique, mais cela arrive même aux meilleurs développeurs et c'est là que 1.
6. Être trop transparent

disant que cela pourrait susciter une controverse, mais voici de toute façon. Sauf si vous avez une confiance à 100% dans les développeurs du cadre ou que vous n'utilisez pas les applications critiques de l'entreprise à but haut de gamme, vous devez toujours vous efforcer d'obscurcir vos moyens back-end - et non de diffuser sur le cadre sur lequel votre application est basée Aide à prévenir les attaques, si une vulnérabilité de sécurité de ce cadre est découverte. Par exemple:

Si vous utilisez le traducteur Symfony2 et que vous avez un itinéraire avec une mise à niveau de paramètre {_locale} maintenant! http://t.co/jihxhb8mzt

— Jérémy Derussé (@jderusse) 15 juillet 2014

Dans ce tweet, la connaissance d'un problème grave d'injection de code est diffusée dans le domaine public. C'est génial si vous êtes au travail et que vous pouvez mettre à niveau immédiatement sans les problèmes de DevOps et que l'équipe se blottit en premier, mais pour la plupart des personnes et des entreprises qui utilisent Symfony, ce n'est pas le cas. Même si Symfony peut être mis à niveau via Composer (comme Ryan l'a mentionné dans les commentaires ci-dessous), il faut généralement un certain temps pour obtenir l'approbation dans les grandes équipes avec des environnements à plusieurs niveaux. Tous les sites Web utilisant cette approche de traductrice qui sont déclarées des utilisateurs de Symfony étaient (sont donc exposées à cette vulnérabilité jusqu'à ce qu'elles soient corrigées.

L'utilisation de Symfony dans l'exemple ci-dessus n'était que cela - un exemple. Des situations similaires sont apparues avec d'innombrables autres logiciels au fil des ans. À l'époque où j'utilise encore Zend Framework commercialement, nous avons également eu cela et nous avons subi une attaque en raison de cela. WordPress a eu sa part de gaffes de sécurité et nous savons à quel point un pourcentage de sites Web, ils alimentent. Ces choses se produisent, et parfois, l'open source et la transparence ne sont pas la meilleure approche lorsqu'ils traitent des applications qui portent la majorité de la source de revenus d'une entreprise.

7. Ne pas supprimer les configurations de développement

Dernier point mais non le moindre, la suppression de la configuration de développement doit être mentionnée. Très récemment (et c'est une coïncidence honnête que je mentionne à nouveau Symfony ici), CNET a subi une attaque en raison de ne pas supprimer leur configuration de développement.

uhmmm no: http://t.co/raqis1ycwq #security #symfony

- Marco Pivetta (@ocramius) 15 juillet 2014

CNET, l'un des plus grands sites de nouvelles technologiques au monde, est basé sur Symfony. Symfony, comme vous le savez peut-être, dispose de deux points d'entrée à votre application: app.php et app_dev.php. En pointant votre navigateur vers un, vous obtenez l'environnement de production. En montrant celui avec le suffixe _dev, vous obtenez évidemment la version de développement, qui dispose d'un débogueur, de données sensibles, etc. Que ce soit bon ou mauvais est un sujet de nombreuses discussions (encore une fois, grâce à Ryan pour l'avoir souligné), mais il est indéniable qu'il ouvre certains développeurs plus maladroits à des erreurs telles que celles que CNET souffraient. De plus, toutes les autres URL accessibles lorsque sur APP_DEV seront redirigées vers d'autres URL app_dev. En d'autres termes, ce n'est pas seulement la page d'index qui se lance en mode développement, c'est le site Web entier - dans le cas de CNET, c'est beaucoup d'accès.

Si vous suivez la discussion sur Twitter, cela devient très triste très triste - et ce qui est encore plus triste, c'est que cela aurait pu être évité dans une seconde travail:

  1. Les développeurs auraient pu supprimer app_dev.php des serveurs de production
  2. Les développeurs pourraient avoir des IPS listés blanches autorisées à accéder à app_dev.php, c'est ainsi que cela fonctionne par défaut à moins que vous ne dérangez ces restrictions.

L'une de ces approches aurait complètement empêché tous les problèmes. N'oubliez pas que lorsque vous poussez à la production, assurez-vous que votre configuration de développement est soit entièrement inaccessible, soit accessible uniquement à un ensemble de listes blanches d'IPS.

Conclusion

Que pensez-vous de cette liste? Couvre-t-il les aspects communs ou est-il trop ésotérique? Avez-vous des pièges plus courants que les trois postes au total n'ont pas mentionné? Faites-moi savoir dans les commentaires ci-dessous et nous mettrons à jour le message si vos conseils sont solides!

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal