Psalm 3.12, staatilise analĂŒsaatori vĂ€ljalase PHP keele jaoks. PHP 8.0 alfa versioon

Vimeo ettevĂ”te avalikustas uus staatilise analĂŒĂŒsija vĂ€ljaanne Psalm 3.12, 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 levitatakse MIT litsentsi alusel.

Psalm tuvastab suurema osa probleemidest, mis on seotud tĂŒĂŒpide vale kasutamisega, samuti erinevad tĂŒĂŒpilised vead. 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 kasutama annotatsioone formaadis Docblock („/** @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 kaugelt sulgeda vahekaarte, mis on avatud teistel seadmetel. 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 rakendatud 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 defineerimine 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 esinev PHP 8.0 uue haru alfa-testimine. Vabastamine on planeeritud 26. novembriks. Uues harus oodatakse jÀrgmisi uuendused, nÀiteks:

  • Sissekasutamine JIT-kompilaatorit,, mille rakendamine parandab jĂ”udlust.
  • Tugi liidestiile,, mis mÀÀratlevad kogusid kahest vĂ”i enamast tĂŒĂŒbist (nt "public function foo(Foo|Bar $input): int|float;").
  • Tugi atribuutide (annotatsioonide), mis vĂ”imaldavad siduda metaandmeid (nt tĂŒĂŒbine teave) klasside kĂŒlge ilma Docblocki sĂŒntaksita.
  • LĂŒhendatud sĂŒntaks klasside mÀÀratlemiseks, mis vĂ”imaldab konstruktorite ja omaduste mÀÀratlemise kombineerimist.
  • Uus tagastatav tĂŒĂŒp — static.
  • Uus tĂŒĂŒp — mixed,, mida saab kasutada funktsiooni parameetrite mÀÀratlemiseks, mis vĂ”tavad erinevaid tĂŒĂŒpe.
  • MĂ€rkuse throw erindite töötlemiseks.
  • WeakMap objektide loomiseks, mida vĂ”ib prĂŒgi kogumise ajal Ă€ra visata (nt valikulise vahemĂ€lu hoidmiseks).
  • VĂ”imalus kasutades vĂ€ljendit "::class" objektide jaoks (samavÀÀrne get_class() kutsumisega).
  • VĂ”imalus erindite mÀÀratlemiseks catch plokis, mis ei ole seotud muutujatega.
  • VĂ”imalus komma jĂ€tmise vĂ”imaldamiseks parameetrite loendis viimasest elemendist.
  • Uus liides Stringable iga stringi tĂŒĂŒbi vĂ”i andmete tuvastamiseks, mida saab stringiks muuta (kelle jaoks on saadaval meetod __toString()).
  • Uus funktsioon str_contains(),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 fdiv(),, mis teostab jagamisoperatsiooni, ilma et tekiks viga jagamisel nulliga.
  • Muutunud 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 aritmeetika ja bititehete kontroll, nĂ€iteks vĂ€ljendid «[] % [42]» ja «$object + 4» toovad kaasa vea.
  • Teostatud stabiilne sorteerimisalgoritm, kus erinevatel kĂ€ivitustel sĂ€ilitatakse sama vÀÀrtuse jĂ€rjekord.

Allikas: opennet.ru

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster