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

Kompania Vimeo botuar lëshimi i ri i analizuesit statik Psalmi 3.12, 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 shperndare nga nën licencën MIT.

Psalmi identifikon shumicĂ«n e problemeve qĂ« lidhen me pĂ«rdorimin e llojit tĂ« gabuar, si dhe tĂ« ndryshme gabime tipike. 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 pĂ«r t'u pĂ«rdorur shĂ«nime nĂ« format Docblock (“/** @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 Kjo i lejon 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 zbatuar 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 përcaktim 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 fillimi 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: risitëSi:

  • pĂ«rfshirje PĂ«rpiluesi JIT, pĂ«rdorimi i tĂ« cilave do tĂ« pĂ«rmirĂ«sojĂ« produktivitetin.
  • MbĂ«shtetje llojet e bashkimit, duke pĂ«rcaktuar koleksionet e dy ose mĂ« shumĂ« llojeve (pĂ«r shembull, "funksioni publik foo(Foo|Bar $input): int|float;").
  • MbĂ«shtetje atributet (shĂ«nime) qĂ« ju lejojnĂ« tĂ« lidhni meta tĂ« dhĂ«nat (siç janĂ« informacionet e tipit) me klasat pa pĂ«rdorur sintaksĂ« Docblock.
  • SintaksĂ« e shkurtuar pĂ«rkufizimet e klasave, duke ju lejuar tĂ« kombinoni pĂ«rkufizimin e njĂ« konstruktori dhe vetitĂ«.
  • Lloji i ri i kthimit - i pandryshueshĂ«m.
  • Lloji i ri - i pĂ«rzier, i cili mund tĂ« pĂ«rdoret pĂ«r tĂ« pĂ«rcaktuar nĂ«se njĂ« funksion pranon parametra tĂ« llojeve tĂ« ndryshme.
  • shprehje hedh pĂ«r tĂ« trajtuar pĂ«rjashtimet.
  • Harta e dobĂ«t pĂ«r tĂ« krijuar objekte qĂ« mund tĂ« sakrifikohen gjatĂ« mbledhjes sĂ« mbeturinave (pĂ«r shembull, pĂ«r tĂ« ruajtur memoriet e panevojshme).
  • mundĂ«si duke pĂ«rdorur shprehjen “::class” pĂ«r objektet (analoge me thirrjen get_class()).
  • mundĂ«si pĂ«rkufizimet nĂ« bllokun e kapjes sĂ« pĂ«rjashtimeve qĂ« nuk janĂ« tĂ« lidhura me variabla.
  • mundĂ«si duke lĂ«nĂ« presje pas elementit tĂ« fundit nĂ« listĂ«n e parametrave tĂ« funksionit.
  • NdĂ«rfaqe e re Stringable 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 str_contains(), 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 fdiv (), i cili kryen njĂ« operacion ndarjeje pa hedhur gabim kur pjesĂ«tohet me zero.
  • Ndryshuar 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)'.
  • ShtrĂ«nguar kontrollimi i operacioneve aritmetike dhe bit, pĂ«r shembull, shprehjet "[] % [42]" dhe "$object + 4" do tĂ« rezultojnĂ« nĂ« njĂ« gabim.
  • Zbatuar njĂ« algoritĂ«m i qĂ«ndrueshĂ«m i renditjes nĂ« tĂ« cilin rendi i vlerave identike ruhet nĂ« drejtime tĂ« ndryshme.

Burimi: opennet.ru

Bleni njĂ« host tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, serverĂ« VPS VDS đŸ”„ Bleni hosting tĂ« besueshĂ«m tĂ« faqeve tĂ« internetit me mbrojtje DDoS, servera VPS VDS | ProHoster