Release fan Psalm 3.12, in statyske analysator foar de PHP-taal. Alpha-útjefte fan PHP 8.0

It bedriuw Vimeo Company publisearre nije release fan statyske analyzer Psalm 3.12, wêrtroch jo sawol foar de hân lizzende as subtile flaters yn PHP-koade kinne identifisearje, en ek guon soarten flaters automatysk korrigearje. It systeem is geskikt foar it identifisearjen fan problemen sawol yn legacy koade as yn koade dy't moderne funksjes brûkt yntrodusearre yn nije tûken fan PHP. De projektkoade is skreaun yn PHP en ferspraat troch ûnder de MIT-lisinsje.

Psalm identifisearret de measte problemen ferbûn mei ferkeard typegebrûk, lykas ferskate typyske flaters. It stipet bygelyks warskôgings oer it mingjen fan fariabelen fan ferskate soarten yn in útdrukking, ferkearde logyske tests (lykas "as ($a && $a) {}", "if ($a && !$a) {}" en " as ($a) {} elseif ($a) {}"), ûnfolsleine inisjalisaasje fan objekteigenskippen. De analyzer rint yn multi-threaded modus. It is mooglik om inkrementele scans út te fieren, dy't allinich bestannen analysearje dy't binne feroare sûnt de lêste scan.

Dêrneist wurde feilige programmearring ark foarsjoen te tastean brûke annotaasjes yn it formaat Docblock ("/** @var Type */") om ynformaasje te jaan oer fariabele typen, weromwearden, funksjeparameters, objekteigenskippen. It definiearjen fan type gebrûkspatroanen en it brûken fan assert-útspraken wurdt ek stipe. Bygelyks:

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

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

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

Om it eliminearjen fan fûn problemen te automatisearjen, wurdt it Psalter-hulpprogramma levere, dat plugins en stipet stiet ta problemen mei mienskiplike koadeproblemen oplosse, typeannotaasjes tafoegje en manipulaasjes útfiere lykas it ferpleatsen fan klassen fan de iene nammeromte nei de oare, it ferpleatsen fan metoaden tusken klassen, en it omneamen fan klassen en metoaden.

Yn it nije nûmer fan Psalm útfierd mei de opsje "--taint-analysis" kinne jo de relaasje trace tusken ynfierparameters ûntfongen fan de brûker (bygelyks $_GET['namme']) en har gebrûk op plakken dy't karakter ûntsnappe (bygelyks echo " $namme "), ynklusyf fia trackingketens fan tuskenlizzende opdrachten en funksjeoproppen. It brûken fan assosjatyf arrays $_GET, $_POST en $_COOKIE wurdt beskôge as boarnen fan mooglik gefaarlike gegevens, mar it is ek mooglik Bestimming fan eigen boarnen. Aksjes dy't ûntsnappings folgjen fereaskje omfetsje útfieroperaasjes dy't HTML-ynhâld generearje, HTTP-headers tafoegje, of SQL-fragen útfiere.

Validaasje wurdt brûkt by it brûken fan funksjes lykas echo, exec, include en header. By it analysearjen fan de needsaak om te ûntkommen, wurde gegevenstypen lykas tekst, stringen mei SQL, HTML en Shell-koade, stringen mei autentikaasjeparameters yn rekken brocht. De foarstelde modus lit jo kwetsberens yn 'e koade identifisearje dy't liede ta cross-site scripting (XSS) of SQL-ferfanging.

Derneist kin it opmurken wurde begjinne alpha-testen fan 'e nije PHP 8.0-tûke. De release is pland foar 26 novimber. It folgjende wurde ferwachte yn de nije branch: ynnovaasjeslykas:

  • Ynklúzje JIT kompilator, wêrfan it gebrûk de produktiviteit ferbetterje sil.
  • stipe union typen, it definiearjen fan kolleksjes fan twa of mear soarten (bygelyks "publike funksje foo(Foo|Bar $ynput): int|float;").
  • stipe attributen (annotaasjes) wêrtroch jo metadata (lykas typeynformaasje) kinne bine oan klassen sûnder Docblock-syntaksis te brûken.
  • Ferkoarte syntaksis klasse definysjes, sadat jo kombinearje de definysje fan in constructor en eigenskippen.
  • Nije return type - statyske.
  • Nij type - mingd, dat kin brûkt wurde om te bepalen oft in funksje akseptearret parameters fan ferskillende soarten.
  • Utdrukking goaie om útsûnderingen te behanneljen.
  • WeakMap om objekten te meitsjen dy't by jiskefet opofferje kinne (bygelyks om ûnnedige caches op te slaan).
  • kâns mei help fan de útdrukking ":: klasse" foar objekten (analooch oan calling get_class ()).
  • kâns definysjes yn it fangen blok fan útsûnderings dy't net bûn oan fariabelen.
  • kâns in komma litte nei it lêste elemint yn 'e list mei funksjeparameters.
  • Nije ynterface Stringable om stringtypen of gegevens te identifisearjen dy't kinne wurde omboud ta in tekenrige (wêrfoar de metoade __toString() beskikber is).
  • Nije funksje str_contains(), in ferienfâldige analoog fan strpos foar it bepalen fan it foarkommen fan in substring, en ek de funksjes str_starts_with() en str_ends_with() foar it kontrolearjen fan oerienkomsten oan it begjin en ein fan in tekenrige.
  • Funksje tafoege fdiv(), dy't in dielingsoperaasje útfiert sûnder in flater te smiten by dielen troch nul.
  • Feroare string joining logika. Bygelyks, de útdrukking 'echo "som:" . $a + $b' waard earder ynterpretearre as 'echo ("som: ". $a) + $b', en yn PHP 8 wurdt behannele as 'echo "sum: ". ($a + $b)'.
  • Oanstutsen kontrolearjen fan arithmetic en bit operaasjes, bygelyks, de útdrukkingen "[] ​​% [42]" en "$ objekt + 4" sil resultearje yn in flater.
  • Implementearre in stabyl sortearjen algoritme wêryn de folchoarder fan identike wearden wurdt bewarre bleaun oer ferskate runs.

Boarne: opennet.ru

Add a comment