Megjelent a Psalm 3.12, a PHP nyelv statikus elemzője. A PHP 8.0 alfa kiadása

Vimeo Társaság közzétett statikus analizátor új kiadása Zsoltárok 3.12, amely lehetővé teszi a PHP-kód nyilvánvaló és finom hibáinak azonosítását, valamint bizonyos típusú hibák automatikus kijavítását. A rendszer alkalmas mind a régebbi, mind a PHP új ágaiban bevezetett modern szolgáltatásokat használó kódok problémáinak azonosítására. A projekt kódja PHP és forgalmazza az MIT engedélye alapján.

A Zsoltár azonosítja a legtöbb, a helytelen típushasználattal kapcsolatos problémát, valamint különféle tipikus hibák. Például támogatja a figyelmeztetéseket a különböző típusú változók egy kifejezésben való keverésére, a helytelen logikai teszteket (például „if ($a && $a) {}”, „if ($a && !$a) {}” és „ if ( $a) {} elseif ($a) {}"), az objektumtulajdonságok hiányos inicializálása. Az analizátor többszálas üzemmódban működik. Lehetőség van növekményes ellenőrzések végrehajtására, amelyek csak azokat a fájlokat elemzik, amelyek az utolsó vizsgálat óta megváltoztak.

Ezenkívül biztonságos programozási eszközök állnak rendelkezésre, amelyek lehetővé teszik használatához megjegyzéseket a formátumban Docblock (“/** @var Type */”), hogy információkat adjon a változótípusokról, visszatérési értékekről, függvényparaméterekről és objektumtulajdonságokról. A típushasználati minták meghatározása és az assert utasítások használata szintén támogatott. Például:

/** @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 példánya B && $a->isValid();
}

A talált problémák kiküszöbölésének automatizálásához rendelkezésre áll a Psalter segédprogram, amely támogatja a bővítményeket és a lehetővé teszi Elháríthatja a gyakori kódproblémákat, hozzáadhat típusjegyzeteket, és olyan manipulációkat hajthat végre, mint például osztályok áthelyezése egyik névtérből a másikba, metódusok áthelyezése az osztályok között, valamint osztályok és metódusok átnevezése.

A Zsoltár új számában végrehajtva a "--taint-analysis" opció lehetővé teszi a felhasználótól kapott bemeneti paraméterek (például $_GET['name']) és azok használatának követését azokon a helyeken, ahol szükség van karakterkihagyásra (például echo " $név "), beleértve a közbenső hozzárendelések és funkcióhívások nyomkövetési láncait is. A $_GET, $_POST és $_COOKIE asszociatív tömbök használata potenciálisan veszélyes adatok forrásának tekinthető, de ez is lehetséges определение saját források. A megmenekülést igénylő műveletek közé tartoznak azok a kimeneti műveletek, amelyek HTML-tartalmat generálnak, HTTP-fejléceket adnak hozzá, vagy SQL-lekérdezéseket hajtanak végre.

Az érvényesítés olyan függvények használatakor használatos, mint az echo, exec, include és header. A menekülés szükségességének elemzésekor figyelembe veszik az olyan adattípusokat, mint a szöveg, SQL-, HTML- és Shell-kóddal rendelkező karakterláncok, hitelesítési paraméterekkel rendelkező karakterláncok. A javasolt mód lehetővé teszi a kód azon sérülékenységeinek azonosítását, amelyek webhelyek közötti parancsfájl-kezeléshez (XSS) vagy SQL-helyettesítéshez vezetnek.

Ezenkívül meg lehet jegyezni indul az új PHP 8.0 ág alfa tesztelése. A megjelenés november 26-ra várható. Az új fiókban a következők várhatók: innovációkAs:

  • befogadás JIT fordító, amelyek használata javítja a termelékenységet.
  • támogatás szakszervezeti típusok, amely két vagy több típusú gyűjteményt határoz meg (például „public function foo(Foo|Bar $input): int|float;”).
  • támogatás attribútumokat (annotációk), amelyek lehetővé teszik metaadatok (például típusinformációk) osztályokhoz való kötését Docblock szintaxis használata nélkül.
  • Rövidített szintaxis osztálydefiníciókat, lehetővé téve a konstruktor definíciójának és a tulajdonságok kombinálását.
  • Új visszaküldési típus - statikus.
  • Új típus - vegyes, amellyel megállapítható, hogy egy függvény elfogad-e különböző típusú paramétereket.
  • kifejezés dobás a kivételek kezelésére.
  • WeakMap szemétgyűjtés során feláldozható objektumok létrehozására (például szükségtelen gyorsítótárak tárolására).
  • Alkalom a „::class” kifejezést használva az objektumokhoz (a get_class() hívásához hasonlóan).
  • Alkalom definíciók a változókhoz nem kötött kivételek fogási blokkjában.
  • Alkalom a függvényparaméterek listájában az utolsó elem után vesszőt hagyva.
  • Új felület Feszélhető hogy azonosítsa azokat a karakterlánctípusokat vagy adatokat, amelyek karakterláncokká alakíthatók (amelyhez elérhető a __toString() metódus).
  • Új funkció str_contains(), az strpos egyszerűsített analógja egy részkarakterlánc előfordulásának meghatározására, valamint az str_starts_with() és str_ends_with() függvények a karakterlánc elején és végén lévő egyezések ellenőrzésére.
  • Funkció hozzáadva fdiv(), amely osztási műveletet hajt végre anélkül, hogy hibát dobna, ha nullával osztjuk.
  • Megváltozott karakterlánc-csatlakozási logika. Például az 'echo "sum:" kifejezés. Az $a + $b' korábban 'echo ("sum: " . $a) + $b'-ként volt értelmezve, a PHP 8-ban pedig 'echo "sum: "-ként fog kezelni. ($a + $b)”.
  • Megfeszítve az aritmetikai és bitműveletek ellenőrzése, például a "[] % [42]" és a "$object + 4" kifejezések hibát eredményeznek.
  • Megvalósítva egy stabil rendezési algoritmus, amelyben az azonos értékek sorrendje megőrződik a különböző futtatások során.

Forrás: opennet.ru

Hozzászólás