Vimeo ettevĂ”te uue staatilise analĂŒsaatori vĂ€ljaanne , mis tuvastab nii ilmsed kui ka raskesti mĂ€rgatavad vead PHP keeles kirjutatud koodis ning parandab automaatselt teatud tĂŒĂŒpi vigu. SĂŒsteem sobib probleemide avastamiseks nii vananenud koodis kui ka koodis, mis kasutab uusi vĂ”imalusi, mis on tekkinud PHP uutes harudes. Projekti kood on kirjutatud PHP keeles ja on MIT litsentsi all.
Psalm tuvastab enamik probleeme, mis on seotud tĂŒĂŒpide vale kasutamisega, samuti erinevad . NĂ€iteks toetatakse hoiatuste vĂ€ljastamist segamise kohta muutujate vahel erinevates tĂŒĂŒpides, vale loogiliste kontrollide puhul (nt âif ($a && $a) {}â, âif ($a && !$a) {}â ja âif ($a) {} elseif ($a) {}â), objekti omaduste mittetĂ€ielik algatamine. AnalĂŒsaator töötab lĂ”imede reĆŸiimis. On vĂ”imalik teostada inkrementaalseid kontrollimisi, kus analĂŒĂŒsitakse ainult faile, mis on muutunud alates viimase kontrollimise ajast.
Lisaks on saadaval ohutu programmeerimise vahendid, mis vĂ”imaldavad annotatsioone vormingus («/** @var Type */») muutujatĂŒĂŒpide, tagastatavate vÀÀrtuste, funktsiooniparametrite ja objekti omaduste teabe edastamiseks. Samuti toetatakse tĂŒĂŒpide kasutusmallide mÀÀratlemist ja assert-kĂ€skluste 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();
}
Leitud probleemide automaatseks lahendamiseks on olemas utiliit Psalter, mis toetab pluginaid ja lahendab koodis tĂŒĂŒpilisi probleeme, lisab tĂŒĂŒpide annotatsioone ning teostab selliseid toiminguid nagu klasside liigutamine ĂŒhest nimestikku teise, meetodite liigutamine klasside vahel, klasside ja meetodite nimede muutmine.
Uues Pilaris valik «—taint-analysis», mis võimaldab jälgida seoseid kasutajalt saadud sisendparameetrite (näiteks $_GET[‘name’]) ja nende kasutamise vahel kohtades, kus on vajalik sümbolite escaping (nt echo «<h1>$name</h1>»), sealhulgas jälgides vahepealseid määramisi ja funktsioonikutsungite ahelat. Potentsiaalselt ohtlike andmete allikateks peetakse assotsiatiivsete massiivide kasutamist $_GET, $_POST ja $_COOKIE, kuid mõeldav on ka oma allikatest. Ekstraheerimise jĂ€lgimist vajavad toimingud hĂ”lmavad vĂ€ljundite operatsioone, mis viivad HTML-formaadis sisu genereerimise, HTTP-pealkirjade lisamise vĂ”i SQL-pĂ€ringute tĂ€itmiseni.
Kontroll rakendub selliste funktsioonide kasutamisel nagu echo, exec, include ja header. Andmete eristamisel, mis vajavad escape'i, arvestatakse andmetĂŒĂŒpe, nagu tekst, SQL stringid, HTML ja shell-kood, autentimisparameetrite stringid. Pakutud reĆŸiim vĂ”imaldab tuvastada koodis haavatavusi, mis vĂ”ivad viia XSS (Cross-Site Scripting) vĂ”i SQL-i sisestamise rĂŒnnakuteni.
Lisaks saab mÀrkida PHP 8.0 uue haru alfa-testimine. VÀljalase on planeeritud 26. novembriks. Uues haru oodatakse selliseid , nagu:
- , mille rakendamine vÔimaldab suurendada jÔudlust.
- Tugi , mis mÀÀratlevad kollektsioonid, mis koosnevad kahest vĂ”i enamast tĂŒĂŒbist (nt âpublic function foo(Foo|Bar $input): int|float;â).
- Tugi (annotatsioonide), mis vĂ”imaldavad siduda metaandmeid (nt teavet tĂŒĂŒpide kohta) klassidega ilma Docblock sĂŒntaksit kasutamata.
- klasside mÀÀratlemiseks, mis vÔimaldab kombineerida konstruktori ja omaduste mÀÀratlemise.
- Uus tagastatavate vÀÀrtuste tĂŒĂŒp â .
- Uus tĂŒĂŒp â , mida saab kasutada funktsioonile erinevate tĂŒĂŒpide parameetrite mÀÀratlemiseks.
- VÀljend erandite töötlemiseks.
- objektide loomiseks, millest on vĂ”imalik loobuda prĂŒgi kogumise ajal (nĂ€iteks valikuliste vahetaminekube hoidmiseks).
- vĂ€ljendi â::classâ kasutamine objektide jaoks (sarnane get_class() vĂ€ljakutsetega).
- erandite mÀÀratlemine catch plokis, mida ei seostata muutujatega.
- viimane element funktsiooni parameetrite nimekirjas koma sĂŒmboli jĂ€tmine.
- Uus liides kĂ”ikide stringi tĂŒĂŒpide vĂ”i andmete identifitseerimiseks, mida saab muuta stringiks (kellel on meetod __toString()).
- Uus funktsioon , lihtsustatud analoog strpos-st, et mÀÀrata alammÀngu esinemist ning funktsioonid str_starts_with() ja str_ends_with(), et kontrollida vastavust stringi alguses ja lÔpus.
- Lisa funktsionaalsus , teostab jagamistehte, 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)â.
- aritmeetiliste ja bititegevuste kontroll, nÀiteks vÀljendid «[] % [42]» ja «$object + 4» pÔhjustavad vea.
- stabiilne sortimise algoritm, kus erinevate kÀivituste ajal sÀilitatakse sama vÀÀrtuse jÀrjestus.
Allikas: opennet.ru
