A Vimeo cég új verzió a statikus elemzőről , amely lehetővé teszi a nyilvánvaló és nehezen észlelhető hibák azonosítását PHP nyelven írt kódokban, valamint bizonyos hibák automatikus javítását. A rendszer alkalmas problémák azonosítására elavult kódokban, valamint az új PHP ágakban megjelent modern lehetőségeket használó kódokban. A projekt kódja PHP nyelven íródott és MIT licenc alatt áll.
A Psalm a típusok helytelen használatával kapcsolatos problémák nagy részét, valamint különböző . Például támogatja a különböző típusú változók keverésére vonatkozó figyelmeztetések kiadását, hibás logikai ellenőrzéseket (mint például: „if ($a && $a) {}”, „if ($a && !$a) {}” és „if ($a) {} elseif ($a) {}”), a tulajdonságok nem teljes inicializálását. Az elemző több szálon fut. Lehetséges inkrementális ellenőrzések végrehajtása, ahol csak azok a fájlok kerülnek elemzésre, amelyek az utolsó ellenőrzés óta megváltoztak.
További biztonságos programozási eszközöket is biztosít, amelyek lehetővé teszik annotációk formátumban („/** @var Típus * /”) a változók típusaira vonatkozó információk, a visszatérési értékek, a funkciók paraméterei és az objektumok tulajdonságai megadására. Továbbá támogatja a típusok használatának mintáinak meghatározását és az assert kifejezések alkalmazását. 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 instanceof B && $a->isValid();
}
A talált problémák automatikus javítását a Psalter segédprogram biztosítja, amely támogatja a bővítményeket és a tipikus problémák megoldását a kódban, típus annotációk hozzáadását, valamint olyan manipulációk végrehajtását, mint például osztályok áthelyezése egyik névtérből a másikba, metódusok áthelyezése osztályokon belül, osztályok és metódusok átnevezése.
Az új Psalm kiadásban a "—taint-analysis" opció lehetővé teszi a kapcsolat nyomon követését a felhasználótól kapott bemeneti paraméterek (például: $_GET[‘name’]) és azok felhasználása között, ahol karakterek escapingje szükséges (például: echo "<h1>$name</h1>»), beleértve a köztes értékadási láncok és függvényhívások nyomon követését. A potenciálisan veszélyes adatok forrásként figyelembe vehetők az asszociatív tömbök, mint például $_GET, $_POST és $_COOKIE, de ez lehetséges is saját források. A figyelmet igénylő lépések közé tartoznak a kimeneti műveletek, amelyek HTML formátumú tartalom létrehozását, HTTP-fejlécek hozzáadását vagy SQL-lekérdezések végrehajtását eredményezik.
A vizsgálat olyan funkciók használatakor alkalmazandó, mint az echo, exec, include és header. Az escape sorok szükségességének elemzésekor figyelembe kell venni az adatokat, mint például a szöveget, SQL-vel, HTML-lel és Shell-kóddal rendelkező karakterláncokat, valamint az azonosító paraméterekkel rendelkező karakterláncokat. A javasolt mód lehetővé teszi a kódban lévő sebezhetőségek azonosítását, amelyek keresztoldali scripteléshez (XSS) vagy SQL-kód beszúrásához vezetnek.
További megjegyzésként az új PHP 8.0 ág alfa-tesztelése. A kiadás november 26-ra van betervezve. Az új ágban a következők várhatóak: , mint például:
- union típusok
- Támogatás attribútumok
- Támogatás Rövidített szintaxis
- Az új visszatérési érték típusa —
- static .
- mixed kivételkezelésre.
- Kifejezés Olyan objektumok létrehozására, amelyeket el lehet távolítani a szemétgyűjtés során (például opcionális cache-ek tárolására).
- a ‘::class’ kifejezés használata objektumok esetén (hasonló a get_class() hívásához).
- kivételdefiníciók a catch blokkban, amelyek nincsenek a változókhoz kötve.
- a paraméterlista utolsó elemét követő vessző elhagyása.
- Az új Stringable interfész
- a bármilyen string típus vagy adat azonosításához, amely átalakítható stringgé (amelyeknél elérhető a __toString() metódus). , amely a substring előfordulásának meghatározására szolgál, valamint a str_starts_with() és str_ends_with() funkciók a string elején és végén lévő egyezőségek ellenőrzésére.
- runtime.AddCleanup , amely az osztási műveletet hajt végre, anélkül, hogy hibaüzenetet adna vissza, ha nullával osztanak.
- Hozzáadva: a stringek összekapcsolásának logikája. Például a ’echo „sum: ” . $a + $b’ kifejezést korábban úgy értelmezték, mint ‘echo (”sum: ” . $a) + $b’, míg a PHP 8-ban úgy lesz kezelve, mint ‘echo „sum: ” . ($a + $b)’.
- az aritmetikai és bitműveletek ellenőrzését, például a „[] % [42]” és „$object + 4” kifejezések hibát fognak okozni.
- Az új kör forgalmának fenntartása
- az alábbi jellemzőkkel és funkciókkal.
Forrás: opennet.ru
