Kompania Vimeo lëshimi i ri i analizuesit statik , i cili ju lejon të identifikoni gabime të dukshme dhe delikate në kodin PHP, si dhe të korrigjoni automatikisht disa lloje gabimesh. Sistemi është i përshtatshëm për identifikimin e problemeve si në kodin e vjetër, ashtu edhe në kodin që përdor veçori moderne të prezantuara në degët e reja të PHP. Kodi i projektit është i shkruar në PHP dhe nën licencën MIT.
Psalmi identifikon shumicĂ«n e problemeve qĂ« lidhen me pĂ«rdorimin e llojit tĂ« gabuar, si dhe tĂ« ndryshme . PĂ«r shembull, ai mbĂ«shtet paralajmĂ«rime pĂ«r pĂ«rzierjen e variablave tĂ« llojeve tĂ« ndryshme nĂ« njĂ« shprehje, teste logjike tĂ« pasakta (tĂ« tilla si "if ($a && $a) {}", "if ($a && !$a) {}" dhe " if ( $a) {} elseif ($a) {}"), inicializimi jo i plotĂ« i vetive tĂ« objektit. Analizuesi funksionon nĂ« modalitetin me shumĂ« fije. ĂshtĂ« e mundur tĂ« kryhen skanime nĂ« rritje, tĂ« cilat analizojnĂ« vetĂ«m skedarĂ«t qĂ« kanĂ« ndryshuar qĂ« nga skanimi i fundit.
PĂ«r mĂ« tepĂ«r, ofrohen mjete tĂ« sigurta programimi pĂ«r tĂ« lejuar shĂ«nime nĂ« format (â/** @var Lloji */â) pĂ«r tĂ« dhĂ«nĂ« informacion nĂ« lidhje me llojet e variablave, vlerat e kthyera, parametrat e funksionit, vetitĂ« e objektit. PĂ«rcaktimi i modeleve tĂ« pĂ«rdorimit tĂ« tipit dhe pĂ«rdorimi i deklaratave tĂ« pohimit mbĂ«shtetet gjithashtu. PĂ«r shembull:
/** @var varg|null */
$a = foo();
/** vargu @var $a */
echo strpos($a, 'përshëndetje');
/** @psalm-assert-if-true B $a */
funksioni ështëValidB(A $a) : bool {
ktheni $a shembull të B && $a->isValid();
}
PĂ«r tĂ« automatizuar eliminimin e problemeve tĂ« gjetura, ofrohet mjeti Psalter, i cili mbĂ«shtet shtojcat dhe zgjidhni problemet e zakonshme tĂ« kodit, shtoni shĂ«nime tĂ« tipit dhe kryeni manipulime tĂ« tilla si zhvendosja e klasave nga njĂ« hapĂ«sirĂ« ââemri nĂ« tjetrĂ«n, zhvendosja e metodave midis klasave dhe riemĂ«rtimi i klasave dhe metodave.
Në numrin e ri të Psalmit opsioni "--taint-analysis" ju lejon të gjurmoni lidhjen midis parametrave të hyrjes të marra nga përdoruesi (për shembull, $_GET['name']) dhe përdorimit të tyre në vende që kërkojnë ikje të karaktereve (për shembull, jehona " $emri "), duke përfshirë përmes zinxhirëve gjurmues të detyrave të ndërmjetme dhe thirrjeve funksionale. Përdorimi i grupeve shoqëruese $_GET, $_POST dhe $_COOKIE konsiderohet si burim i të dhënave potencialisht të rrezikshme, por është gjithashtu i mundur burimet e veta. Veprimet që kërkojnë gjurmimin e arratisjes përfshijnë operacionet e daljes që gjenerojnë përmbajtje HTML, shtojnë titujt HTTP ose ekzekutojnë pyetje SQL.
Validimi përdoret kur përdoren funksione të tilla si echo, exec, include dhe header. Kur analizohet nevoja për arratisje, merren parasysh llojet e të dhënave si teksti, vargjet me kodin SQL, HTML dhe Shell, vargjet me parametrat e vërtetimit. Mënyra e propozuar ju lejon të identifikoni dobësitë në kod që çojnë në skriptimin ndër-site (XSS) ose zëvendësimin e SQL.
Për më tepër, mund të vërehet testimi alfa i degës së re PHP 8.0. Publikimi është planifikuar për 26 nëntor. Në degën e re priten këto: Si:
- , përdorimi i të cilave do të përmirësojë produktivitetin.
- Mbështetje , duke përcaktuar koleksionet e dy ose më shumë llojeve (për shembull, "funksioni publik foo(Foo|Bar $input): int|float;").
- Mbështetje (shënime) që ju lejojnë të lidhni meta të dhënat (siç janë informacionet e tipit) me klasat pa përdorur sintaksë Docblock.
- përkufizimet e klasave, duke ju lejuar të kombinoni përkufizimin e një konstruktori dhe vetitë.
- Lloji i ri i kthimit - .
- Lloji i ri - , i cili mund të përdoret për të përcaktuar nëse një funksion pranon parametra të llojeve të ndryshme.
- shprehje për të trajtuar përjashtimet.
- për të krijuar objekte që mund të sakrifikohen gjatë mbledhjes së mbeturinave (për shembull, për të ruajtur memoriet e panevojshme).
- duke pĂ«rdorur shprehjen â::classâ pĂ«r objektet (analoge me thirrjen get_class()).
- përkufizimet në bllokun e kapjes së përjashtimeve që nuk janë të lidhura me variabla.
- duke lënë presje pas elementit të fundit në listën e parametrave të funksionit.
- Ndërfaqe e re për të identifikuar çdo lloj vargu ose të dhëna që mund të konvertohen në një varg (për të cilin metoda __toString() është e disponueshme).
- Veçori e re , një analog i thjeshtuar i strpos për përcaktimin e shfaqjes së një nënvargu, si dhe funksionet str_starts_with() dhe str_ends_with() për kontrollimin e përputhjeve në fillim dhe në fund të një vargu.
- Funksioni i shtuar , i cili kryen një operacion ndarjeje pa hedhur gabim kur pjesëtohet me zero.
- logjika e bashkimit të vargut. Për shembull, shprehja 'jehonë "shuma:" . $a + $b' u interpretua më parë si 'echo ("sum: " . $a) + $b', dhe në PHP 8 do të trajtohet si "echo "sum: ". ($a + $b)'.
- kontrollimi i operacioneve aritmetike dhe bit, për shembull, shprehjet "[] % [42]" dhe "$object + 4" do të rezultojnë në një gabim.
- një algoritëm i qëndrueshëm i renditjes në të cilin rendi i vlerave identike ruhet në drejtime të ndryshme.
Burimi: opennet.ru
