43 votes

Audit d'une base de code PHP

Je suis sur le point de regarder un projet de base de code PHP pour la première fois, et j'aimerais effectuer un semi-formelles de vérification. Parce que je suis nouveau sur le projet, ce ne sera pas seulement me donner une chance d'obtenir le connaissent bien le code, mais aussi de fournir à l'organisation un avis extérieur sur l'état du projet.

Que le PHP est un de mes "secondaire" langues (un je ne pas de manger, de boire et de respirer sur une base quotidienne) j'aimerais avoir quelques commentaires sur la façon de procéder. Plus précisément, je me demandais:

  1. PHP outils pour effectuer une analyse statique, ou d'analyse de couverture de code, ou de générer une structure de données/les diagrammes de classe/les hiérarchies,

  2. Une liste des "odeurs de code" PHP qui devrait soulever un drapeau rouge, y compris l'utilisation et de codification des anti-modèles et obsolètes classes/méthodes, et

  3. Les meilleures pratiques pour faire des audits de code en général.

44voto

Stephen Points 11761

Je n'ai jamais vérifié le code, mais je ne peux penser à quelques odeurs de code qui devrait vous aider sur votre chemin.

  1. La Suppression d'erreur — De php.net:

    PHP supporte un contrôle d'erreur de l'opérateur: le signe arobase (@). Lorsque ajouté à une expression en PHP, tous les messages d'erreur susceptibles d'être générées par cette expression sera ignoré.

    Faites-vous une faveur et effectuez une recherche->dans votre IDE pour le symbole @ et de diviser et conquérir.

  2. Avis d'erreur — dans le même sens que ci-dessus, PHP vous permet de définir votre niveau de rapport d'erreur à l'exécution. De nombreux développeurs de supprimer de simples avertissements et des avis. Vous devez utiliser l' error_reporting() fonction avec un paramètre d' E_ALL ou E_STRICT pour afficher toutes les erreurs PHP: error_reporting(E_STRICT);.

  3. Le mondial de mot-clé — PHP permet aux développeurs de définir des variables globales pour briser la portée de la fonction. La portée est un peu à l'envers en PHP... Si vous créez une variable en dehors d'une fonction, il peut être modifié à l'intérieur de la fonction, si elle a été déclarée à l'intérieur de la fonction globale. Que les odeurs.

  4. Les Fonctions obsolètes — PHP est en proie à des caractéristiques et fonctions, et beaucoup d'entre eux ont été déprécié.

  5. mysql_query() — Si les devs n'avez pas utilisé ou développé une sorte d'abstraction de base de données, vous allez voir un tas de codé en dur requêtes de base de données éparpillées dans la place. Cela devrait probablement être déplacé à l'Odeur de Code #1.

  6. Beaucoup de Méthodes Statiques , peut — être une odeur de code dans n'importe quelle langue, un développeur peut effectivement donner une dimension internationale tout en rendant l'ensemble de ses classes/méthodes statiques. Par Jeremy Walton à la suggestion de recherche pour le mot statique et la Paamayim Nekudotayim opérateur (::).

  7. Chaîne complexe de la Syntaxe et de la Variable d'Analyse — difficile à expliquer sur une pièce de monnaie, découvrez la référence est ici: http://php.net/manual/en/language.types.string.php recherchez la section sur les Variables de l'analyse d'un peu d'écrans vers le bas. Si c'est abusé il peut être un cauchemar à debug et/ou de comprendre.

  8. Les Variables — un autre gros mensonge. Cet article explique la folie des meilleurs. Il suffit de chercher pour les deux signes dollar $$ , afin de déterminer si elles ont succombé à la Seigneur des ténèbres.

  9. include_once() et require_once() — Ces fonctions sont bien, pour être sûr. Ils sont très utiles lors de la création de modèles, et de les séparer de vue de la logique. Ils s'assurer qu'un fichier est inclus qu'une seule fois lorsque les scripts sont analysées. Toutefois, si vous les voyez abondamment utilisé dans la logique métier d' une partie de l'application, c'est un drapeau rouge que le développeur a écrit imbriquée/circulaire comprend, et peuvent ne pas être conscients de ce que les portions de code ont déjà été inclus. Ce n'est pas si mauvais en soi, mais il est certainement une fenêtre sur la compétence au niveau du développeur(s). Enfin, @Phil suggère l'utilisation de chargeurs automatiques au lieu de require_once(). Cet article explique le chargement automatique de façon très détaillée.

  10. Chaîne et Redondant Booléens — beaucoup de mauvais code PHP ressemble if ($is_true == "true"). Cette recherche est facile, et plus difficile à corriger. Autre chose à regarder dehors pour-bien que pas un PHP spécifique de la question--est Redondant booléens: return ($isBad) ? true : false;.

  11. Les Balises courtes — Voici ce que PHP.net a à dire sur les balises courtes:

    À l'aide de balises courtes doivent être évités lors du développement d'applications ou bibliothèques qui sont destinées à des fins de redistribution, ou de déploiement sur les serveurs PHP qui ne sont pas sous votre contrôle, car les balises courtes peuvent pas être pris en charge sur le serveur cible. Pour portable, code redistribuable, assurez-vous de ne pas utiliser les balises courtes.

    ASP les balises de style sont encore pire.

  12. Accidentelle d'Affectation — Plus souvent que pas, vous allez voir cela se produire dans certains non-composante essentielle du code, où il peut dormir et/ou se cachent jusqu'à ce que vous obtenez un résultat inattendu d'un jour: if ($foo = "Some Value"). C'est toujours évaluée true, bien sûr, et était probablement dû à une faute de frappe. Cependant, dans de rares circonstances que vous voulez de test pour l'affectation. Si c'est le cas, vous devriez utiliser des doubles parenthèses pour indiquer l'intention de: if (($foo = $this->bar()))

17voto

mario Points 76989

Pour le flux de l'application, essayez d'obtenir quelque chose hors de votre IDE. Mais aussi vérifier xdebug et kcachegrind appel d'arbres. Pour un inconnu cette application va vous donner trop de détails, mais il vaut la peine d'essayer.

Certains outils vous devriez regarder dans:

Il y a de plus j'y pense, mais n'ont pas de liste. Cependant c'est un peu l'impliquant (programme d'installation). Donc, essayez une ou deux dont le son est le plus utile pour le départ. Après que vous avez épuisé les outils de visualisation de votre IDE.

10voto

CaseySoftware Points 2498

J'ai écrit "Refactoring dans le Monde Réel" pour php|architecte le mois dernier. Vous pouvez obtenir de l'article gratuitement ici:

http://www.phparch.com/magazine/2010-2/october/

Certains outils rapides, vous devriez vous familiariser avec:

  • phploc / PHP Lignes de Code – Évalue la taille et de la structure globale de la base de code;
  • phpcpd / PHP Copier/Coller Détecteur Rapide de l'outil pour évaluer le "copier-coller" pourcentage d'une base de code, et vous donne même des fichiers et des numéros de ligne spécifiques;
  • phpmd / PHP Mess Detector – drapeaux des choses comme un code trop complexe, code inutilisé/paramètres, et les éventuels bugs;
  • phplint / Courir avec "php -l" – vérifie la syntaxe d'un fichier et peut les empêcher de E_Fatals de glisser;
  • CodeSniffer – Comme l'a noté ci-dessus, il détecte norme de codage des infractions.

2voto

Rahly Points 914

Quelle version de php est ce ciblage?

Le reformatage de code peut être trouvé ici

Obsolète fonctions de 5.3.x peut être trouvée ici. Mais vous devriez trouver la version que vous ciblez.

Les principaux PHP questions sont généralement trouvés dans les fonctions sql, pas correctement s'échapper (mysql_real_escape_string) sur les variables qui sont transmis dans la requête. Le summum serait d'utiliser PDO pour interagir avec votre base de données qui gère l'ensemble de vos citant. La seconde est généralement requêtes lentes, et pour cela, vous devez trouver toutes vos questions, et de les analyser pour la vitesse et la sécurité. Combien de séances sont utilisés, s'ils sont? Sont-ils obtenir le mot de passe/informations sur les cc de l' $_REQUEST/$_GET variable, alors qu'ils devraient être à l'aide de $_POST? De façon générale toutefois, la plupart des sites web des audits de sécurité serait de travailler pour cela aussi.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X