Utgivelse av Salme 3.12, en statisk analysator for PHP-språket. Alfa-utgivelse av PHP 8.0

Vimeo Company опубликовала ny utgivelse av statisk analysator Salme 3.12, som lar deg identifisere både åpenbare og subtile feil i PHP-kode, samt automatisk korrigere enkelte typer feil. Systemet er egnet for å identifisere problemer både i eldre kode og i kode som bruker moderne funksjoner introdusert i nye grener av PHP. Prosjektkoden er skrevet i PHP og distribuert av under MIT-lisensen.

Salme identifiserer de fleste problemene forbundet med feil type bruk, så vel som ulike typiske feil. For eksempel støtter den advarsler om blanding av variabler av forskjellige typer i et uttrykk, ukorrekte logiske tester (som "if ($a && $a) {}", "if ($a && !$a) {}" og " if ( $a) {} elseif ($a) {}"), ufullstendig initialisering av objektegenskaper. Analysatoren kjører i flertrådsmodus. Det er mulig å utføre inkrementelle skanninger, som kun analyserer filer som har endret seg siden siste skanning.

I tillegg leveres sikre programmeringsverktøy for å tillate å bruke merknader i formatet Docblock ("/** @var Type */") for å gi informasjon om variabeltyper, returverdier, funksjonsparametere, objektegenskaper. Definere type bruksmønstre og bruk av assert-setninger støttes også. For eksempel:

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

/** @var string $a */
echo strpos($a, 'hei');

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

For å automatisere eliminering av funnet problemer, leveres Psalter-verktøyet, som støtter plugins og den lar feilsøk vanlige kodeproblemer, legg til typekommentarer og utfør manipulasjoner som å flytte klasser fra ett navneområde til et annet, flytte metoder mellom klasser og gi nytt navn til klasser og metoder.

I det nye nummeret av Salme implementert alternativet "--taint-analysis" lar deg spore forholdet mellom inngangsparametere mottatt fra brukeren (for eksempel $_GET['navn']) og deres bruk på steder som krever tegnutkobling (for eksempel ekko " $navn "), inkludert gjennom sporingskjeder av mellomoppdrag og funksjonsanrop. Bruk av assosiative arrays $_GET, $_POST og $_COOKIE anses som kilder til potensielt farlige data, men det er også mulig bestemmelse av egne kilder. Handlinger som krever escape-sporing inkluderer utdataoperasjoner som genererer HTML-innhold, legger til HTTP-hoder eller utfører SQL-spørringer.

Validering brukes ved bruk av funksjoner som ekko, exec, include og header. Ved analyse av behovet for escape tas datatyper som tekst, strenger med SQL, HTML og Shell-kode, strenger med autentiseringsparametere i betraktning. Den foreslåtte modusen lar deg identifisere sårbarheter i koden som fører til cross-site scripting (XSS) eller SQL-erstatning.

I tillegg kan det bemerkes start alfa-testing av den nye PHP 8.0-grenen. Utgivelsen er planlagt til 26. november. Følgende forventes i den nye avdelingen: innovasjonerSom:

  • inkludering JIT kompilator, hvis bruk vil forbedre produktiviteten.
  • Støtte fagforeningstyper, som definerer samlinger av to eller flere typer (for eksempel "public function foo(Foo|Bar $input): int|float;").
  • Støtte attributter (merknader) som lar deg binde metadata (som typeinformasjon) til klasser uten å bruke Docblock-syntaks.
  • Forkortet syntaks klassedefinisjoner, slik at du kan kombinere definisjonen av en konstruktør og egenskaper.
  • Ny returtype - statisk.
  • Ny type - blandet, som kan brukes til å bestemme om en funksjon aksepterer parametere av forskjellige typer.
  • uttrykket kaste å håndtere unntak.
  • WeakMap å lage gjenstander som kan ofres under søppelhenting (for eksempel for å lagre unødvendige cacher).
  • Opportunity ved å bruke uttrykket "::class" for objekter (analogt med å kalle get_class()).
  • Opportunity definisjoner i fangstblokken av unntak som ikke er bundet til variabler.
  • Opportunity etterlate et komma etter det siste elementet i listen over funksjonsparametere.
  • Nytt grensesnitt Snorbar for å identifisere eventuelle strengtyper eller data som kan konverteres til en streng (som __toString()-metoden er tilgjengelig for).
  • Ny funksjon str_contains(), en forenklet analog av strpos for å bestemme forekomsten av en delstreng, samt funksjonene str_starts_with() og str_ends_with() for å sjekke treff på begynnelsen og slutten av en streng.
  • Lagt til funksjon fdiv(), som utfører en divisjonsoperasjon uten å kaste en feil ved deling på null.
  • Endret strengsammenføyningslogikk. For eksempel uttrykket 'ekko "sum:" . $a + $b' ble tidligere tolket som 'ekko ("sum: " . $a) + $b', og vil i PHP 8 bli behandlet som 'ekko "sum: " . ($a + $b)'.
  • Stramming kontrollere aritmetikk og bitoperasjoner, for eksempel, vil uttrykkene "[] % [42]" og "$objekt + 4" resultere i en feil.
  • Implementert en stabil sorteringsalgoritme der rekkefølgen av identiske verdier bevares på tvers av forskjellige kjøringer.

Kilde: opennet.ru

Legg til en kommentar