Vimeo ny udgave af statisk analyser , der gør det muligt at identificere både åbenlyse og svære fejl i PHP-kode samt automatisk rette nogle typer af fejl. Systemet er velegnet til at identificere problemer i både gammel kode og kode, der bruger moderne funktioner, der er kommet til i de nye PHP-brancher. Projektkoden er skrevet i PHP og under MIT-licensen.
Psalm identificerer størstedelen af problemerne relateret til forkert brug af typer samt en række . For eksempel understøttes advarsler om blanding af variabler med forskellige typer i udtryk, forkert logiske kontroller (såsom «if ($a && $a) {}», «if ($a && !$a) {}» og «if ($a) {} elseif ($a) {}»), og ufuldstændig initialisering af objektets egenskaber. Analyzer kører i flere tråde. Der er mulighed for at udføre inkrementelle tjek, hvor kun filer, der er ændret siden sidste kontrol, analyseres.
Derudover tilbydes værktøjer til sikker programmering, der muliggør annotationer i formatet (/* @var Type */) for at give oplysninger om variablers typer, returværdier, funktionsparametre og objektets egenskaber. Det understøtter også definition af brugsmønstre for typer og anvendelse af assert-udtryk. For eksempel:
/** @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();
}
For at automatisere udbedringen af de identificerede problemer tilbydes et værktøj kaldet Psalter, der understøtter plugins og løse typiske problemer i koden, tilføje typeannotationer og udføre manøvrer som flytning af klasser fra et navnerum til et andet, flytning af metoder mellem klasser samt omdøbning af klasser og metoder.
I den nye udgave af Psalm muligheden for «—taint-analysis», der gør det muligt at spore forbindelsen mellem de indgående parametre, der modtages fra brugeren (f.eks. $_GET[‘name’]) og deres anvendelse på steder, hvor der er behov for korrekt escape af tegn (f.eks. echo «<h1>$name</h1>»), herunder ved at spore kæder af mellemliggende tildelinger og funktionsopkald. Kilderne til potentielt farlige data omfatter brugen af associative arrays $_GET, $_POST og $_COOKIE, men det er også muligt af egne kilder. De aktiviteter, der kræver overvågning af escaping, omfatter outputoperationer, der genererer indhold i HTML-format, tilføjelse af HTTP-headers eller udførelse af SQL-forespørgsler.
Kontrollen anvendes, når man bruger funktionerne echo, exec, include og header. Når behovet for escaping analyseres, tages datatyper som tekst, SQL-strenge, HTML og Shell-kode samt strenge med autentificeringsparametre i betragtning. Den foreslåede tilstand gør det muligt at identificere sårbarheder i koden, der fører til Cross-Site Scripting (XSS) eller SQL-injektion.
Yderligere kan det nævnes alfa-test af den nye PHP 8.0-version. Udgivelsen er planlagt til den 26. november. I den nye version forventes sådanne , som:
- , hvis anvendelse vil forbedre ydeevnen.
- Support , der definerer samlinger af to eller flere typer (f.eks. «public function foo(Foo|Bar $input): int|float;»).
- Support (annoteringer), der muliggør binding af metadata (f.eks. typeoplysninger) til klasser uden brug af Docblock-syntax.
- til klassedefinitioner, der muliggør kombineret definition af konstruktører og egenskaber.
- Ny returværdi-type — .
- Ny type — , som kan anvendes til at definere en funktion med parametre af forskellige typer.
- Udsagn til håndtering af undtagelser.
- til oprettelse af objekter, der kan ofres ved affaldssamling (f.eks. til opbevaring af valgfrie caches).
- for at bruge udtrykket «::class» for objekter (motsvarende kaldet get_class()).
- definitioner i catch-blokken af undtagelser, der ikke er knyttet til variabler.
- udlader komma-tegnet efter det sidste element i funktionsparameterlisten.
- Den nye grænseflade til identificering af alle strenge typer eller data, der kan konverteres til en streng (hvor metoden __toString() er tilgængelig).
- Ny funktion , en forenklet version af strpos til at bestemme tilstedeværelsen af en delstreng samt funktionerne str_starts_with() og str_ends_with() til at tjekke for match i begyndelsen og slutningen af strengen.
- Tilføjet en funktion , der udfører en divisionsoperation uden at generere en fejl ved division med nul.
- logik for sammensætning af strenge. For eksempel blev udtrykket ‘echo «sum: » . $a + $b’ tidligere fortolket som ‘echo («sum: » . $a) + $b’, men i PHP 8 vil det blive behandlet som ‘echo «sum: » . ($a + $b)’.
- kontrol af aritmetiske og bitoperationer, f.eks. vil udtrykkene «[] % [42]» og «$object + 4» resultere i en fejl.
- en stabil sorteringsalgoritme, hvor rækkefølgen af ens værdier bevares ved forskellige kørseler.
Kilde: opennet.ru
