Išleista 3.12 psalmė, statinis PHP kalbos analizatorius. PHP 8.0 alfa leidimas

Vimeo kompanija опубликовала nauja statinio analizatoriaus versija Ps 3.12, kuri leidžia identifikuoti tiek akivaizdžias, tiek subtilias PHP kode klaidas, taip pat automatiškai ištaisyti kai kurių tipų klaidas. Sistema tinkama identifikuoti problemas tiek sename kode, tiek kode, kuris naudoja modernias funkcijas, įdiegtas naujose PHP šakose. Projekto kodas parašytas PHP ir išplatino pagal MIT licenciją.

Psalmė nurodo daugumą problemų, susijusių su netinkamu šrifto vartojimu, taip pat įvairias tipiškos klaidos. Pavyzdžiui, ji palaiko įspėjimus apie skirtingų tipų kintamųjų maišymą reiškinyje, neteisingus loginius testus (pvz., „if ($a && $a) {}“, „if ($a && !$a) {}“ ir „ if ( $a) {} elseif ($a) {}"), nebaigtas objekto savybių inicijavimas. Analizatorius veikia kelių sriegių režimu. Galima atlikti laipsnišką nuskaitymą, kuris analizuoja tik tuos failus, kurie pasikeitė nuo paskutinio nuskaitymo.

Be to, suteikiami saugūs programavimo įrankiai naudoti formato anotacijos Docblock („/** @var Type */“), kad pateiktų informaciją apie kintamųjų tipus, grąžinimo reikšmes, funkcijų parametrus, objekto savybes. Taip pat palaikomas tipo naudojimo modelių nustatymas ir tvirtinimo teiginių naudojimas. Pavyzdžiui:

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

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

/** @psalm-assert-if-true B $a */
function isValidB(A $a) : bool {
grąžinti $a egzempliorius B && $a->isValid();
}

Norint automatizuoti rastų problemų pašalinimą, pateikiama „Psalter“ programa, kuri palaiko papildinius ir leidžia šalinti įprastas kodo problemas, pridėti tipo anotacijas ir atlikti tokias manipuliacijas kaip klasių perkėlimas iš vienos vardų srities į kitą, metodų perkėlimas tarp klasių ir klasių bei metodų pervadinimas.

Naujame Psalmės numeryje įgyvendinta Parinktis "--taint-analysis" leidžia atsekti ryšį tarp įvesties parametrų, gautų iš vartotojo (pavyzdžiui, $_GET['name']) ir jų naudojimo vietose, kur reikalingas simbolių pašalinimas (pavyzdžiui, echo " $vardas “), įskaitant tarpinių priskyrimų ir funkcijų iškvietimų stebėjimo grandines. Asociatyvinių masyvų $_GET, $_POST ir $_COOKIE naudojimas laikomas potencialiai pavojingų duomenų šaltiniais, tačiau taip pat įmanoma nustatymas nuosavų šaltinių. Veiksmai, kuriems reikalingas pabėgimo stebėjimas, apima išvesties operacijas, kurios generuoja HTML turinį, prideda HTTP antraštes arba vykdo SQL užklausas.

Patvirtinimas naudojamas naudojant tokias funkcijas kaip echo, exec, include ir header. Analizuojant pabėgimo poreikį, atsižvelgiama į duomenų tipus, tokius kaip tekstas, eilutės su SQL, HTML ir Shell kodu, eilutės su autentifikavimo parametrais. Siūlomas režimas leidžia nustatyti kodo pažeidžiamumą, dėl kurio atsiranda scenarijų tarp svetainių (XSS) arba SQL pakeitimas.

Be to, galima pažymėti pradėti naujos PHP 8.0 šakos alfa testavimas. Išleidimas numatytas lapkričio 26 d. Naujajame padalinyje tikimasi: naujovesKaip:

  • Įjungimas JIT kompiliatorius, kurių naudojimas pagerins produktyvumą.
  • Remti sąjungos tipai, apibrėžiantis dviejų ar daugiau tipų rinkinius (pvz., „viešoji funkcija foo(Foo|Bar $input): int|float;“).
  • Remti atributai (anotacijos), leidžiančios susieti metaduomenis (pvz., tipo informaciją) su klasėmis nenaudojant Docblock sintaksės.
  • Sutrumpinta sintaksė klasės apibrėžimai, leidžiantys derinti konstruktoriaus apibrėžimą ir savybes.
  • Naujas grąžinimo tipas - statinis.
  • Naujas tipas - mišrus, kurį galima naudoti norint nustatyti, ar funkcija priima skirtingų tipų parametrus.
  • Išraiška mesti tvarkyti išimtis.
  • Silpnas žemėlapis sukurti objektus, kuriuos būtų galima paaukoti renkant šiukšles (pavyzdžiui, saugoti nereikalingas talpyklas).
  • Galimybė naudojant išraišką „::class“ objektams (analogiškai kaip get_class()).
  • Galimybė apibrėžimai išimčių, nesusietų su kintamaisiais, bloke.
  • Galimybė po paskutinio elemento funkcijos parametrų sąraše paliekant kablelį.
  • Nauja sąsaja Styginiai identifikuoti bet kokius eilučių tipus ar duomenis, kuriuos galima konvertuoti į eilutę (kuriam galimas metodas __toString()).
  • Nauja funkcija str_contains(), supaprastintas strpos analogas, skirtas poeilutės atsiradimui nustatyti, taip pat funkcijos str_starts_with() ir str_ends_with(), skirtos atitikties tikrinimui eilutės pradžioje ir pabaigoje.
  • Pridėta funkcija fdiv(), kuris atlieka padalijimo operaciją nepakeldamas klaidos dalinant iš nulio.
  • Pasikeitė stygų sujungimo logika. Pavyzdžiui, išraiška „echo „sum:“ . $a + $b' anksčiau buvo interpretuojamas kaip 'echo ("sum: " . $a) + $b', o PHP 8 bus traktuojamas kaip 'echo "sum: " . ($a + $b)'.
  • Suveržtas tikrinant aritmetines ir bitų operacijas, pavyzdžiui, posakiai „[] % [42]“ ir „$object + 4“ sukels klaidą.
  • Įgyvendinta stabilus rūšiavimo algoritmas, kuriame išsaugoma identiškų reikšmių tvarka skirtinguose paleidimuose.

Šaltinis: opennet.ru

Добавить комментарий