Vimeo ettevĂ”te uus staatilise analĂŒĂŒsija vĂ€ljaanne , mis tuvastab nii ilmseid kui ka raskesti tabatavaid vigu PHP keeles kirjutatud koodis ning suudab automaatselt parandada mĂ”ningaid vigu. SĂŒsteem sobib probleemide tuvastamiseks nii vananenud koodis kui ka koodis, mis kasutab uusi vĂ”imalusi, mis on saadaval uutes PHP harudes. Projekti kood on kirjutatud PHP keeles ja MIT litsentsi alusel.
Psalm tuvastab suurema osa probleemidest, mis on seotud tĂŒĂŒpide vale kasutamisega, samuti erinevad . NĂ€iteks toetatakse hoiatuste vĂ€ljastamist muutujate tĂŒĂŒbid, mis on vĂ€ljendites segatud, ning vale loogilisi kontrollimisi (nt âif ($a && $a) {}â, âif ($a && !$a) {}â ja âif ($a) {} elseif ($a) {}â), objekti omaduste mittetĂ€ielikku initsialiseerimist. AnalĂŒĂŒsija töötab mitme lĂ”ime reĆŸiimis. On vĂ”imalik teostada inkrementaalseid kontrollimisi, kus analĂŒĂŒsitakse ainult faile, mis on muutunud alates eelmise kontrollimise hetkest.
Lisaks pakutakse turvalise programmeerimise vahendeid, mis vĂ”imaldavad annotatsioone formaadis (â/** @var Type */â) muutujate tĂŒĂŒpide, tagastatavates vÀÀrtustes, funktsioonide argumentides, objektide omadustes teabe edastamiseks. Samuti toetatakse tĂŒĂŒpide kasutuse mustrite mÀÀratlemist ja assert-vĂ€ljendite rakendamist. NĂ€iteks:
/** @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();
}
Probleemide automaatseks kĂ”rvaldamiseks pakutakse utiliiti Psalter, mis toetab pluginaid ja koodis leitud tĂŒĂŒpiliste probleemide kĂ”rvaldamist, tĂŒĂŒbifunktsioonide lisamist ning teostada selliseid toiminguid nagu klasside liigutamine ĂŒhest nimede ruumist teise, meetodite liigutamine klasside vahel, klasside ja meetodite ĂŒmbernimetamine.
Uues vĂ€ljaandes Psalm valik «—taint-analysis», mis võimaldab jälgida seoseid kasutajalt saadud sisendparameetrite (nt $_GET[‘name’]) ja nende kasutamise vahel kohtades, kus on vajalik märkide põgenemine (nt echo «<h1>$name</h1>»), sealhulgas jälgides vahekokkuvõtteid ja funktsiooni kutsumisi. Potentsiaalselt ohtlike andmete allikateks peetakse seotud massiivide kasutamist $_GET, $_POST ja $_COOKIE, kuid võimalik on ka oma allikaid. Tegevused, mis nĂ”uavad jĂ€lgimist, hĂ”lmavad vĂ€ljundioperatsioone, mis toovad kaasa HTML formaadis sisu genereerimise, HTTP-pĂ”hiselt lisatud pĂ€iseid vĂ”i SQL-pĂ€ringute tĂ€itmist.
Kontrolli rakendatakse selliste funktsioonide kasutamisel nagu echo, exec, include ja header. Analuusides vajadust pĂ”geneda, arvestatakse andmetĂŒĂŒpe nagu tekst, SQL, HTML ja Shell-kood, autentimisparameetrite stringid. Pakutud reĆŸiim vĂ”imaldab tuvastada koodis haavatavusi, mis viivad ristsaidimise skriptimise (XSS) vĂ”i SQL-koodi sisestamiseni.
Lisaks vÔib mÀrkida PHP 8.0 uue haru alfa-testimine. Vabastamine on planeeritud 26. novembriks. Uues harus oodatakse jÀrgmisi , nÀiteks:
- , mille rakendamine parandab jÔudlust.
- Tugi , mis mÀÀratlevad kogusid kahest vĂ”i enamast tĂŒĂŒbist (nt "public function foo(Foo|Bar $input): int|float;").
- Tugi (annotatsioonide), mis vĂ”imaldavad siduda metaandmeid (nt tĂŒĂŒbine teave) klasside kĂŒlge ilma Docblocki sĂŒntaksita.
- klasside mÀÀratlemiseks, mis vÔimaldab konstruktorite ja omaduste mÀÀratlemise kombineerimist.
- Uus tagastatav tĂŒĂŒp â .
- Uus tĂŒĂŒp â , mida saab kasutada funktsiooni parameetrite mÀÀratlemiseks, mis vĂ”tavad erinevaid tĂŒĂŒpe.
- MÀrkuse erindite töötlemiseks.
- objektide loomiseks, mida vĂ”ib prĂŒgi kogumise ajal Ă€ra visata (nt valikulise vahemĂ€lu hoidmiseks).
- kasutades vÀljendit "::class" objektide jaoks (samavÀÀrne get_class() kutsumisega).
- erindite mÀÀratlemiseks catch plokis, mis ei ole seotud muutujatega.
- komma jÀtmise vÔimaldamiseks parameetrite loendis viimasest elemendist.
- Uus liides iga stringi tĂŒĂŒbi vĂ”i andmete tuvastamiseks, mida saab stringiks muuta (kelle jaoks on saadaval meetod __toString()).
- Uus funktsioon lihtsustatud vaste strpos'ile alamhulga mÀÀramiseks, samuti funktsioonid str_starts_with() ja str_ends_with() stringi alguses ja lÔpus vastavuse kontrollimiseks.
- Lisatud on funktsioon , mis teostab jagamisoperatsiooni, ilma et tekiks viga jagamisel nulliga.
- stringide ĂŒhendamise loogika. NĂ€iteks vĂ€ljend âecho «sum: » . $a + $bâ tĂ”lgendati varem kui âecho («sum: » . $a) + $bâ, kuid PHP 8-s töödeldakse seda kui âecho «sum: » . ($a + $b)â.
- aritmeetika ja bititehete kontroll, nÀiteks vÀljendid «[] % [42]» ja «$object + 4» toovad kaasa vea.
- stabiilne sorteerimisalgoritm, kus erinevatel kÀivitustel sÀilitatakse sama vÀÀrtuse jÀrjekord.
Allikas: opennet.ru
