Release Psalm 3.12, ein statischer Analysator für die Sprache PHP. Alpha-Version PHP 8.0

Vimeo-Unternehmen veröffentlicht neue Ausgabe des statischen Analysewerkzeugs Psalm 3.12, 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 wird verbreitet unterliegt der MIT-Lizenz.

Psalm erkennt die meisten Probleme, die mit der unsachgemäßen Verwendung von Typen verbunden sind, sowie verschiedene typische Fehler. 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, man bereits etwas braucht (ich arbeite mit dem clusterfähigen Proxmox VE 5.x und ZFS über iSCSI). Anmerkungen im Format Docblock („/** @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 das Öffnen eines Links in einem neuen Tab oder in einem neuen Container. 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 wurde 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, Definition entspricht. 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 Beginn Alpha-Tests des neuen PHP 8.0 Zweigs. Der Release ist für den 26. November geplant. In diesem neuen Zweig werden folgende erwartet Neuheiten, wie:

  • Aktivierung des JIT-Compilers, dessen Anwendung die Leistung steigern wird.
  • Bestellen Union-Typen, die Sammlungen aus zwei oder mehr Typen definieren (zum Beispiel „public function foo(Foo|Bar $input): int|float;“).
  • Bestellen Attribute (Anmerkungen), die es ermöglichen, Metadaten (zum Beispiel Typinformationen) an Klassen zu binden, ohne die Syntax von Docblock zu verwenden.
  • Verkürzte Syntax für die Definition von Klassen, die es ermöglicht, die Definition des Konstruktors und der Eigenschaften zu kombinieren.
  • Ein neuer Rückgabetyp — static.
  • Ein neuer Typ — mixed, der verwendet werden kann, um die Annahme von Argumenten mit unterschiedlichen Typen in einer Funktion zu definieren.
  • Ausdruck throw zur Behandlung von Ausnahmen.
  • WeakMap zur Erstellung von Objekten, die bei der Müllabfuhr aufgegeben werden können (zum Beispiel zur Speicherung optionaler Caches).
  • Die Möglichkeit das Ausdruck „::class“ für Objekte zu verwenden (analog zu get_class()).
  • Die Möglichkeit Definitionen in einem catch-Block von Ausnahmen, die nicht an Variablen gebunden sind.
  • Die Möglichkeit das Setzen eines Kommas nach dem letzten Element in der Parameterliste einer Funktion.
  • Ein neuer Schnittstelle Stringable 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 str_contains(), 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 fdiv(), die die Division durchführt, ohne einen Fehler bei der Division durch Null zu erzeugen.
  • Ändert 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.
  • Verschärft die Überprüfung arithmetischer und bitweiser Operationen, zum Beispiel führen die Ausdrücke «[] % [42]» und «$object + 4» zu einem Fehler.
  • Implementiert stabiler Sortieralgorithmus, bei dem die Reihenfolge gleicher Werte bei verschiedenen Durchläufen erhalten bleibt.

Quelle: opennet.ru

60GB SSD 8Gb DDR4