Rilascio di Psalm 3.12, un analizzatore statico per il linguaggio PHP. Rilascio alfa di PHP 8.0

Azienda Vimeo ha pubblicato nuovo rilascio dell'analizzatore statico Psalm 3.12, che consente di rilevare sia errori evidenti che difficili da individuare nel codice PHP, e di correggere automaticamente alcuni tipi di errori. Il sistema è adatto per identificare problemi sia nel codice obsoleto che in quello che sfrutta le nuove funzionalità introdotte nelle ultime versioni di PHP. Il codice del progetto è scritto in PHP e distribuito sotto licenza MIT.

Psalm identifica la maggior parte dei problemi legati all'uso improprio dei tipi, oltre a diversi errori comuni. Ad esempio, supporta l'emissione di avvisi per la mescolanza di variabili di diversi tipi in un'espressione, controlli logici non corretti (come «if ($a && $a) {}», «if ($a && !$a) {}» e «if ($a) {} elseif ($a) {}») e l'inizializzazione incompleta delle proprietà degli oggetti. L'analizzatore viene eseguito in modalità multithread. È possibile eseguire controlli incrementali, in cui vengono analizzati solo i file modificati dalla precedente verifica.

In aggiunta, vengono forniti strumenti per una programmazione sicura, che consentono utilizzare annotazioni in formato Docblock («/** @var Type */») per fornire informazioni sui tipi di variabili, i valori di ritorno, i parametri delle funzioni e le proprietà degli oggetti. Supporta anche la definizione di modelli di utilizzo dei tipi e l'applicazione di espressioni assert. Ad esempio:

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

Per automatizzare la risoluzione dei problemi trovati, è disponibile l'utilità Psalter, che supporta plugin e permette risolvere problemi di tipo nel codice, aggiungere annotazioni sui tipi e eseguire operazioni come spostare classi da uno spazio dei nomi a un altro, spostare metodi tra classi, rinominare classi e metodi.

Nella nuova versione di Psalm è stata realizzata l'opzione «—taint-analysis», che consente di tracciare il legame tra i parametri di input ricevuti dall'utente (ad esempio, $_GET[‘name’]) e il loro utilizzo in punti in cui è necessaria l'escapabilità dei caratteri (ad esempio, echo «<h1>$name</h1>»), compreso il monitoraggio delle catene di assegnazioni intermedie e chiamate di funzioni. Come sorgenti di dati potenzialmente pericolosi vengono considerati gli array associativi $_GET, $_POST e $_COOKIE, ma è possibile anche definizione fonti proprie. Le operazioni richiedenti il tracciamento dell'escaping includono le operazioni di output che portano alla generazione di contenuti in formato HTML, all'aggiunta di intestazioni HTTP o all'esecuzione di query SQL.

Il controllo è applicato quando si utilizzano funzioni come echo, exec, include e header. Durante l'analisi della necessità di escape, vengono considerati i tipi di dati, come testo, stringhe SQL, HTML e codice Shell, stringhe con parametri di autenticazione. La modalità proposta consente di rilevare vulnerabilità nel codice che possono portare a attacchi di cross-site scripting (XSS) o iniezione di codice SQL.

Inoltre, si può notare l'inizio alpha-testing del nuovo ramo PHP 8.0. Il rilascio è previsto per il 26 novembre. In questo nuovo ramo ci si aspetta che ci siano novità, tra cui:

  • Attivazione del compilatore JIT, il cui utilizzo consentirà di aumentare le prestazioni.
  • Supporto tipi union, che definiscono collezioni di due o più tipi (ad esempio «public function foo(Foo|Bar $input): int|float;»).
  • Supporto attributi (annotazioni), che permettono di legare metadati (ad esempio, informazioni sui tipi) alle classi senza utilizzare la sintassi Docblock.
  • Sintassi abbreviata per la definizione delle classi, che consente di combinare la definizione del costruttore e le proprietà.
  • Nuovo tipo di valori restituiti — static.
  • Nuovo tipo — mixed, che può essere utilizzato per definire l'accettazione da parte di una funzione di parametri di diversi tipi.
  • Espressione throw per la gestione delle eccezioni.
  • WeakMap per creare oggetti che possono essere sacrificati durante la raccolta dei rifiuti (ad esempio, per memorizzare cache opzionali).
  • Possibilità uso dell'espressione «::class» per gli oggetti (equivalente alla chiamata di get_class()).
  • Possibilità definizioni nel blocco catch di eccezioni non legate a variabili.
  • Possibilità lasciare il simbolo della virgola dopo l'ultimo elemento nella lista dei parametri della funzione.
  • Nuova interfaccia Stringable per identificare qualsiasi tipo di stringa o dati che possono essere convertiti in una stringa (per i quali è disponibile il metodo __toString()).
  • Nuova funzione str_contains(), un analogo semplificato di strpos per determinare l'inserimento di una sottostringa, così come le funzioni str_starts_with() e str_ends_with() per verificare le corrispondenze all'inizio e alla fine della stringa.
  • È stata aggiunta una funzione fdiv(), che esegue l'operazione di divisione senza generare un errore in caso di divisione per zero.
  • Modificata la logica di concatenazione delle stringhe. Ad esempio, l'espressione ‘echo «sum: » . $a + $b’ veniva precedentemente interpretata come ‘echo («sum: » . $a) + $b’, mentre in PHP 8 sarà elaborata come ‘echo «sum: » . ($a + $b)’.
  • Inasprita la verifica delle operazioni aritmetiche e bitwise, ad esempio, le espressioni «[] % [42]» e «$object + 4» genereranno un errore.
  • Implementato un algoritmo di ordinamento stabile, in cui l'ordine degli stessi valori è preservato in esecuzioni diverse.

Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster