Udgivelse af Psalm 3.12, en statisk analysator til PHP-sproget. Alpha-udgivelse af PHP 8.0

Vimeo Company опубликовала ny udgivelse af statisk analysator Salme 3.12, som giver dig mulighed for at identificere både åbenlyse og subtile fejl i PHP-kode, samt automatisk rette nogle typer fejl. Systemet er velegnet til at identificere problemer både i ældre kode og i kode, der bruger moderne funktioner introduceret i nye grene af PHP. Projektkoden er skrevet i PHP og distribueret af under MIT-licensen.

Salme identificerer de fleste af de problemer, der er forbundet med forkert type brug, såvel som forskellige typiske fejl. For eksempel understøtter den advarsler om blanding af variabler af forskellige typer i et udtryk, ukorrekte logiske tests (såsom "if ($a && $a) {}", "if ($a && !$a) {}" og " if ( $a) {} elseif ($a) {}"), ufuldstændig initialisering af objektegenskaber. Analysatoren kører i multi-threaded mode. Det er muligt at udføre trinvise scanninger, som kun analyserer filer, der er ændret siden sidste scanning.

Derudover leveres sikre programmeringsværktøjer for at tillade at bruge anmærkninger i formatet Docblock ("/** @var Type */") for at give information om variabeltyper, returværdier, funktionsparametre, objektegenskaber. Definering af typebrugsmønstre og brug af assert-sætninger understøttes også. For eksempel:

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

/** @var streng $a */
echo strpos($a, 'hej');

/** @psalm-assert-if-true B $a */
function isValidB(A $a): bool {
returner $a forekomst af B && $a->isValid();
}

For at automatisere elimineringen af ​​fundne problemer leveres Psalter-værktøjet, som understøtter plugins og Det gør det muligt fejlfinde almindelige kodeproblemer, tilføje typeanmærkninger og udføre manipulationer såsom at flytte klasser fra et navneområde til et andet, flytte metoder mellem klasser og omdøbe klasser og metoder.

I det nye nummer af Salme implementeret indstillingen "--taint-analysis" giver dig mulighed for at spore forholdet mellem inputparametre modtaget fra brugeren (f.eks. $_GET['navn']) og deres brug på steder, der kræver tegn-escape (f.eks. echo " $navn "), herunder gennem sporingskæder af mellemliggende opgaver og funktionskald. Brugen af ​​associative arrays $_GET, $_POST og $_COOKIE betragtes som kilder til potentielt farlige data, men det er også muligt bestemmelse af egne kilder. Handlinger, der kræver escape-sporing, omfatter outputhandlinger, der genererer HTML-indhold, tilføjer HTTP-headere eller udfører SQL-forespørgsler.

Validering bruges ved brug af funktioner som ekko, exec, include og header. Ved analyse af behovet for escape tages der hensyn til datatyper som tekst, strenge med SQL, HTML og Shell-kode, strenge med autentificeringsparametre. Den foreslåede tilstand giver dig mulighed for at identificere sårbarheder i koden, der fører til cross-site scripting (XSS) eller SQL substitution.

Derudover kan det bemærkes begyndelse alfa-test af den nye PHP 8.0-gren. Udgivelsen er planlagt til den 26. november. Følgende forventes i den nye afdeling: innovationerSom:

  • inklusion JIT compiler, hvis brug vil forbedre produktiviteten.
  • Support fagforeningstyper, der definerer samlinger af to eller flere typer (f.eks. "offentlig funktion foo(Foo|Bar $input): int|float;").
  • Support egenskaber (annoteringer), der giver dig mulighed for at binde metadata (såsom typeinformation) til klasser uden at bruge Docblock-syntaks.
  • Forkortet syntaks klassedefinitioner, så du kan kombinere definitionen af ​​en konstruktør og egenskaber.
  • Ny returtype - statisk.
  • Ny type - blandet, som kan bruges til at bestemme, om en funktion accepterer parametre af forskellige typer.
  • ekspression kaste at håndtere undtagelser.
  • Svagt kort at skabe genstande, der kan ofres under affaldsindsamling (for eksempel for at gemme unødvendige caches).
  • Opportunity ved at bruge udtrykket "::class" for objekter (analogt med at kalde get_class()).
  • Opportunity definitioner i catch-blokken af ​​undtagelser, der ikke er bundet til variabler.
  • Opportunity efterlader et komma efter det sidste element i listen over funktionsparametre.
  • Ny grænseflade Strengerbar at identificere eventuelle strengtyper eller data, der kan konverteres til en streng (hvortil __toString()-metoden er tilgængelig).
  • Ny funktion str_contains(), en forenklet analog af strpos til at bestemme forekomsten af ​​en understreng, samt funktionerne str_starts_with() og str_ends_with() til at kontrollere matches i begyndelsen og slutningen af ​​en streng.
  • Tilføjet funktion fdiv(), som udfører en divisionsoperation uden at kaste en fejl, hvis den divideres med nul.
  • Ændret strengforbindelseslogik. For eksempel udtrykket 'ekko "sum:" . $a + $b' blev tidligere fortolket som 'ekko ("sum: " . $a) + $b', og vil i PHP 8 blive behandlet som 'ekko "sum: " . ($a + $b)'.
  • Strammet kontrol af aritmetiske og bitoperationer, for eksempel, vil udtrykkene "[] % [42]" og "$objekt + 4" resultere i en fejl.
  • Implementeret en stabil sorteringsalgoritme, hvor rækkefølgen af ​​identiske værdier bevares på tværs af forskellige kørsler.

Kilde: opennet.ru

Tilføj en kommentar