


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>
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>
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:
- 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.
- 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.
- 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.
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:
- Les développeurs auraient pu supprimer app_dev.php des serveurs de production
- 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!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Alipay Php ...

JWT est une norme ouverte basée sur JSON, utilisée pour transmettre en toute sécurité des informations entre les parties, principalement pour l'authentification de l'identité et l'échange d'informations. 1. JWT se compose de trois parties: en-tête, charge utile et signature. 2. Le principe de travail de JWT comprend trois étapes: la génération de JWT, la vérification de la charge utile JWT et l'analyse. 3. Lorsque vous utilisez JWT pour l'authentification en PHP, JWT peut être généré et vérifié, et les informations sur le rôle et l'autorisation des utilisateurs peuvent être incluses dans l'utilisation avancée. 4. Les erreurs courantes incluent une défaillance de vérification de signature, l'expiration des jetons et la charge utile surdimensionnée. Les compétences de débogage incluent l'utilisation des outils de débogage et de l'exploitation forestière. 5. L'optimisation des performances et les meilleures pratiques incluent l'utilisation des algorithmes de signature appropriés, la définition des périodes de validité raisonnablement,

Le détournement de la session peut être réalisé via les étapes suivantes: 1. Obtenez l'ID de session, 2. Utilisez l'ID de session, 3. Gardez la session active. Les méthodes pour empêcher le détournement de la session en PHP incluent: 1. Utilisez la fonction Session_RegeReate_id () pour régénérer l'ID de session, 2. Stocker les données de session via la base de données, 3. Assurez-vous que toutes les données de session sont transmises via HTTPS.

La fonction d'énumération dans PHP8.1 améliore la clarté et la sécurité du type du code en définissant les constantes nommées. 1) Les énumérations peuvent être des entiers, des chaînes ou des objets, améliorant la lisibilité du code et la sécurité des types. 2) L'énumération est basée sur la classe et prend en charge des fonctionnalités orientées objet telles que la traversée et la réflexion. 3) L'énumération peut être utilisée pour la comparaison et l'attribution pour assurer la sécurité du type. 4) L'énumération prend en charge l'ajout de méthodes pour implémenter une logique complexe. 5) La vérification stricte et la gestion des erreurs peuvent éviter les erreurs courantes. 6) L'énumération réduit la valeur magique et améliore la maintenabilité, mais prêtez attention à l'optimisation des performances.

L'application du principe solide dans le développement de PHP comprend: 1. Principe de responsabilité unique (SRP): Chaque classe n'est responsable d'une seule fonction. 2. Principe ouvert et ferme (OCP): les changements sont réalisés par extension plutôt que par modification. 3. Principe de substitution de Lisch (LSP): les sous-classes peuvent remplacer les classes de base sans affecter la précision du programme. 4. Principe d'isolement d'interface (ISP): utilisez des interfaces à grain fin pour éviter les dépendances et les méthodes inutilisées. 5. Principe d'inversion de dépendance (DIP): les modules élevés et de bas niveau reposent sur l'abstraction et sont mis en œuvre par injection de dépendance.

Comment déboguer le mode CLI dans phpstorm? Lors du développement avec PHPStorm, nous devons parfois déboguer PHP en mode interface de ligne de commande (CLI) ...

Envoyant des données JSON à l'aide de la bibliothèque Curl de PHP dans le développement de PHP, il est souvent nécessaire d'interagir avec les API externes. L'une des façons courantes consiste à utiliser la bibliothèque Curl pour envoyer le post� ...

Liaison statique (statique: :) implémente la liaison statique tardive (LSB) dans PHP, permettant à des classes d'appel d'être référencées dans des contextes statiques plutôt que de définir des classes. 1) Le processus d'analyse est effectué au moment de l'exécution, 2) Recherchez la classe d'appel dans la relation de succession, 3) il peut apporter des frais généraux de performance.
