Lëshimi i Psalm 3.12, një analizues statik për gjuhën PHP. Lëshimi alfa i PHP 8.0

Kompania Vimeo publikoi lëshimi i ri i analizuesit statik Psalm 3.12, 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 shpërndahet 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 gabimeve tipike. 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ë të përdorë shënimet në formatin Docblock («/** @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 mundëson 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 Ă«shtĂ« implementuar 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 pĂ«rcaktimi 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 fillimi testimi alfa i deges së re PHP 8.0. Lëshimi është i parashikuar më 26 nëntor. Në degën e re priten innovations, si:

  • Futja e JIT-kompilatorit, aplikimi i tĂ« cilit do tĂ« lejojĂ« rritjen e performancĂ«s.
  • MbĂ«shtetje tipet unioni, qĂ« pĂ«rcaktojnĂ« koleksione nga dy ose mĂ« shumĂ« lloje (pĂ«r shembuj «public function foo(Foo|Bar $input): int|float;»).
  • MbĂ«shtetje atributet (annotation), qĂ« lejojnĂ« lidhjen e metadatave (pĂ«r shembuj, informacioni mbi llojet) me klasat pa pĂ«rdorur sintaksĂ«n Docblock.
  • Sintaksa e shkurtuar e definimeve tĂ« klasave, qĂ« lejon bashkimin e definimit tĂ« konstruktorit dhe vetive.
  • Tipi i ri i vlerave tĂ« kthyer — static.
  • Tipi i ri — mixed, qĂ« mund tĂ« pĂ«rdoret pĂ«r tĂ« pĂ«rcaktuar marrjen nga funksioni tĂ« parametrave me lloje tĂ« ndryshme.
  • Shprehja throw pĂ«r trajtimin e pĂ«rjashtimeve.
  • WeakMap 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).
  • MundĂ«sia pĂ«rdorimi i shprehjes «::class» pĂ«r objekte (analog me thirrjen e get_class()).
  • MundĂ«sia definimi nĂ« bllokun catch tĂ« pĂ«rjashtimeve, qĂ« nuk lidhen me variablat.
  • MundĂ«sia lĂ«nia e simbolit tĂ« presjes pas elementit tĂ« fundit nĂ« listĂ«n e parametrave tĂ« funksionit.
  • NdĂ«rfaqja e re Stringable 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 str_contains(), 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 fdiv(), e cila kryen operacionin e ndarjes pa nxjerrĂ« njĂ« gabim nĂ« rastin e ndarjes me zero.
  • E modifikuar 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)’.
  • E rritur kontrolli i operacioneve aritmetike dhe bitore, pĂ«r shembuj, shprehjet «[] % [42]» dhe «$object + 4» do tĂ« çojnĂ« nĂ« njĂ« gabim.
  • Ă«shtĂ« realizuar algoritmi stabil i renditjes, ku gjatĂ« ekzekutimeve tĂ« ndryshme ruhet rendi i ndjekjes sĂ« vlerave tĂ« njĂ«jta.

Burimi: opennet.ru

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster