PHP keele staatilise analüsaatori Psalm 3.12 väljalase. PHP 8.0 alfaväljalase

Vimeo ettevõte опубликовала staatilise analüsaatori uus versioon Psalm 3.12, mis võimaldab tuvastada nii ilmseid kui ka peeneid vigu PHP-koodis, samuti automaatselt parandada teatud tüüpi vigu. Süsteem sobib probleemide tuvastamiseks nii pärandkoodis kui ka koodis, mis kasutab PHP uutes harudes kasutusele võetud kaasaegseid funktsioone. Projekti kood on kirjutatud PHP ja jaotatud MIT litsentsi alusel.

Psalm tuvastab enamiku vale tüübikasutusega seotud probleemidest, aga ka mitmesugused tüüpilised vead. Näiteks toetab see hoiatusi erinevat tüüpi muutujate segamise kohta avaldises, valesid loogilisi teste (nt "if ($a && $a) {}", "if ($a && !$a) {}" ja " if ( $a) {} elseif ($a) {}"), objekti omaduste mittetäielik lähtestamine. Analüsaator töötab mitme keermega režiimis. Võimalik on teostada astmelist kontrolli, mis analüüsib ainult pärast viimast kontrolli muutunud faile.

Lisaks pakutakse selleks turvalisi programmeerimistööriistu kasutage vormingus märkused Docblock (“/** @var Type */”), et anda teavet muutujatüüpide, tagastusväärtuste, funktsiooniparameetrite ja objekti omaduste kohta. Toetatud on ka tüüpide kasutusmustrite määratlemine ja kinnituslausete kasutamine. Näiteks:

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

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

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

Leitud probleemide kõrvaldamise automatiseerimiseks pakutakse utiliiti Psalter, mis toetab pistikprogramme ja võimaldab saate teha levinud koodiprobleemide tõrkeotsingut, lisada tüübimärkusi ja teha selliseid manipuleerimisi, nagu klasside teisaldamine ühest nimeruumist teise, meetodite teisaldamine klasside vahel ning klasside ja meetodite ümbernimetamine.

Psalmi uues numbris rakendatud suvand "--taint-analysis" võimaldab teil jälgida seost kasutajalt saadud sisendparameetrite (näiteks $_GET['nimi']) ja nende kasutamise vahel kohtades, mis nõuavad märkide vältimist (näiteks echo " $nimi "), sealhulgas vaheülesannete ja funktsioonikutsete jälgimisahelate kaudu. Assotsiatiivsete massiivide $_GET, $_POST ja $_COOKIE kasutamist peetakse potentsiaalselt ohtlike andmete allikateks, kuid see on ka võimalik määramine oma allikad. Toimingud, mis nõuavad vältimise jälgimist, hõlmavad väljundtoiminguid, mis genereerivad HTML-i sisu, lisavad HTTP-päiseid või käivitavad SQL-päringuid.

Valideerimist kasutatakse selliste funktsioonide nagu echo, exec, include ja header kasutamisel. Põgenemise vajaduse analüüsimisel võetakse arvesse andmetüüpe nagu tekst, stringid SQL-, HTML- ja Shell-koodiga, autentimisparameetritega stringid. Pakutud režiim võimaldab tuvastada koodi haavatavused, mis viivad saidiülese skriptimise (XSS) või SQL-i asendamiseni.

Lisaks võib märkida alguse uue PHP 8.0 haru alfatestimine. Väljalaskmine on kavandatud 26. novembrile. Uude esindusse on oodata järgmist: uuendusedNäiteks:

  • Kaasamine JIT kompilaator, mille kasutamine suurendab tootlikkust.
  • Toetama liidu tüübid, mis määratleb kahte või enamat tüüpi kogusid (näiteks "avalik funktsioon foo(Foo|Bar $input): int|float;").
  • Toetama atribuudid (märkused), mis võimaldavad teil siduda metaandmeid (nt tüübiteavet) klassidega ilma Docblocki süntaksit kasutamata.
  • Lühendatud süntaks klassi definitsioonid, mis võimaldab kombineerida konstruktori määratlust ja atribuute.
  • Uus tagastustüüp - staatiline.
  • Uus tüüp - segatud, mille abil saab määrata, kas funktsioon aktsepteerib erinevat tüüpi parameetreid.
  • Väljendus viskama erandite käsitlemiseks.
  • Nõrk kaart luua objekte, mida saab prügikoristusel ohverdada (näiteks tarbetute vahemälude hoidmiseks).
  • Võimalus kasutades objektide jaoks väljendit “::class” (analoogselt get_class() kutsumisega).
  • Võimalus definitsioonid erandite püüdmisplokis, mis ei ole muutujatega seotud.
  • Võimalus jättes funktsiooni parameetrite loendis viimase elemendi järele koma.
  • Uus liides Jõuline mis tahes stringitüüpide või andmete tuvastamiseks, mida saab stringiks teisendada (mille jaoks on saadaval meetod __toString()).
  • Uus funktsioon str_contains(), strpos-i lihtsustatud analoog alamstringi esinemise määramiseks, samuti funktsioonid str_starts_with() ja str_ends_with() stringi alguses ja lõpus olevate vastete kontrollimiseks.
  • Lisatud funktsioon fdiv(), mis sooritab jagamistehte ilma nulliga jagamisel viga tekitamata.
  • Muudetud stringide ühendamise loogika. Näiteks väljend 'echo "sum:" . $a + $b' oli varem tõlgendatud kui 'echo ("summa: " . $a) + $b' ja PHP 8-s käsitletakse seda kui 'echo "sum: " . ($a + $b)”.
  • Pingutatud aritmeetiliste ja bitioperatsioonide kontrollimisel, näiteks avaldised "[] % [42]" ja "$object + 4" annavad tulemuseks vea.
  • Rakendatud stabiilne sortimisalgoritm, milles säilitatakse identsete väärtuste järjekord erinevatel käikudel.

Allikas: opennet.ru

Lisa kommentaar