Psalm 3.12 kaleratzea, PHP hizkuntzarako analizatzaile estatikoa. PHP 8.0 Alpha bertsioa

Vimeo konpainia argitaratuko analizatzaile estatikoen bertsio berria Salmoa 3.12, PHP kodean akats nabariak zein sotilak identifikatzeko aukera ematen duena, baita akats mota batzuk automatikoki zuzentzeko ere. Sistema egokia da arazoak identifikatzeko bai antzinako kodean bai PHPren adar berrietan sartutako ezaugarri modernoak erabiltzen dituen kodean. Proiektuaren kodea PHPn idatzita dago eta arabera banatuta MIT lizentziapean.

Salmoak mota okerren erabilerarekin lotutako arazo gehienak identifikatzen ditu, baita hainbat ere akats tipikoak. Adibidez, adierazpen batean mota ezberdinetako aldagaiak nahasteari buruzko abisuak onartzen ditu, proba logiko okerrak (adibidez, “if ($a && $a) {}”, “if ($a && !$a) {}” eta “ if ($a) {} elseif ($a) {}"), objektuaren propietateen hasieratze osatugabea. Analizagailua hari anitzeko moduan exekutatzen da. Azterketa inkrementalak egin daitezke, azken eskaneatzetik aldatu diren fitxategiak soilik aztertzen dituztenak.

Gainera, programazio tresna seguruak eskaintzen dira baimentzeko erabiltzea oharrak formatuan Docblock ("/** @var Mota */") aldagai motei, itzultzeko balioei, funtzio-parametroei eta objektuen propietateei buruzko informazioa emateko. Moten erabilera-ereduak definitzea eta assert adierazpenak erabiltzea ere onartzen da. Adibidez:

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

/** @var katea $a */
echo strpos($a, 'kaixo');

/** @salm-assert-if-true B $a */
funtzioa baliozkoa daB(A $a): bool {
itzuli $a B-ren instantzia && $a->Valid();
}

Aurkitutako arazoak ezabatzeko automatizatzeko, Psalter utilitatea eskaintzen da, pluginak eta aukera ematen du konpondu ohiko kode-arazoak, gehitu motako oharrak eta egin manipulazioak, esate baterako, klaseak izen-espazio batetik bestera mugitzea, metodoak klaseen artean mugitzea eta klaseak eta metodoak izena aldatzea.

Salmoaren ale berrian ezarrita "--taint-analysis" aukerak erabiltzailearengandik jasotako sarrera-parametroen (adibidez, $_GET['izena']) eta karaktereen ihesa behar duten lekuetan erabiltzearen (adibidez, oihartzuna, adibidez) arteko erlazioa jarraitzeko aukera ematen du. $izena "), tarteko esleipenen eta funtzio-deien jarraipen-kateen bidez barne. $_GET, $_POST eta $_COOKIE matrize elkartuen erabilera arriskutsuak izan daitezkeen datuen iturritzat hartzen dira, baina posible da ere zehaztea iturri propioak. Jarraipenetik ihes egitea eskatzen duten ekintzen artean, HTML edukia sortzen duten irteera-eragiketak, HTTP goiburuak gehitzen dituzte edo SQL kontsultak exekutatzen dituzte.

Balioztatzea echo, exec, include eta goiburua bezalako funtzioak erabiltzean erabiltzen da. Ihes egiteko beharra aztertzerakoan, testua, SQL, HTML eta Shell kodea duten kateak, autentifikazio-parametroak dituzten kateak bezalako datu motak hartzen dira kontuan. Proposatutako moduak aukera ematen du guneen arteko script-a (XSS) edo SQL ordezkapena eragiten duten kodean ahultasunak identifikatzea.

Gainera, nabarmendu daiteke hasteko PHP 8.0 adar berriaren alfa probak. Azaroaren 26rako aurreikusita dago kaleratzea. Adar berrian honako hauek espero dira: berrikuntzakGisa:

  • sartzea JIT konpilatzailea, eta horren erabilerak produktibitatea hobetuko du.
  • Lagundu sindikatu motak, bi motatako edo gehiagoko bildumak definituz (adibidez, “funtzio publikoa foo(Foo|Bar $sarrera): int|float;”).
  • Lagundu atributuak Docblock sintaxia erabili gabe klaseetara metadatuak (adibidez, motaren informazioa) lotzea ahalbidetzen duten (oharpenak).
  • Sintaxia laburtua klaseen definizioak, eraikitzaile baten definizioa eta propietateak konbinatzeko aukera emanez.
  • Itzulketa mota berria - estatiko.
  • Mota berria - mistoa, funtzio batek mota ezberdinetako parametroak onartzen dituen zehazteko erabil daitekeena.
  • adierazpen bota salbuespenak kudeatzeko.
  • WeakMap zabor bilketan sakrifikatu daitezkeen objektuak sortzeko (adibidez, beharrezkoak ez diren cacheak gordetzeko).
  • Aukera Objektuetarako “::class” esamoldea erabiliz (get_class() deitzearen antzekoa).
  • Aukera aldagaiei lotuta ez dauden salbuespenen catch blokeko definizioak.
  • Aukera funtzio-parametroen zerrendako azken elementuaren ondoren koma utziz.
  • Interfaze berria Harizkoa kate batean bihur daitezkeen edozein kate mota edo datu identifikatzeko (horretarako __toString() metodoa eskuragarri dago).
  • Ezaugarri berria str_contains(), azpikate baten agerraldia zehazteko strpos-en analogo sinplifikatua, baita str_starts_with() eta str_ends_with() funtzioak ere, kate baten hasieran eta amaieran bat datozenak egiaztatzeko.
  • Ezaugarri gehitua fdiv(), zatiketa eragiketa bat egiten duena zeroz zatitzean errorerik bota gabe.
  • Aldatua kateak elkartzeko logika. Adibidez, 'echo "sum:" esamoldea. $a + $b' 'oihartzuna' gisa interpretatu zen lehenago ("sum: " . $a) + $b', eta PHP 8-n 'echo "sum: " gisa tratatuko da. ($a + $b)'.
  • Estu eragiketa aritmetikoak eta bitartekoak egiaztatzeak, adibidez, "[] % [42]" eta "$objektua + 4" esamoldeek errore bat eragingo dute.
  • Inplementatua ordenatzeko algoritmo egonkorra, zeinetan balio berdinen ordena exekuzio ezberdinetan gordetzen den.

Iturria: opennet.ru

Gehitu iruzkin berria