Open Source im professionellen Einsatz

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.

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

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.

Abbildung 2: Auch PHPlint bringt eine Benutzeroberfläche auf Tk-Basis mit.

Abbildung 2: Auch PHPlint bringt eine Benutzeroberfläche auf Tk-Basis mit.

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

[http://pear.php.net/package/PHP_CodeSniffer/]

[http://www.icosaedro.it/phplint/index.html]

[http://phpmd.org]

[http://rips-scanner.sourceforge.net]

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.

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)

Diesen Artikel als PDF kaufen

Als digitales Abo

Als PDF im Abo bestellen

comments powered by Disqus

Ausgabe 07/2013

Preis € 6,40

Insecurity Bulletin

Insecurity Bulletin

Im Insecurity Bulletin widmet sich Mark Vogelsberger aktuellen Sicherheitslücken sowie Hintergründen und Security-Grundlagen. mehr...

Linux-Magazin auf Facebook