Statische Codeanalyse für PHP
PHP, fusselfrei
Das Linux-Magazin 08/12 stellt freie Tools zur statischen Codeanalyse für C/C++, Java und Python vor. Dieser Artikel beschreibt Werkzeuge für die Web-Skriptsprache PHP.
Das Linux-Magazin 08/12 stellt freie Tools zur statischen Codeanalyse für C/C++, Java und Python vor. Dieser Artikel beschreibt Werkzeuge für die Web-Skriptsprache PHP.
Auch für vorwiegend in Webanwendungen genutzte Sprachen existieren Werkzeuge zur statischen Analyse. Eine kleine Auswahl für die Skriptsprache PHP zeigt Tabelle 1. Zu den bekannteren Tools gehört PHPLint (Abbildung 1). Neben der einfachen Codeanalyse erzeugt es bei Bedarf auch gleich noch aus dem Quellcode die Dokumentation. Zusätzlich darf der Programmierer in den PHP-Skripten speziellen Meta-Code einfügen, der beispielsweise die Typen von Variablen vorgibt. PHPLint kann dadurch einfacher feststellen, ob eine unerlaubte oder problematische Typumwandlung erfolgt. Dieser Meta-Code steht innerhalb von Kommentaren, so dass man ihn auch nachträglich hinzufügen kann, ohne einen normalen PHP-Interpreter zu irritieren.
Abbildung 1: PHPlint protokolliert penibel jedes gefundene Problem und mitunter auch seine Arbeit. Im unteren Teil merkt es sich etwa, dass die Variable "$a" künftig vom Typ Integer ist.
PHPLint selbst ist in der exotischen Programmiersprache M2 geschrieben. Dank eines M2-zu-C-Compilers stellt es der Autor aber auch als C-Variante bereit, die sich auf jeder Distribution übersetzen lassen sollte. PHPLint lässt sich zudem unverbindlich online ausprobieren. Der Anwender gibt entweder seinen eigenen Programmcode ein oder wählt aus der Ausklappliste am oberen Rand ein (fehlerhaftes) Beispiel.
Ebenfalls recht beliebt ist PHP_CodeSniffer. Ihn installiert der PHP-Programmierer rasch per PEAR hinzu, einige Distributionen bringen ihn in auch ihren Repositories mit. PHP_CodeSniffer kann Skripte sogar im Zusammenspiel mit bestimmten "php.ini"-Einstellungen untersuchen. Der Aufruf:
phpcs -d memory_limit=4M test.php
gönnt dem Skript "test.php" bei diesem Prüfgang nur 4 MByte Hauptspeicher. Alle gefundenen Probleme und Fehler landen übersichtlich in einer Tabelle. Auf Wunsch presst sie PHP_CodeSniffer aber auch in andere Formate, etwa XML oder CSV.
| Tabelle 1:Werkzeuge für PHP (Auswahl) |
||||
|---|---|---|---|---|
| Name |
PHP_CodeSniffer |
PHPLint |
PHPMD |
RIPS |
| Typ |
Kommandozeile |
Kommandozeile/GUI |
Kommandozeile |
Web-Anwendung |
| Entwickler |
Greg Sherwood, u.a. |
Umberto Salsi |
Manuel Pichler |
Johannes Dahse |
| Homepage |
||||
| Lizenz |
BSD Lizenz |
Eigene (Open Source) |
Eigene (Open Source) |
|
| Versionsnummer |
1.3.4 (17.05.2012) |
1.1 (vom 02.04.2012) |
1.3.2 (vom 25.02.2012) |
|
| Sprachen |
PHP5, JavaScript, CSS |
PHP 4, PHP 5 |
PHPMD |
|
| Erweiterbar (um eigene Prüfungen) |
Ja |
Nein |
Ja |
|
Ein Äquivalent zu PMD möchte Manuel Pichler mit seinem noch recht jungen PHP Mess Detector, kurz PHPMD schaffen. Dementsprechend verwendet auch PHPMD das Konzept der Regelsätze, was wiederum zu langen Bandwurmbefehlen führt. In den trivialen Testskripten für diesen Artikel monierte die aktuelle PHPMD-Version allerdings nur wenige Probleme.
Während die bislang vorgestellten Werkzeuge meist auf der Kommandozeile arbeiten, liefert RIPS auch etwas fürs Auge. Das Werkzeug ist eine komplett in PHP geschriebene Webanwendung, die der Anwender im Browser aufruft und ihr dann das zu analysierende PHP-Programm übergibt (Abbildung 3). Aus dessen Quellcode erzeugt RIPS ein paar bunte Statistiken und klopft ganz nebenbei auch noch den Code nach Sicherheitslücken ab. Die Ausgaben zu interpretieren ist allerdings nicht einfach. Beispielsweise leuchtet es auf Anhieb nicht ein, warum ein starres
echo "niemals!";
anfällig für Cross-Site-Scripting-Angriffe sein sollte.
Abbildung 3: RIPS ist eine Webanwendung, wobei man die aufpoppenden Fenster per Drag-and-Drop umherschieben darf.
Bei der Suche nach Werkzeugen für PHP stößt man auch immer wieder auf PHPsat. Dieses Programm sucht typische Fehler-Muster in dem ihm übergebenen PHP-Skript. Das Projekt begann Eric Bouwers allerdings schon 2006. Seitdem lässt die erste stabile Version 0.1 auf sich warten. Da sich PHP in dieser Zeit weiterentwickelt hat, sollte man PHPsat nur mit Bedacht einsetzen. (mhu)
Alle Rezensionen aus dem Linux-Magazin
Im Insecurity Bulletin widmet sich Mark Vogelsberger aktuellen Sicherheitslücken sowie Hintergründen und Security-Grundlagen. mehr...