Klaus: Guter Code-Analysator

Beitrag lesen

Hallo,

ich suche ein gutes Tool, um PHP Code auf Fehler zu überprüfen.

Auf Denkfehler. Und da Computer nicht denken können, kann es so ein Tool nicht geben.

Klar, das wollte ich auch nicht.
Aber es gibt Fehler, die eine Maschine relativ leicht ermitteln könnte, was aber einem Menschen unter 1000 Zeilen Code nicht auffällt.

Mit der Code-Analyse von Zend bin ich nicht zufrieden, denn:

Du hast schräge Erwartungen.

$erg = mysql_query("SELECT * FROM tb");
while($row = $erg) { } //Bug: Zuweisung in Bedingung

Das ist absolut so gewollt, würde ich meinen. Zuweisungen in while-Bedingungen sind jedenfalls häufiger, als du glaubst, und sie gehören dort auch absolut hin.

Es ist aber sehr nervig, wenn man evt. 10 bis 20 MySQL-Abfragen in einem Script hat.
Außerdem erkennt es keine Variablen die per Include geladen werden.

Bps:
<?php
include("db_verbindung.inc.php");
mysql_query("DELETE FROM tb",$verbindung);
?>

Da $verbindung in dem Script nicht deklariert wurde, aber in db_verbindung.inc.php, erhält man bei jedem MySQL-Query eine Meldung. Und wenn man viel mit ausgelagerten Variablen/Konstanten arbeitet, z.B. auf Grund von Sprach-Dateien (Pharsen), kann man so schon mal an die 30 Meldungen und mehr Fehler für "nicht deklarierte Variablen" erhalten.
Auch weil er dann nicht nur 1 Msg. ausgibt, sondern für jeden Zugriff auf die Variable einen neue Meldung.
Hat man aber eine Variable wirklich gar nicht deklariert, würde das kaum noch auffallen.

//Und vor allem:
if($_GET['pw'] == "geheim")
   $log = 1;

if($log == 1)
   echo "Geheimer Bereich";

Dagegen, dass du deine Variablen nicht ordentlich und immer initialisierst, kann ein Programm kaum was unternehmen, aber PHP würde sich zumindest mit einer Notice melden, wenn man ohne gültiges Passwort versucht, das Skript ablaufen zu lassen, weil $log dann benutzt wird, ohne definiert zu sein. Und wenn das keine Alarmglocken klingeln läßt, ist dir nicht zu helfen.

Natürlich, aber wie gesagt, bei vielen Zeilen Code kann soetwas (oder) ähnliches schon mal vorkommen.
Zwar nicht in dem Ausmaß, aber dies ist ja auch oft ein Grund für XSS.
Und das Notice erhält man auch nicht immer:
Bsp:
<?php
if(!isset($db_verbindung))
  $fehler = "Keine Verbindung zur DB";

//Paar weitere Zeilen Code
echo $fehler;
?>

Dort wäre ja mit register_globals = On eine XSS-Attacke möglich.

Dies wird nicht als Bug erkannt, obwohl man in den geheimen Bereich gelangen kann, wenn register globals auf Off steht.

Man kann nur in den geheimen Bereich, wenn register_globals auf on steht und man weiß, dass die Variable, die man beeinflussen muß, $log heißt.

Ich meinte ja ON ;)

Wie gesagt: Das, was du willst, ist ein Intelligenzprogramm, und künstliche Intelligenz gibts noch nicht.

Naja KI braucht man nicht dafür.
Logikfehler kann es nicht erkennen, aber manche Sachen sind auch für eine Maschine sofort erkennbar.

Grüße
Klaus