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.
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.
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.
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.
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.
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.
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:
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.
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:
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.
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!