VĂ€ljaanne Psalm 3.12, staatilise analĂŒsaatori jaoks PHP keelele. Alpha vĂ€ljaanne PHP 8.0

Vimeo ettevĂ”te avalikustasin uue staatilise analĂŒsaatori vĂ€ljaanne Psalm 3.12, 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 GNU Üldine Avaliku litsentsi alusel. on MIT litsentsi all.

Psalm tuvastab enamik probleeme, mis on seotud tĂŒĂŒpide vale kasutamisega, samuti erinevad tĂŒĂŒpilised vead. 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 kasutada annotatsioone vormingus Docblock («/** @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 lubab 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 on rakendatud 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 mÀÀratlemisele 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 algus PHP 8.0 uue haru alfa-testimine. VÀljalase on planeeritud 26. novembriks. Uues haru oodatakse selliseid uuendused, nagu:

  • KĂ€ivitamine JIT-kompilaator, mille rakendamine vĂ”imaldab suurendada jĂ”udlust.
  • Tugi ĂŒhend-tyĂŒpide, mis mÀÀratlevad kollektsioonid, mis koosnevad kahest vĂ”i enamast tĂŒĂŒbist (nt „public function foo(Foo|Bar $input): int|float;“).
  • Tugi atribuutide (annotatsioonide), mis vĂ”imaldavad siduda metaandmeid (nt teavet tĂŒĂŒpide kohta) klassidega ilma Docblock sĂŒntaksit kasutamata.
  • LĂŒhendatud sĂŒntaks klasside mÀÀratlemiseks, mis vĂ”imaldab kombineerida konstruktori ja omaduste mÀÀratlemise.
  • Uus tagastatavate vÀÀrtuste tĂŒĂŒp — staatiline.
  • Uus tĂŒĂŒp — mixed, mida saab kasutada funktsioonile erinevate tĂŒĂŒpide parameetrite mÀÀratlemiseks.
  • VĂ€ljend viska erandite töötlemiseks.
  • WeakMap objektide loomiseks, millest on vĂ”imalik loobuda prĂŒgi kogumise ajal (nĂ€iteks valikuliste vahetaminekube hoidmiseks).
  • VĂ”imalus vĂ€ljendi „::class“ kasutamine objektide jaoks (sarnane get_class() vĂ€ljakutsetega).
  • VĂ”imalus erandite mÀÀratlemine catch plokis, mida ei seostata muutujatega.
  • VĂ”imalus viimane element funktsiooni parameetrite nimekirjas koma sĂŒmboli jĂ€tmine.
  • Uus liides Stringable kĂ”ikide stringi tĂŒĂŒpide vĂ”i andmete identifitseerimiseks, mida saab muuta stringiks (kellel on meetod __toString()).
  • Uus funktsioon str_contains(), 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 fdiv(), teostab jagamistehte, ilma et tekiks viga jagamisel nulliga.
  • Muudetud 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)’.
  • Tugevdatud aritmeetiliste ja bititegevuste kontroll, nĂ€iteks vĂ€ljendid «[] % [42]» ja «$object + 4» pĂ”hjustavad vea.
  • Tehtud stabiilne sortimise algoritm, kus erinevate kĂ€ivituste ajal sĂ€ilitatakse sama vÀÀrtuse jĂ€rjestus.

Allikas: opennet.ru

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster