Vimeo-Unternehmen neue Ausgabe des statischen Analysewerkzeugs , das dazu beiträgt, sowohl offensichtliche als auch schwer fassbare Fehler im Code in PHP zu identifizieren und bestimmte Arten von Fehlern automatisch zu beheben. Das System eignet sich zur Identifizierung von Problemen sowohl im veralteten Code als auch in Code, der moderne Funktionen nutzt, die in neuen PHP-Versionen eingeführt wurden. Das Projekt ist in PHP geschrieben und unterliegt der MIT-Lizenz.
Psalm erkennt die meisten Probleme, die mit der unsachgemäßen Verwendung von Typen verbunden sind, sowie verschiedene . Beispielsweise wird die Ausgabe von Warnungen über das Mischen von Variablen mit unterschiedlichen Typen unterstützt, ebenso wie fehlerhafte logische Überprüfungen (wie „if ($a && $a) {}“, „if ($a && !$a) {}“ und „if ($a) {} elseif ($a) {}“), unvollständige Initialisierung von Objektattributen. Der Analysator wird im Multithreading-Modus ausgeführt. Es sind inkrementelle Überprüfungen möglich, bei denen nur die seit der letzten Überprüfung geänderten Dateien analysiert werden.
Zusätzlich werden sichere Programmierwerkzeuge bereitgestellt, die es ermöglichen, Anmerkungen im Format („/** @var Type */“) zur Bereitstellung von Informationen über Typen von Variablen, Rückgabewerten, Funktionsparametern und Objektattributen. Außerdem wird die Definition von Nutzungsmustern für Typen und die Anwendung von Assert-Ausdrücken unterstützt. Zum Beispiel:
/** @var string|null */
$a = foo();
/** @var string $a */
echo strpos($a, 'hello');
/** @psalm-assert-if-true B $a */
function isValidB(A $a) : bool {
return $a instanceof B && $a->isValid();
}
Um die behobenen Probleme zu automatisieren, steht das Werkzeug Psalter zur Verfügung, das Plugins unterstützt und typische Probleme im Code zu beheben, Typanmerkungen hinzuzufügen sowie solche Manipulationen durchzuführen wie das Verschieben von Klassen aus einem Namensraum in einen anderen, das Verschieben von Methoden zwischen Klassen und das Umbenennen von Klassen und Methoden.
In der neuen Ausgabe von Psalm Die Option „—taint-analysis“, die es ermöglicht, die Verbindung zwischen den vom Benutzer eingegebenen Eingabeparametern (z. B. $_GET[‘name’]) und deren Verwendung an Orten, die eine Zeichenescapierung erfordern, nachzuvollziehen (z. B. echo „<h1>$name</h1>“), einschließlich der Verfolgung von Ketten von Zwischenzuweisungen und Funktionsaufrufen. Als Quellen potenziell gefährlicher Daten gelten die Verwendung von assoziativen Arrays wie $_GET, $_POST und $_COOKIE, aber es ist auch möglich, eigenen Quellcodes. Bei Aktionen, die eine Überwachung der Escapierung erfordern, werden Ausgabeoperationen betrachtet, die zur Erstellung von Inhalten im HTML-Format führen, HTTP-Header hinzufügen oder SQL-Abfragen ausführen.
Die Prüfung erfolgt bei der Verwendung von Funktionen wie echo, exec, include und header. Bei der Analyse der Notwendigkeit von Escaping werden Datentypen wie Text, SQL-Strings, HTML und Shell-Code sowie Strings mit Authentifizierungsparametern berücksichtigt. Der vorgeschlagene Modus ermöglicht es, Sicherheitsanfälligkeiten im Code zu identifizieren, die zu Cross-Site-Scripting (XSS) oder SQL-Injection führen können.
Zusätzlich kann vermerkt werden Alpha-Tests des neuen PHP 8.0 Zweigs. Der Release ist für den 26. November geplant. In diesem neuen Zweig werden folgende erwartet , wie:
- , dessen Anwendung die Leistung steigern wird.
- Bestellen , die Sammlungen aus zwei oder mehr Typen definieren (zum Beispiel „public function foo(Foo|Bar $input): int|float;“).
- Bestellen (Anmerkungen), die es ermöglichen, Metadaten (zum Beispiel Typinformationen) an Klassen zu binden, ohne die Syntax von Docblock zu verwenden.
- für die Definition von Klassen, die es ermöglicht, die Definition des Konstruktors und der Eigenschaften zu kombinieren.
- Ein neuer Rückgabetyp — .
- Ein neuer Typ — , der verwendet werden kann, um die Annahme von Argumenten mit unterschiedlichen Typen in einer Funktion zu definieren.
- Ausdruck zur Behandlung von Ausnahmen.
- zur Erstellung von Objekten, die bei der Müllabfuhr aufgegeben werden können (zum Beispiel zur Speicherung optionaler Caches).
- das Ausdruck „::class“ für Objekte zu verwenden (analog zu get_class()).
- Definitionen in einem catch-Block von Ausnahmen, die nicht an Variablen gebunden sind.
- das Setzen eines Kommas nach dem letzten Element in der Parameterliste einer Funktion.
- Ein neuer Schnittstelle zur Identifizierung beliebiger String-Typen oder Daten, die in eine Zeichenkette umgewandelt werden können (für die die Methode __toString() verfügbar ist).
- Eine neue Funktion , ein vereinfachter Analog zu strpos zur Bestimmung des Auftretens eines Teilstrings sowie die Funktionen str_starts_with() und str_ends_with() zur Überprüfung von Übereinstimmungen am Anfang und Ende der Zeichenfolge.
- Eine Funktion wurde hinzugefügt , die die Division durchführt, ohne einen Fehler bei der Division durch Null zu erzeugen.
- die Logik der Zeichenkettenverknüpfung. Zum Beispiel wurde der Ausdruck ‘echo «sum: » . $a + $b’ zuvor als ‘echo («sum: » . $a) + $b’ interpretiert, während er in PHP 8 als ‘echo «sum: » . ($a + $b)’ verarbeitet wird.
- die Überprüfung arithmetischer und bitweiser Operationen, zum Beispiel führen die Ausdrücke «[] % [42]» und «$object + 4» zu einem Fehler.
- stabiler Sortieralgorithmus, bei dem die Reihenfolge gleicher Werte bei verschiedenen Durchläufen erhalten bleibt.
Quelle: opennet.ru
