Företaget Vimeo ny release av statisk analysator , som gör det möjligt att upptÀcka bÄde uppenbara och svÄrfÄngade fel i PHP-kod, samt automatiskt ÄtgÀrda vissa typer av fel. Systemet Àr lÀmpligt för att identifiera problem i bÄde gammal och modern kod, som anvÀnder nya funktioner som introducerats i de senaste versionerna av PHP. Projektkoden Àr skriven i PHP och licensieras under MIT.
Psalm identifierar en majoritet av de problem som Àr relaterade till felaktig anvÀndning av typer, samt olika . Till exempel kan varningar om blandning av variabler med olika typer i uttryck, felaktiga logiska kontroller (som «if ($a && $a) {}», «if ($a && !$a) {}» och «if ($a) {} elseif ($a) {}»), och ofullstÀndig initialisering av objektets egenskaper visas. Analysatorn körs i flertrÄdat lÀge. Det Àr möjligt att utföra inkrementella kontroller, dÀr endast de filer som har Àndrats sedan den senaste kontrollen analyseras.
Dessutom tillhandahÄlls verktyg för sÀkert programmerande, vilket möjliggör annoteringar i formatet (''/*@var Type */'') för att ge information om typer av variabler, returnerade vÀrden, funktionsparametrar och objektens egenskaper. Definition av anvÀndningsmönster för typer och tillÀmpning av assertions stöds ocksÄ. Till exempel:
/** @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();
}
För att automatisera ÄtgÀrder av upptÀckta problem finns det ett verktyg som heter Psalter, som stöder plugins och ÄtgÀrda typiska problem i koden, lÀgga till typannoteringar samt utföra ÄtgÀrder som att flytta klasser frÄn ett namnrymd till ett annat, flytta metoder mellan klasser, och byta namn pÄ klasser och metoder.
I den nya versionen av Psalm alternativet «—taint-analysis» som gör det möjligt att spåra sambandet mellan de inmatningsparametrar som erhållits från användaren (t.ex. $_GET[‘name’]) och deras användning på ställen som kräver teckenescapning (t.ex. echo «<h1>$name</h1>»), inklusive genom att spåra kedjor av mellanliggande tilldelningar och funktionsanrop. Som källor för potentiellt farliga data betraktas användningen av associativa arrayer $_GET, $_POST och $_COOKIE, men det är även möjligt egna kĂ€llor. Bland de Ă„tgĂ€rder som krĂ€ver övervakning av escaping beaktas utmatningsoperationer som leder till att innehĂ„ll genereras i HTML-format, tillĂ€gg av HTTP-huvuden eller utförande av SQL-frĂ„gor.
Kontrollen tillÀmpas vid anvÀndning av funktioner som echo, exec, include och header. Vid analys av behovet av rymning beaktas datatyper sÄsom text, strÀngar med SQL, HTML och shellkod, samt strÀngar med autentisering parametrar. Den föreslagna metoden möjliggör identifiering av sÄrbarheter i koden som kan leda till cross-site scripting (XSS) eller SQL-injektion.
Dessutom kan det nÀmnas alfatesta av den nya grenen PHP 8.0. UtgÄvan Àr planerad till den 26 november. I den nya grenen förvÀntas sÄdana , som:
- , vars anvÀndning kommer att öka prestandan.
- Support , som definierar samlingar av tvÄ eller fler typer (t.ex. "public function foo(Foo|Bar $input): int|float;" ).
- Support (anteckningar), som gör det möjligt att koppla metadata (t.ex. typinformation) till klasser utan att anvÀnda Docblock-syntax.
- för klassdefinitioner, vilket gör det möjligt att kombinera definitionerna av konstruktorer och egenskaper.
- Nytt returvĂ€rdestyp â .
- Ny typ â , som kan anvĂ€ndas för att definiera en funktion som tar emot parametrar med olika typer.
- Uttrycket för hantering av undantag.
- för att skapa objekt som kan slÀppas vid skrÀpinsamling (t.ex. för att lagra valfria cacher).
- anvÀndning av uttrycket "::class" för objekt (motsvarande anropet get_class()).
- definitioner i catch-blocket av undantag som inte Àr kopplade till variabler.
- lÀmna ett kommatecken efter det sista elementet i funktionsparameterlistan.
- Nytt grÀnssnitt för att identifiera alla strÀngtyper eller data som kan konverteras till en strÀng (för vilka metoden __toString() Àr tillgÀnglig).
- Ny funktion , en förenklad motsvarighet till strpos för att identifiera förekomsten av en delstrÀng, samt funktionerna str_starts_with() och str_ends_with() för att kontrollera överensstÀmmelse i början och slutet av strÀngen.
- Funktionalitet har lagts till , som utför division utan att ge felmeddelande vid division med noll.
- logiken för strĂ€ngsammanfogning. Till exempel, uttrycket âecho «sum: » . $a + $bâ tolkades tidigare som âecho («sum: » . $a) + $bâ, men i PHP 8 kommer det att hanteras som âecho «sum: » . ($a + $b)â.
- kontroll av aritmetiska och bitvisa operationer, till exempel uttrycken «[] % [42]» och «$object + 4» kommer att leda till fel.
- ett stabilt sorteringsalgoritm, dÀr ordningen pÄ lika vÀrden bevaras vid olika körningar.
KĂ€lla: opennet.ru
