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

Vimeo Company objavljeno novo izdanje statičkog analizatora Psalam 3.12, koji vam omogućava da identifikujete i očigledne i suptilne greške u PHP kodu, kao i da automatski ispravite neke vrste grešaka. Sistem je pogodan za identifikaciju problema kako u zastarelom kodu tako i u kodu koji koristi moderne karakteristike uvedene u nove grane PHP-a. Kod projekta je napisan u PHP-u i distribuira pod MIT licencom.

Psalam identificira većinu problema povezanih s pogrešnom upotrebom slova, kao i razne tipične greške. Na primjer, podržava upozorenja o miješanju varijabli različitih tipova u izrazu, netačnim logičkim testovima (kao što su "if ($a && $a) {}", "if ($a && !$a) {}" i " if ( $a) {} elseif ($a) {}"), nepotpuna inicijalizacija svojstava objekta. Analizator radi u višenitnom modu. Moguće je izvršiti inkrementalna skeniranja, koja analiziraju samo datoteke koje su se promijenile od posljednjeg skeniranja.

Dodatno, obezbeđeni su alati za sigurno programiranje koji omogućavaju koristite 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 obrazaca korištenja tipova i korištenje iskaza assert. Na primjer:

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

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

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

Za automatizaciju eliminacije pronađenih problema, obezbeđen je uslužni program Psalter koji podržava dodatke i dozvoljava otklanjanje uobičajenih problema koda, dodavanje napomena o tipu i izvođenje manipulacija kao što je premještanje klasa iz jednog imenskog prostora u drugi, premještanje metoda između klasa i preimenovanje klasa i metoda.

U novom broju Psalma implementirano opcija "--taint-analysis" vam omogućava da pratite odnos između ulaznih parametara primljenih od korisnika (na primjer, $_GET['name']) i njihove upotrebe na mjestima koja zahtijevaju izbjegavanje znakova (na primjer, echo " $name "), uključujući praćenje lanaca međudodjela i poziva funkcija. Upotreba asocijativnih nizova $_GET, $_POST i $_COOKIE smatra se izvorima potencijalno opasnih podataka, ali je također moguća određivanje sopstveni izvori. Radnje 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. Prilikom analize potrebe za izbjegavanjem, uzimaju se u obzir tipovi podataka kao što su tekst, stringovi sa SQL, HTML i Shell kodom, nizovi sa parametrima autentikacije. Predloženi način vam omogućava da identifikujete ranjivosti u kodu koji dovode do skriptiranja na više lokacija (XSS) ili SQL zamjene.

Osim toga, može se primijetiti počnite alfa testiranje nove PHP 8.0 grane. Izdanje je zakazano za 26. novembar. U novoj branši se očekuju sljedeće: inovacije, kao:

  • Uključenost JIT kompajler, čija će upotreba poboljšati produktivnost.
  • podrška vrste sindikata, definiranje kolekcija od dva ili više tipova (na primjer, “javna funkcija foo(Foo|Bar $input): int|float;”).
  • podrška atributi (napomene) koje vam omogućavaju da povežete metapodatke (kao što su informacije o tipu) za klase bez korištenja Docblock sintakse.
  • Skraćena sintaksa definicije klase, što vam omogućava da kombinujete definiciju konstruktora i svojstva.
  • Nova vrsta povrata - statički.
  • Novi tip - pomešano, koji se može koristiti za određivanje da li funkcija prihvaća parametre različitih tipova.
  • Izraz bacanje za obradu izuzetaka.
  • WeakMap za kreiranje objekata koji se mogu žrtvovati tokom sakupljanja smeća (na primjer, za pohranjivanje nepotrebnih kešova).
  • Sposobnost koristeći izraz “::class” za objekte (analogno pozivu get_class()).
  • Sposobnost definicije u bloku catch izuzetaka koji nisu vezani za varijable.
  • Sposobnost ostavljajući zarez iza posljednjeg elementa na listi parametara funkcije.
  • Novi interfejs Stringable za identifikaciju bilo koje vrste stringova ili podataka koji se mogu pretvoriti u string (za koje je dostupna metoda __toString()).
  • Nova funkcija str_contains(), 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.
  • Dodata funkcija fdiv(), koji izvodi operaciju dijeljenja bez greške prilikom dijeljenja sa nulom.
  • Promijenjeno logika spajanja nizova. Na primjer, izraz 'echo "sum:" . $a + $b' je prethodno interpretirano kao 'echo ("sum: " . $a) + $b', au PHP 8 će se tretirati kao 'echo "sum: " . ($a + $b)'.
  • Zategnuto provjera aritmetičkih i bitnih operacija, na primjer, izrazi "[] % [42]" i "$object + 4" će rezultirati greškom.
  • Implementirano stabilan algoritam za sortiranje u kojem se poredak identičnih vrijednosti čuva u različitim serijama.

izvor: opennet.ru

Dodajte komentar