Rilascio Psalm 3.12, analizzatore statico per il linguaggio PHP. Rilascio alpha PHP 8.0

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

Salmo determina gran parte dei problemi legati a un uso scorretto dei tipi, così come diverse errori tipici. Ad esempio, viene supportata l’emissione di avvisi per la mescolanza in un'espressione di variabili di tipi diversi, controlli logici non corretti (come «if ($a && $a) {}», «if ($a && !$a) {}» e «if ($a) {} elseif ($a) {}»), inizializzazioni incomplete delle proprietà degli oggetti. L'analizzatore viene eseguito in modalità multithreading. È possibile effettuare controlli incrementali, in cui vengono analizzati solo i file modificati dall'ultima verifica.

In aggiunta, vengono forniti strumenti per la programmazione sicura, che consentono di utilizzare annotazioni nel formato Docblock («/** @var Type */») per fornire informazioni sui tipi di variabili, valori restituiti, parametri delle funzioni e proprietà degli oggetti. È anche supportata la definizione di modelli d'uso 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 i plugin e consente risolvere problemi tipici nel codice, aggiungere annotazioni sui tipi, oltre a compiere 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 implementata l'opzione «—taint-analysis», che consente di tracciare la connessione tra i parametri di input forniti dall'utente (ad esempio, $_GET[‘name’]) e il loro utilizzo in punti in cui è necessaria l'escapatura dei caratteri (ad esempio, echo «<h1>$name</h1>»), compreso il monitoraggio delle catene di assegnazioni intermedie e chiamate di funzioni. Come fonti di dati potenzialmente pericolosi si considera l'uso degli array associativi $_GET, $_POST e $_COOKIE, ma è possibile anche definizione fonti proprie. Tra le azioni che richiedono il tracciamento dell'escaping, ci sono 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 si applica all'uso di funzioni come echo, exec, include e header. Nella valutazione della necessità di escaping, si considerano tipi di dati come testo, stringhe con SQL, HTML e codice Shell, stringhe con parametri di autenticazione. La modalità proposta consente di identificare vulnerabilità nel codice che possono portare a attacchi di cross-site scripting (XSS) o iniezione di codice SQL.

In aggiunta, si può notare l'inizio alpha-testing di una nuova versione di PHP 8.0. Il rilascio è previsto per il 26 novembre. Nella nuova versione si prevedono elementi come: novità, quali:

  • Inclusione del compilatore JIT, il cui utilizzo porterà a un aumento delle prestazioni.
  • Supporto tipi union, che definiscono collezioni di due o più tipi (per esempio «public function foo(Foo|Bar $input): int|float;»).
  • Supporto attributi (annotazioni), che permettono di associare metadati (ad esempio, informazioni sui tipi) a classi senza utilizzare la sintassi Docblock.
  • Sintassi semplificata per la definizione delle classi, che consente di unire la definizione del costruttore e delle 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 tipi diversi.
  • Espressione throw per la gestione delle eccezioni.
  • WeakMap per la creazione di oggetti che possono essere raccolti durante la raccolta dei rifiuti (per esempio, per la memorizzazione di cache facoltativi).
  • Capacità uso dell'espressione «::class» per gli oggetti (equivalente alla chiamata di get_class()).
  • Capacità definizione nel blocco catch di eccezioni non legate a variabili.
  • Capacità lasciare il simbolo di virgola dopo l'ultimo elemento nell'elenco dei parametri della funzione.
  • Nuova interfaccia Stringable per identificare qualsiasi tipo di stringa o dato che può essere convertito in una stringa (per cui è disponibile il metodo __toString()).
  • La nuova funzione str_contains(), un'alternativa semplificata a strpos per determinare la presenza di una sottostringa, oltre alle funzioni str_starts_with() e str_ends_with() per verificare corrispondenze all'inizio e alla fine della stringa.
  • Funzione aggiunta fdiv(), che esegue l'operazione di divisione senza generare un errore in caso di divisione per zero.
  • Modificata la logica di concatenazione delle stringhe. Per 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, l'espressione «[] % [42]» e «$object + 4» genereranno un errore.
  • Realizzato algoritmo di ordinamento stabile, in cui l'ordine di apparizione dei valori identici viene mantenuto 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