Udgivelse af Psalm 3.12, en statisk analyzer til PHP-sprog. Alpha-udgivelse af PHP 8.0

Vimeo offentliggjorde ny udgave af statisk analyser Psalm 3.12, 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 distribueres under MIT-licensen.

Psalm identificerer størstedelen af problemerne relateret til forkert brug af typer samt en række typiske fejl. 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 bruges annotationer i formatet Docblock (/* @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 det muligt 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 er implementeret 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 definition 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 start alfa-test af den nye PHP 8.0-version. Udgivelsen er planlagt til den 26. november. I den nye version forventes sådanne nyheder, som:

  • Aktivering af JIT-kompiler, hvis anvendelse vil forbedre ydeevnen.
  • Support union-typer, der definerer samlinger af to eller flere typer (f.eks. «public function foo(Foo|Bar $input): int|float;»).
  • Support attributter (annoteringer), der muliggør binding af metadata (f.eks. typeoplysninger) til klasser uden brug af Docblock-syntax.
  • Forkortet syntaks til klassedefinitioner, der muliggør kombineret definition af konstruktører og egenskaber.
  • Ny returværdi-type — static.
  • Ny type — mixed, som kan anvendes til at definere en funktion med parametre af forskellige typer.
  • Udsagn throw til håndtering af undtagelser.
  • WeakMap til oprettelse af objekter, der kan ofres ved affaldssamling (f.eks. til opbevaring af valgfrie caches).
  • Mulighed for at bruge udtrykket «::class» for objekter (motsvarende kaldet get_class()).
  • Mulighed definitioner i catch-blokken af undtagelser, der ikke er knyttet til variabler.
  • Mulighed udlader komma-tegnet efter det sidste element i funktionsparameterlisten.
  • Den nye grænseflade Stringable til identificering af alle strenge typer eller data, der kan konverteres til en streng (hvor metoden __toString() er tilgængelig).
  • Ny funktion str_contains(), 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 fdiv(), der udfører en divisionsoperation uden at generere en fejl ved division med nul.
  • Ændret 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)’.
  • Forstærket kontrol af aritmetiske og bitoperationer, f.eks. vil udtrykkene «[] % [42]» og «$object + 4» resultere i en fejl.
  • Implementeret en stabil sorteringsalgoritme, hvor rækkefølgen af ens værdier bevares ved forskellige kørseler.

Kilde: opennet.ru

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster