Kompania Vimeo lëshimi i ri i analizuesit statik , i cili lejon identifikimin e gabimeve të dukshme dhe të vështira për t'u kapur në kodin PHP, si dhe automatikisht rregullon disa lloje gabimesh. Sistemi është i përshtatshëm për identifikimin e problemeve në kodin e vjetruar, si dhe në kodin që shfrytëzon mundësi moderne të njohura në versionet e reja të PHP. Kodi i projektit është shkruar në PHP dhe nën licencën MIT.
Psalm identifikon shumicën e problemeve që lidhen me përdorimin e papërshtatshëm të tipeve, si dhe një gamë të madhe . Për shembull, ndihmohet nxjerrja e paralajmërimeve mbi përzierjen e variablave me tipe të ndryshme në një shprehje, kontrollet logjike të gabuara (si «if ($a && $a) {}», «if ($a && !$a) {}» dhe «if ($a) {} elseif ($a) {}»), inicializimi i papërfunduar i pronave të objektit. Analizuesi ekzekutohet në modalitetin me shumë thirrje. Ekziston mundësia e kryerjes së kontrolleve inkrementale, ku analiza bëhet vetëm për skedarët që janë ndryshuar që nga kontrolli i fundit.
Përveç kësaj, ofrohen mjete për programim të sigurt, që lejojnë shënimet në formatin («/** @var Type */») për të ofruar informacion në lidhje me tipet e variablave, vlerat e rikthimit, parametrat e funksioneve, pronat e objekteve. Po ashtu mbështetet përcaktimi i skemave të përdorimit të tipeve dhe aplikimi i shprehjeve assert. Për shembull:
/** @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();
}
Për automatizimin e eliminimit të problemeve të gjetura, ofrohet utiliteti Psalter, i cili mbështet pluginët dhe eliminon problemet tipike në kod, shton shënime të tipeve, si dhe kryen veprime të tilla si zhvendosja e klasave nga një hapësirë emrash në një tjetër, zhvendosja e metodave midis klasave, rinovimi i emrave të klasave dhe metodave.
NĂ« lĂ«shimin e ri tĂ« Psalm opsioni «—taint-analysis», e cila lejon lidhjen midis parametrave të hyrjes që përdoruesi i dorëzon (për shembull, $_GET[‘name’]) dhe përdorimit të tyre në vende që kërkojnë ekranuar simbolet (për shembull, echo «<h1>$name</h1>»), përfshirë gjurmimin e rrjeteve të caktimit të mesme dhe thirrjet e funksioneve. Burimet e mundshme të dhënave të rrezikshme përfshijnë përdorimin e arrays asocative $_GET, $_POST dhe $_COOKIE, por është e mundur dhe burimeve tĂ« veta. Nga veprimet qĂ« kĂ«rkojnĂ« ndjekjen e shĂ«njave, shqyrtohen operacionet e nxjerrjes qĂ« çojnĂ« nĂ« krijimin e pĂ«rmbajtjes nĂ« formatin HTML, shtimin e header-ave HTTP ose ekzekutimin e SQL kĂ«rkesave.
Kontrolli aplikohet kur pĂ«rdoren funksione tĂ« tilla si echo, exec, include dhe header. GjatĂ« analizĂ«s sĂ« nevojĂ«s pĂ«r shenjĂ«zim merret parasysh llojet e tĂ« dhĂ«nave, si tekstet, vargjet me SQL, HTML dhe kodin Shell, vargjet me parametrat e autentikimit. ReĆŸimi i propozuar lejon tĂ« identifikohen dobĂ«sitĂ« nĂ« kod qĂ« çojnĂ« nĂ« skriptim ndĂ«rfaqesh (XSS) ose injeksionin e kodit SQL.
Gjithashtu mund të theksohet testimi alfa i deges së re PHP 8.0. Lëshimi është i parashikuar më 26 nëntor. Në degën e re priten , si:
- , aplikimi i të cilit do të lejojë rritjen e performancës.
- Mbështetje , që përcaktojnë koleksione nga dy ose më shumë lloje (për shembuj «public function foo(Foo|Bar $input): int|float;»).
- Mbështetje (annotation), që lejojnë lidhjen e metadatave (për shembuj, informacioni mbi llojet) me klasat pa përdorur sintaksën Docblock.
- e definimeve të klasave, që lejon bashkimin e definimit të konstruktorit dhe vetive.
- Tipi i ri i vlerave tĂ« kthyer â .
- Tipi i ri â , qĂ« mund tĂ« pĂ«rdoret pĂ«r tĂ« pĂ«rcaktuar marrjen nga funksioni tĂ« parametrave me lloje tĂ« ndryshme.
- Shprehja për trajtimin e përjashtimeve.
- për krijimin e objekteve, të cilat mund të sakrifikohen gjatë mbledhjes së plehrave (për shembuj, për të mbajtur cache të opsionalëve).
- përdorimi i shprehjes «::class» për objekte (analog me thirrjen e get_class()).
- definimi në bllokun catch të përjashtimeve, që nuk lidhen me variablat.
- lënia e simbolit të presjes pas elementit të fundit në listën e parametrave të funksionit.
- Ndërfaqja e re për identifikimin e çdo lloji ose të dhënash string të cilat mund të konvertohen në string (për të cilat është e disponueshme metoda __toString()).
- Funksioni i ri , një analog i thjeshtuar i strpos për të përcaktuar praninë e nëndheshës, si dhe funksionet str_starts_with() dhe str_ends_with() për të verifikuar përputhshmëritë në fillim dhe në fund të strings.
- Shtuar funksionin , e cila kryen operacionin e ndarjes pa nxjerrë një gabim në rastin e ndarjes me zero.
- logjika e bashkimit tĂ« strings. PĂ«r shembuj, shprehja âecho «sum: » . $a + $bâ mĂ« parĂ« interpretohej si âecho («sum: » . $a) + $bâ, ndĂ«rsa nĂ« PHP 8 do tĂ« trajtohet si âecho «sum: » . ($a + $b)â.
- kontrolli i operacioneve aritmetike dhe bitore, për shembuj, shprehjet «[] % [42]» dhe «$object + 4» do të çojnë në një gabim.
- algoritmi stabil i renditjes, ku gjatë ekzekutimeve të ndryshme ruhet rendi i ndjekjes së vlerave të njëjta.
Burimi: opennet.ru
