Verëffentlechung vum Psalm 3.12, e statesche Analysator fir d'PHP Sprooch. Alpha Verëffentlechung vu PHP 8.0

Vimeo Company publizéiert nei Verëffentlechung vum statesche Analysator Psalm 3.12, wat Iech erlaabt souwuel offensichtlech wéi subtile Feeler am PHP Code z'identifizéieren, wéi och automatesch e puer Zorte vu Feeler korrigéieren. De System ass gëeegent fir Probleemer z'identifizéieren souwuel am Legacy Code an am Code deen modern Feature benotzt, déi an neie Filialen vu PHP agefouert goufen. De Projet Code ass an PHP geschriwwen an verdeelt duerch ënner der MIT Lizenz.

De Psalm identifizéiert déi meescht vun de Probleemer verbonne mat der falscher Aartverbrauch, souwéi verschidde typesch Feeler. Zum Beispill ënnerstëtzt et Warnungen iwwer Vermëschung vu Variablen vu verschiddenen Typen an engem Ausdrock, falsch logesch Tester (wéi "wann ($a && $a) {}", "wann ($a && !$a) {}" an " wann ($a) {} elseif ($a) {}"), onvollstänneg Initialiséierung vun Objekteigenschaften. Den Analyser leeft am Multi-threaded Modus. Et ass méiglech inkrementell Scans auszeféieren, déi nëmmen Dateien analyséieren déi zënter dem leschte Scan geännert hunn.

Zousätzlech si sécher Programméierungsinstrumenter zur Verfügung gestallt fir z'erméiglechen benotzen Annotatiounen am Format Docblock ("/** @var Type */") fir Informatiounen iwwer Variabeltypen, Retourwäerter, Funktiounsparameter, Objekteigenschaften ze bidden. Typ Notzungsmuster definéieren a Behaaptungsaussoen benotzen gëtt och ënnerstëtzt. Zum Beispill:

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

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

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

Fir d'Eliminatioun vu fonnte Probleemer ze automatiséieren, gëtt de Psalter Utility zur Verfügung gestallt, déi Plugins ënnerstëtzt an et erlaabt gemeinsam Code Probleemer léisen, Typ Annotatiounen addéieren a Manipulatiounen ausféieren wéi Klassen vun engem Nummraum an en anert bewegt, Methoden tëscht Klassen bewegt an Klassen a Methoden ëmbenennen.

An der neier Ausgab vum Psalm ëmgesat d'Optioun "--taint-analysis" erlaabt Iech d'Relatioun tëscht Inputparameteren, déi vum Benotzer kritt goufen (zum Beispill $_GET['Name']) an hir Notzung op Plazen ze verfolgen, déi Charakterentkommen erfuerderen (zum Beispill Echo " $numm "), och duerch Trackingketten vun Zwëschen Uerderen a Funktiounsruffen. D'Benotzung vun assoziativen Arrays $_GET, $_POST an $_COOKIE gëtt als Quelle vu potenziell geféierlechen Donnéeën ugesinn, awer et ass och méiglech Determinatioun vu eegene Quellen. Aktiounen déi Fluchtverfolgung erfuerderen enthalen Ausgangsoperatiounen déi HTML Inhalt generéieren, HTTP Header addéieren oder SQL Ufroen ausféieren.

Validatioun gëtt benotzt wann Dir Funktiounen benotzt wéi Echo, Exec, Inkludéieren an Header. Wann Dir de Bedierfnes fir ze flüchten analyséiert, ginn Datentypen wéi Text, Strings mat SQL, HTML a Shell Code, Strings mat Authentifikatiounsparameter berücksichtegt. De proposéierte Modus erlaabt Iech Schwächen am Code z'identifizéieren, déi zu Cross-Site Scripting (XSS) oder SQL Substitutioun féieren.

Zousätzlech kann et bemierkt ginn Start Alpha-Test vun der neier PHP 8.0 Branche. D'Verëffentlechung ass fir den 26. November geplangt. Déi folgend sinn an der neier Branche erwaart: Innovatiounen, wéi:

  • Dréit op JIT Compiler, de Gebrauch vun deem wäert d'Produktivitéit verbesseren.
  • Ënnerstëtzung Gewerkschaft Zorte, Sammlungen vun zwou oder méi Typen definéieren (zum Beispill "ëffentlech Funktioun foo(Foo|Bar $input): int|float;").
  • Ënnerstëtzung Attributer (Annotatiounen) déi Iech erlaben Metadaten (wéi Typinformatioun) u Klassen ze binden ouni Docblock Syntax ze benotzen.
  • Verkierzt Syntax Klass Definitiounen, erlaabt Iech d'Definitioun vun engem Konstruktor an Eegeschaften ze kombinéieren.
  • Neie Retour Typ - Statesch ass.
  • Neien Typ - gemëscht ginn, déi benotzt ka ginn fir ze bestëmmen ob eng Funktioun Parametere vu verschiddenen Typen acceptéiert.
  • Ausdrock ze geheien Ausnahmen ze handhaben.
  • WeakMap fir Objeten ze kreéieren déi während der Müllsammlung geaffert kënne ginn (zum Beispill fir onnéideg Cache ze späicheren).
  • Geleeënheet benotzt den Ausdrock "::class" fir Objeten (analog zum Opruff get_class ()).
  • Geleeënheet Definitiounen am Fangblock vun Ausnahmen déi net un Variablen gebonnen sinn.
  • Geleeënheet e Komma hannert dem leschten Element an der Lëscht vun de Funktiounsparameter hannerloossen.
  • Neien Interface Stringable fir all Stringtypen oder Daten z'identifizéieren déi an eng String ëmgewandelt kënne ginn (fir déi d'Method __toString () verfügbar ass).
  • Nei Feature str_contains(), e vereinfachte Analog vu strpos fir d'Optriede vun enger Substring ze bestëmmen, souwéi d'Funktiounen str_starts_with() an str_ends_with() fir d'Matcher um Ufank an Enn vun enger String ze kontrolléieren.
  • Zousätzlech Funktioun fdiv(), déi eng Divisiounsoperatioun ausféiert ouni e Feeler ze werfen wann se mat Null deelen.
  • Geännert String verbonne Logik. Zum Beispill, den Ausdrock 'Echo "sum:" . $a + $b' gouf virdru als 'Echo ("Zomm: " . $a) + $b' interpretéiert, an am PHP 8 gëtt als 'Echo "sum: " behandelt. ($a + $b)'.
  • Gestrach iwwerpréift arithmetesch a Bit Operatiounen, zum Beispill, d'Ausdréck "[] % [42]" an "$Objet + 4" wäert zu engem Feeler Resultat.
  • Ëmgesat e stabile Sortimentalgorithmus an deem d'Uerdnung vun identesche Wäerter iwwer verschidde Runen erhale bleift.

Source: opennet.ru

Setzt e Commentaire