Liberazione di Salmu 3.12, un analizatore staticu per a lingua PHP. Liberazione Alpha di PHP 8.0

Cumpagnia Vimeo publicatu nova versione di l'analizzatore staticu Salmu 3.12, chì vi permette di identificà l'errori evidenti è sottili in u codice PHP, è ancu corregge automaticamente certi tipi d'errori. U sistema hè adattatu per identificà i prublemi sia in u codice legatu sia in u codice chì usa funzioni muderne introdutte in novi rami di PHP. U codice di u prugettu hè scrittu in PHP è distribuitu da sottu a licenza MIT.

U Salmu identifica a maiò parte di i prublemi assuciati cù l'usu di tipu incorrectu, è ancu diversi errori tipici. Per esempiu, sustene l'avvirtimenti nantu à mischjà variabili di diversi tipi in una espressione, testi logichi sbagliati (cum'è "se ($a && $a) {}", "if ($a && !$a) {}" è " if ($a) {} elseif ($a) {}"), inizializazione incompleta di pruprietà di l'ughjettu. L'analizzatore funziona in modu multi-threaded. Hè pussibule di realizà scans incrementali, chì analizanu solu i fugliali chì anu cambiatu da l'ultima scansione.

Inoltre, i strumenti di prugrammazione sicuri sò furniti per permette usu annotazioni in u furmatu Docblock ("/** @var Type */") per furnisce infurmazioni nantu à i tipi di variàbili, i valori di ritornu, i paràmetri di funzione, e proprietà di l'ughjettu. A definizione di mudelli d'usu di u tipu è l'usu di dichjarazioni assert sò ancu supportati. Per esempiu:

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

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

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

Per automatizà l'eliminazione di i prublemi truvati, l'utilità Psalter hè furnita, chì sustene i plugins è si permette di risolve i prublemi di codice cumuni, aghjunghje annotazioni di tipu, è eseguisce manipulazioni cum'è u muvimentu di e classi da un spaziu di nomi à l'altru, u muvimentu di metudi trà e classi, è rinominà classi è metudi.

In u novu numeru di Salmu implementatu l'opzione "--taint-analysis" permette di tracciate a relazione trà i paràmetri di input ricevuti da l'utilizatore (per esempiu, $_GET ['name']) è u so usu in i posti chì necessitanu di scappà di caratteri (per esempiu, echo " $ nome "), ancu attraversu catene di seguimentu di assignazioni intermedie è chjama di funzione. L'usu di array associative $_GET, $_POST è $_COOKIE hè cunsideratu cum'è fonti di dati potenzialmente periculosi, ma hè ancu pussibule. definizione fonti proprie. L'azzioni chì necessitanu di fughje u seguimentu includenu operazioni di output chì generanu cuntenutu HTML, aghjunghje intestazioni HTTP, o eseguite dumande SQL.

A validazione hè aduprata quandu utilizate funzioni cum'è echo, exec, include è header. Quandu analizà a necessità di scappà, i tipi di dati cum'è u testu, stringhe cù codice SQL, HTML è Shell, strings cù paràmetri di autentificazione sò cunsiderate. U modu prupostu permette di identificà vulnerabili in u codice chì portanu à scripting cross-site (XSS) o injection SQL.

Inoltre, pò esse nutatu principiu test alfa di a nova filiera PHP 8.0. A liberazione hè prevista per u 26 di nuvembre. I seguenti sò previsti in a nova filiera: innovazioni, cum'è:

  • Accendendu compilatore JIT, l'usu di quale migliurà a produtividade.
  • sustegnu tipi di unioni, chì definisce cullezzione di dui o più tipi (per esempiu, "funzione publica foo(Foo|Bar $input): int|float;").
  • sustegnu attributi (annotazioni) chì permettenu di ligà i metadati (cum'è l'infurmazioni di tipu) à e classi senza aduprà a sintassi Docblock.
  • Sintaxi accurtata definizione di classi, chì vi permette di cumminà a definizione di un constructore è e proprietà.
  • novu tipu di ritornu - static.
  • novu tipu - mixte, chì pò esse usatu per stabilisce se una funzione accetta paràmetri di diversi tipi.
  • Spressione graputi per trattà l'eccezzioni.
  • WeakMap per creà oggetti chì ponu esse sacrificati durante a cullizzioni di basura (per esempiu, per almacenà cache innecessarii).
  • uppurtunità usendu l'espressione "::class" per l'uggetti (analogicu à chjamà get_class()).
  • uppurtunità definizioni in u bloccu di catch di eccezzioni chì ùn sò micca ligati à variàbili.
  • uppurtunità lassannu una virgola dopu à l'ultimu elementu in a lista di i paràmetri di funzione.
  • Nova interfaccia Stringable per identificà ogni tipu di stringa o dati chì ponu esse cunvertiti in una stringa (per quale u metudu __toString() hè dispunibule).
  • Nova funzione str_contains(), un analogu simplificatu di strpos per determinà l'occurrence di una substringa, è ancu e funzioni str_starts_with () è str_ends_with () per verificà e partite à l'iniziu è a fine di una stringa.
  • Funzione aghjuntu fdiv(), chì rializeghja una operazione di divisione senza scaccià un errore quandu si divide per zero.
  • Cambiatu una logica di stringa. Per esempiu, l'espressione 'echo "sum:" . $a + $b' era prima interpretatu cum'è "echo ("sum: " . $a) + $b', è in PHP 8 serà trattatu cum'è "echo "sum: " . ($a + $b)'.
  • Strettu cuntrollà l'operazioni aritmetiche è di bit, per esempiu, l'espressioni "[] % [42]" è "$object + 4" seranu un errore.
  • Implementatu un algoritmu di classificazione stabile in quale l'ordine di i valori identichi hè cunservatu in diverse corse.

Source: opennet.ru

Add a comment