UtgÄvan av Psalm 3.12, en statisk analysator för PHP-sprÄket. Alfa-version av PHP 8.0

Företaget Vimeo publicerade ny release av statisk analysator Psalm 3.12, 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 sprids licensieras under MIT.

Psalm identifierar en majoritet av de problem som Àr relaterade till felaktig anvÀndning av typer, samt olika vanliga fel. 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 anvÀnda annoteringar i formatet Docblock (''/*@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 möjliggör Ä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 har möjligheten 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 definition 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 början 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 nyheter, som:

  • Aktivering JIT-kompilatorn, vars anvĂ€ndning kommer att öka prestandan.
  • Support union-typer, som definierar samlingar av tvĂ„ eller fler typer (t.ex. "public function foo(Foo|Bar $input): int|float;" ).
  • Support attribut (anteckningar), som gör det möjligt att koppla metadata (t.ex. typinformation) till klasser utan att anvĂ€nda Docblock-syntax.
  • Förkortad syntax för klassdefinitioner, vilket gör det möjligt att kombinera definitionerna av konstruktorer och egenskaper.
  • Nytt returvĂ€rdestyp — statisk.
  • Ny typ — mixed, som kan anvĂ€ndas för att definiera en funktion som tar emot parametrar med olika typer.
  • Uttrycket throw för hantering av undantag.
  • WeakMap för att skapa objekt som kan slĂ€ppas vid skrĂ€pinsamling (t.ex. för att lagra valfria cacher).
  • Möjlighet anvĂ€ndning av uttrycket "::class" för objekt (motsvarande anropet get_class()).
  • Möjlighet definitioner i catch-blocket av undantag som inte Ă€r kopplade till variabler.
  • Möjlighet lĂ€mna ett kommatecken efter det sista elementet i funktionsparameterlistan.
  • Nytt grĂ€nssnitt Stringable 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 str_contains(), 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 fdiv(), som utför division utan att ge felmeddelande vid division med noll.
  • Ändrad 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)’.
  • SkĂ€rpt kontroll av aritmetiska och bitvisa operationer, till exempel uttrycken «[] % [42]» och «$object + 4» kommer att leda till fel.
  • Implementerad ett stabilt sorteringsalgoritm, dĂ€r ordningen pĂ„ lika vĂ€rden bevaras vid olika körningar.

KĂ€lla: opennet.ru

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster