Lansarea Psalm 3.12, un analizator static pentru limbajul PHP. Lansare Alpha PHP 8.0

Compania Vimeo a publicat noua versiune a analizatorului static Psalm 3.12, care permite identificarea atât a erorilor evidente, cât și a celor greu de detectat în codul PHP, precum și corectarea automată a unor tipuri de erori. Sistemul este potrivit pentru identificarea problemelor atât în codul mai vechi, cât și în cel care utilizează caracteristici moderne introduse în noile ramuri PHP. Codul proiectului este scris în PHP și se răspândește sub licența MIT.

Psalm identifică cea mai mare parte a problemelor legate de utilizarea necorespunzătoare a tipurilor, precum și diverse erori tipice. De exemplu, suportă emiterea de avertizări cu privire la amestecarea variabilelor de tipuri diferite în expresii, verificări logice necorespunzătoare (cum ar fi „if ($a && $a) {}”, „if ($a && !$a) {}” și „if ($a) {} elseif ($a) {}”), inițializări incomplete ale proprietăților obiectelor. Analizatorul rulează în modul multi-threading. Este posibilă efectuarea de verificări incrementale, în care sunt analizate doar fișierele modificate de la ultima verificare.

În plus, sunt furnizate instrumente pentru programarea sigură, care permit folosi anotații în format Docblock („/** @var Type */”) pentru a furniza informații despre tipurile variabilelor, valorile returnate, parametrii funcțiilor, proprietățile obiectelor. De asemenea, este acceptată definirea șabloanelor de utilizare a tipurilor și aplicarea expresiilor de asertare. De exemplu:

/** @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();
}

Pentru automatizarea soluționării problemelor identificate, este disponibil utilitarul Psalter, care suportă plugin-uri și permite soluționează probleme tipice în cod, adaugă anotații despre tipuri, precum și efectuează astfel de manipulări ca mutarea claselor dintr-un spațiu de nume în altul, mutarea metodelor între clase, redenumirea claselor și metodelor.

În noua versiune a Psalm a fost implementată opțiunea „—taint-analysis”, care permite urmărirea legăturii dintre parametrii de intrare primiți de la utilizator (de exemplu, $_GET[‘name’]) și utilizarea lor în locuri care necesită escaparea caracterelor (de exemplu, echo „<h1>$name</h1>”), inclusiv prin monitorizarea lanțurilor de atribuiri intermediare și apeluri de funcții. Ca surse de date potențial periculoase se consideră utilizarea array-urilor asociative $_GET, $_POST și $_COOKIE, dar este posibil și definirea surselor proprii. Acțiunile care necesită urmărirea escapării includ operațiuni de ieșire care conduc la generarea de conținut în format HTML, adăugarea de antete HTTP sau executarea de interogări SQL.

Verificarea se aplică atunci când se utilizează funcții precum echo, exec, include și header. La analiza necesității de escapare, se iau în considerare tipuri de date precum text, șiruri SQL, HTML și cod shell, precum și șiruri cu parametrii de autentificare. Modului propus îi permite să identifice vulnerabilitățile din cod care pot conduce la atacuri de tip cross-site scripting (XSS) sau la inserții de cod SQL.

apariția început alpha-testing pentru noua ramură PHP 8.0. Lansarea este planificată pentru 26 noiembrie. În noua ramură se așteaptă noutăți, cum ar fi:

  • Activarea compilatorului JIT, al cărui utilizare va permite creșterea performanței.
  • Asistență tipuri union, care definesc colecții din două sau mai multe tipuri (de exemplu „public function foo(Foo|Bar $input): int|float;”).
  • Asistență atribute (anotații), care permit asocierea de metadate (de exemplu, informații despre tipuri) cu clasele fără a utiliza sintaxa Docblock.
  • Sintaxă simplificată pentru definirea claselor, care permite combinarea definiției constructorului și a proprietăților.
  • Un nou tip de valori returnate — static.
  • Un nou tip — mixed, care poate fi utilizat pentru a defini parametrii funcției care au tipuri diferite.
  • Expresia throw pentru gestionarea excepțiilor.
  • WeakMap pentru crearea de obiecte care pot fi distruse prin colectarea deșeurilor (de exemplu, pentru stocarea de cache-uri opționale).
  • Posibilitatea utilizarea expresiei „::class” pentru obiecte (analog cu apelul get_class()).
  • Posibilitatea definirea în blocul catch a excepțiilor neasociate cu variabile.
  • Posibilitatea lăsarea unui simbol de virgulă după ultimul element din lista de parametri ai funcției.
  • Nouă interfață Stringable pentru identificarea oricăror tipuri de date sau șiruri care pot fi transformate într-un șir (pentru care este disponibilă metoda __toString()).
  • Nouă funcție str_contains(), un echivalent simplificat al strpos pentru determinarea prezenței unei subștii, precum și funcțiile str_starts_with() și str_ends_with() pentru a verifica corespondențele la începutul și sfârșitul șirului.
  • Funcție adăugată fdiv(), care execută operația de împărțire fără a genera o eroare în cazul împărțirii la zero.
  • Logica de concatenare a șirurilor a fost modificată. De exemplu, expresia ‘echo „sum: ” . $a + $b’ a fost interpretată anterior ca ‘echo („sum: ” . $a) + $b’, iar în PHP 8 va fi procesată ca ‘echo „sum: ” . ($a + $b)’.
  • A fost întărită verificarea operațiunilor aritmetice și bitwise, de exemplu, expresiile „[] % [42]” și „$object + 4” vor genera o eroare.
  • Implementat un algoritm stabil de sortare, în care ordinea valorilor identice este păstrată în diferite execuții.

Sursa: opennet.ro

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster