Veröffentlichung von Psalm 3.12, einem statischen Analysator für die PHP-Sprache. Alpha-Release von PHP 8.0

Vimeo-Unternehmen опубликовала Neue Version des statischen Analysators Psalm 3.12, mit dem Sie sowohl offensichtliche als auch subtile Fehler im PHP-Code erkennen und einige Arten von Fehlern automatisch korrigieren können. Das System eignet sich zur Identifizierung von Problemen sowohl in Legacy-Code als auch in Code, der moderne Funktionen verwendet, die in neuen PHP-Zweigen eingeführt wurden. Der Projektcode ist in PHP geschrieben und vertrieben von unter der MIT-Lizenz.

Psalm identifiziert die meisten Probleme, die mit der falschen Verwendung von Schriftarten verbunden sind, sowie verschiedene typische Fehler. Es unterstützt beispielsweise Warnungen über das Mischen von Variablen unterschiedlichen Typs in einem Ausdruck, falsche logische Tests (wie „if ($a && $a) {}“, „if ($a && !$a) {}“ und „ if ( $a) {} elseif ($a) {}"), unvollständige Initialisierung der Objekteigenschaften. Der Analysator läuft im Multithread-Modus. Es ist möglich, inkrementelle Scans durchzuführen, bei denen nur Dateien analysiert werden, die seit dem letzten Scan geändert wurden.

Darüber hinaus werden sichere Programmiertools bereitgestellt, um dies zu ermöglichen verwenden Anmerkungen im Format Docblock („/** @var Type */“), um Informationen über Variablentypen, Rückgabewerte, Funktionsparameter und Objekteigenschaften bereitzustellen. Das Definieren von Typverwendungsmustern und die Verwendung von Assert-Anweisungen werden ebenfalls unterstützt. Zum Beispiel:

/** @var string|null */
$a = foo();

/** @var string $a */
echo strpos($a, 'hello');

/** @psalm-assert-if-true B $a */
Funktion isValidB(A $a) : bool {
return $a Instanz von B && $a->isValid();
}

Um die Beseitigung gefundener Probleme zu automatisieren, wird das Dienstprogramm Psalter bereitgestellt, das Plugins und unterstützt ermöglicht Beheben Sie häufige Codeprobleme, fügen Sie Typanmerkungen hinzu und führen Sie Manipulationen durch, z. B. das Verschieben von Klassen von einem Namespace in einen anderen, das Verschieben von Methoden zwischen Klassen und das Umbenennen von Klassen und Methoden.

In der neuen Ausgabe von Psalm umgesetzt Mit der Option „--taint-analysis“ können Sie die Beziehung zwischen vom Benutzer empfangenen Eingabeparametern (z. B. $_GET['name']) und deren Verwendung an Stellen verfolgen, an denen Zeichen-Escapezeichen erforderlich sind (z. B. echo „ $name "), unter anderem durch Verfolgung von Ketten von Zwischenzuweisungen und Funktionsaufrufen. Die Verwendung der assoziativen Arrays $_GET, $_POST und $_COOKIE gilt als Quelle potenziell gefährlicher Daten, ist aber auch möglich Bestimmung Eigene Quellen. Zu den Aktionen, die ein Escape-Tracking erfordern, gehören Ausgabevorgänge, die HTML-Inhalte generieren, HTTP-Header hinzufügen oder SQL-Abfragen ausführen.

Die Validierung wird verwendet, wenn Funktionen wie echo, exec, include und header verwendet werden. Bei der Analyse des Escape-Bedarfs werden Datentypen wie Text, Zeichenfolgen mit SQL-, HTML- und Shell-Code sowie Zeichenfolgen mit Authentifizierungsparametern berücksichtigt. Mit dem vorgeschlagenen Modus können Sie Schwachstellen im Code identifizieren, die zu Cross-Site-Scripting (XSS) oder SQL-Ersetzung führen.

Darüber hinaus kann darauf hingewiesen werden starten Alphatest des neuen PHP 8.0-Zweigs. Die Veröffentlichung ist für den 26. November geplant. Folgendes wird in der neuen Filiale erwartet: InnovationenAs:

  • Включение JIT-Compiler, deren Einsatz die Produktivität verbessern wird.
  • Unterstützen Gewerkschaftstypen, Definieren von Sammlungen von zwei oder mehr Typen (z. B. „public function foo(Foo|Bar $input): int|float;“).
  • Unterstützen Attribute (Annotationen), mit denen Sie Metadaten (z. B. Typinformationen) an Klassen binden können, ohne die Docblock-Syntax zu verwenden.
  • Verkürzte Syntax Klassendefinitionen, die es Ihnen ermöglichen, die Definition eines Konstruktors und Eigenschaften zu kombinieren.
  • Neuer Rückgabetyp - statisch.
  • Neuer Typ - gemischt, mit dem ermittelt werden kann, ob eine Funktion Parameter unterschiedlichen Typs akzeptiert.
  • Ausdruck werfen um Ausnahmen zu behandeln.
  • Schwache Karte um Objekte zu erstellen, die während der Speicherbereinigung geopfert werden können (z. B. um unnötige Caches zu speichern).
  • Gelegenheit Verwendung des Ausdrucks „::class“ für Objekte (analog zum Aufruf von get_class()).
  • Gelegenheit Definitionen im Catch-Block von Ausnahmen, die nicht an Variablen gebunden sind.
  • Gelegenheit Hinterlassen eines Kommas nach dem letzten Element in der Liste der Funktionsparameter.
  • Neue Schnittstelle Aufreihbar um alle Zeichenfolgentypen oder Daten zu identifizieren, die in eine Zeichenfolge konvertiert werden können (für die die Methode __toString() verfügbar ist).
  • Neue Funktion str_contains(), ein vereinfachtes Analogon von strpos zum Bestimmen des Vorkommens eines Teilstrings, sowie die Funktionen str_starts_with() und str_ends_with() zum Überprüfen auf Übereinstimmungen am Anfang und Ende eines Strings.
  • Funktion hinzugefügt fdiv(), das eine Divisionsoperation durchführt, ohne einen Fehler auszulösen, wenn es durch Null dividiert wird.
  • Geändert String-Verbindungslogik. Zum Beispiel der Ausdruck 'echo "sum:" . $a + $b' wurde zuvor als 'echo ("sum: " . $a) + $b' interpretiert und wird in PHP 8 als 'echo "sum: " behandelt. ($a + $b)'.
  • Verschärft Die Prüfung von Arithmetik- und Bitoperationen, beispielsweise der Ausdrücke „[] % [42]“ und „$object + 4“, führt zu einem Fehler.
  • Umgesetzt ein stabiler Sortieralgorithmus, bei dem die Reihenfolge identischer Werte über verschiedene Durchläufe hinweg erhalten bleibt.

Source: opennet.ru

Kommentar hinzufügen