Release av Psalm 3.12, en statisk analysator för PHP-språket. Alfaversion av PHP 8.0

Vimeo Company опубликовала ny version av statisk analysator Ps 3.12, som låter dig identifiera både uppenbara och subtila fel i PHP-kod, samt automatiskt korrigera vissa typer av fel. Systemet är lämpligt för att identifiera problem både i äldre kod och i kod som använder moderna funktioner som introducerats i nya grenar av PHP. Projektkoden är skriven i PHP och levererad av under MIT-licensen.

Psalm identifierar de flesta problem som är förknippade med felaktig typanvändning, såväl som olika typiska misstag. Till exempel stöder den varningar om att blanda variabler av olika typer i ett uttryck, felaktiga logiska test (som "if ($a && $a) {}", "if ($a && !$a) {}" och " if ( $a) {} elseif ($a) {}"), ofullständig initiering av objektegenskaper. Analysatorn körs i flertrådsläge. Det är möjligt att utföra inkrementella skanningar, som endast analyserar filer som har ändrats sedan den senaste skanningen.

Dessutom tillhandahålls säkra programmeringsverktyg för att tillåta att använda anteckningar i formatet Docblock ("/** @var Typ */") för att ge information om variabeltyper, returvärden, funktionsparametrar, objektegenskaper. Det stöds också att definiera typanvändningsmönster och använda assert-satser. Till exempel:

/** @var sträng|null */
$a = foo();

/** @var sträng $a */
echo strpos($a, 'hej');

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

För att automatisera elimineringen av hittade problem tillhandahålls Psalter-verktyget, som stöder plugins och det gör felsöka vanliga kodproblem, lägga till typkommentarer och utföra manipulationer som att flytta klasser från ett namnområde till ett annat, flytta metoder mellan klasser och byta namn på klasser och metoder.

I det nya numret av Psalm genomförs alternativet "--taint-analysis" låter dig spåra förhållandet mellan indataparametrar som tas emot från användaren (till exempel $_GET['namn']) och deras användning på platser som kräver teckensläckning (till exempel, echo " $namn "), inklusive genom spårningskedjor av mellanliggande uppdrag och funktionsanrop. Användningen av associativa arrayer $_GET, $_POST och $_COOKIE anses vara källor till potentiellt farlig data, men det är också möjligt bestämning av egna källor. Åtgärder som kräver escape-spårning inkluderar utdataoperationer som genererar HTML-innehåll, lägger till HTTP-rubriker eller exekverar SQL-frågor.

Validering används vid användning av funktioner som eko, exec, include och header. Vid analys av behovet av escape tas hänsyn till datatyper som text, strängar med SQL, HTML och Shell-kod, strängar med autentiseringsparametrar. Det föreslagna läget låter dig identifiera sårbarheter i koden som leder till cross-site scripting (XSS) eller SQL-ersättning.

Dessutom kan det noteras start alfatestning av den nya PHP 8.0-grenen. Utgivningen är planerad till den 26 november. Följande förväntas i den nya grenen: innovationerSom:

  • integration JIT-kompilator, vars användning kommer att förbättra produktiviteten.
  • Support fackliga typer, definierar samlingar av två eller flera typer (till exempel "public function foo(Foo|Bar $input): int|float;").
  • Support attribut (kommentarer) som låter dig binda metadata (som typinformation) till klasser utan att använda Docblock-syntax.
  • Förkortad syntax klassdefinitioner, så att du kan kombinera definitionen av en konstruktor och egenskaper.
  • Ny returtyp - statisk.
  • Ny typ - blandad, som kan användas för att avgöra om en funktion accepterar parametrar av olika typer.
  • uttryck kasta att hantera undantag.
  • WeakMap att skapa föremål som kan offras under sophämtning (till exempel för att lagra onödiga cacher).
  • Möjlighet använder uttrycket "::class" för objekt (analogt med att anropa get_class()).
  • Möjlighet definitioner i fångstblocket av undantag som inte är bundna till variabler.
  • Möjlighet lämnar ett kommatecken efter det sista elementet i listan med funktionsparametrar.
  • Nytt gränssnitt Strängbar för att identifiera alla strängtyper eller data som kan konverteras till en sträng (för vilken metoden __toString() är tillgänglig).
  • Ny funktion str_contains(), en förenklad analog av strpos för att bestämma förekomsten av en delsträng, samt funktionerna str_starts_with() och str_ends_with() för att kontrollera matchningar i början och slutet av en sträng.
  • Funktion tillagd fdiv(), som utför en divisionsoperation utan att kasta ett fel när man dividerar med noll.
  • Ändrats strängfogningslogik. Till exempel uttrycket 'echo "summa:" . $a + $b' tolkades tidigare som 'echo ("summa: " . $a) + $b', och kommer i PHP 8 att behandlas som 'eko "summa: ". ($a + $b)'.
  • Åtdragna kontroll av aritmetiska och bitoperationer, till exempel, kommer uttrycken "[] ​​% [42]" och "$objekt + 4" att resultera i ett fel.
  • Genomfört en stabil sorteringsalgoritm där ordningen av identiska värden bevaras över olika körningar.

Källa: opennet.ru

Lägg en kommentar