Izdanje Psalma 3.12, statičkog analizatora za PHP jezik. Alfa izdanje PHP 8.0

Tvrtka Vimeo опубликовала novo izdanje statičkog analizatora Psalam 3.12, koji vam omogućuje prepoznavanje očitih i suptilnih pogrešaka u PHP kodu, kao i automatsko ispravljanje nekih vrsta pogrešaka. Sustav je prikladan za prepoznavanje problema kako u naslijeđenom kodu tako iu kodu koji koristi moderne značajke uvedene u novim granama PHP-a. Kôd projekta je napisan u PHP-u i distribuira pod licencom MIT-a.

Psalam identificira većinu problema povezanih s netočnim korištenjem slova, kao i razne tipične greške. Na primjer, podržava upozorenja o miješanju varijabli različitih tipova u izrazu, netočne logičke testove (kao što su “if ($a && $a) {}”, “if ($a && !$a) {}” i “ if ( $a) {} elseif ($a) {}"), nepotpuna inicijalizacija svojstava objekta. Analizator radi u višenitnom načinu rada. Moguće je izvršiti inkrementalno skeniranje, koje analizira samo datoteke koje su se promijenile od zadnjeg skeniranja.

Dodatno, osigurani su alati za sigurno programiranje koji omogućuju za korištenje napomene u formatu Docblock (“/** @var Type */”) za pružanje informacija o tipovima varijabli, povratnim vrijednostima, parametrima funkcije, svojstvima objekta. Također je podržano definiranje uzoraka upotrebe tipova i korištenje assert izjava. Na primjer:

/** @var string|null */
$a = foo();

/** @var niz $a */
echo strpos($a, 'zdravo');

/** @psalm-assert-if-true B $a */
funkcija isValidB(A $a) : bool {
vrati $a instanceof B && $a->isValid();
}

Za automatizaciju uklanjanja pronađenih problema, dostupan je uslužni program Psalter koji podržava dodatke i to omogućuje rješavanje uobičajenih problema koda, dodavanje komentara tipa i izvođenje manipulacija kao što je premještanje klasa iz jednog prostora imena u drugi, premještanje metoda između klasa i preimenovanje klasa i metoda.

U novom broju Psalma implementiran opcija "--taint-analysis" omogućuje vam praćenje odnosa između ulaznih parametara primljenih od korisnika (na primjer, $_GET['name']) i njihove upotrebe na mjestima koja zahtijevaju izbjegavanje znakova (na primjer, echo " $ime "), uključujući putem lanaca praćenja srednjih dodjela i poziva funkcija. Korištenje asocijativnih nizova $_GET, $_POST i $_COOKIE smatra se izvorima potencijalno opasnih podataka, ali je također moguće utvrđivanje vlastite izvore. Akcije koje zahtijevaju izbjegavanje praćenja uključuju izlazne operacije koje generiraju HTML sadržaj, dodaju HTTP zaglavlja ili izvršavaju SQL upite.

Validacija se koristi kada se koriste funkcije kao što su echo, exec, include i header. Pri analizi potrebe za bježanjem uzimaju se u obzir tipovi podataka kao što su tekst, nizovi sa SQL, HTML i Shell kodom, nizovi s parametrima provjere autentičnosti. Predloženi način vam omogućuje da identificirate ranjivosti u kodu koje dovode do cross-site scripting (XSS) ili SQL supstitucije.

Dodatno, možete napomenuti početi alfa testiranje nove grane PHP 8.0. Izlazak je zakazan za 26. studenog. U novoj poslovnici očekuju se: inovacijeKao:

  • uključenje JIT kompajlerčijom će se upotrebom poboljšati produktivnost.
  • podrška vrste sindikata, definirajući zbirke od dva ili više tipova (na primjer, “javna funkcija foo(Foo|Bar $input): int|float;”).
  • podrška atributi (komentacije) koje vam omogućuju vezanje metapodataka (kao što su informacije o tipu) za klase bez korištenja Docblock sintakse.
  • Skraćena sintaksa definicije klasa, omogućujući vam kombiniranje definicije konstruktora i svojstava.
  • Nova vrsta povrata - statički.
  • Novi tip - mješovit, koji se može koristiti za određivanje prihvaća li funkcija parametre različitih vrsta.
  • izraz baciti rukovati iznimkama.
  • WeakMap za stvaranje objekata koji se mogu žrtvovati tijekom skupljanja smeća (na primjer, za pohranjivanje nepotrebnih predmemorija).
  • Prilika koristeći izraz “::class” za objekte (analogno pozivu get_class()).
  • Prilika definicije u catch bloku iznimaka koje nisu vezane na varijable.
  • Prilika ostavljajući zarez iza zadnjeg elementa u popisu parametara funkcije.
  • Novo sučelje Nanizano za identifikaciju svih vrsta nizova ili podataka koji se mogu pretvoriti u niz (za što je dostupna metoda __toString().
  • Nova značajka str_sadrži(), pojednostavljeni analog strpos za određivanje pojavljivanja podniza, kao i funkcije str_starts_with() i str_ends_with() za provjeru podudaranja na početku i kraju niza.
  • Dodana značajka fdiv(), koji izvodi operaciju dijeljenja bez izbacivanja pogreške pri dijeljenju s nulom.
  • Promijenjeno logika spajanja nizova. Na primjer, izraz 'echo "sum:" . $a + $b' se prethodno tumačio kao 'echo ("sum: " . $a) + $b', au PHP-u 8 će se tretirati kao 'echo "sum: ". ($a + $b)'.
  • Zategnuto provjera aritmetičkih i bitnih operacija, na primjer, izrazi "[] % [42]" i "$objekt + 4" rezultirat će pogreškom.
  • Provedeno stabilan algoritam sortiranja u kojem se redoslijed identičnih vrijednosti čuva u različitim izvođenjima.

Izvor: opennet.ru

Dodajte komentar