Izdaja Psalma 3.12, statičnega analizatorja za jezik PHP. Izdaja alfa PHP 8.0

Podjetje Vimeo objavljeno nova izdaja statičnega analizatorja Psalm 3.12, ki vam omogoča prepoznavanje očitnih in subtilnih napak v kodi PHP ter samodejno popravljanje nekaterih vrst napak. Sistem je primeren za prepoznavanje težav tako v podedovani kodi kot v kodi, ki uporablja sodobne funkcije, uvedene v novih vejah PHP. Koda projekta je napisana v PHP in distributer pod licenco MIT.

Psalm opredeljuje večino težav, povezanih z nepravilno uporabo črk, pa tudi različne tipične napake. Podpira na primer opozorila o mešanju spremenljivk različnih vrst v izrazu, nepravilne logične preizkuse (kot so »if ($a && $a) {}«, »if ($a && !$a) {}« in » if ( $a) {} elseif ($a) {}"), nepopolna inicializacija lastnosti objekta. Analizator deluje v večnitnem načinu. Možno je izvajati inkrementalne preglede, ki analizirajo samo datoteke, ki so bile spremenjene od zadnjega pregleda.

Poleg tega so na voljo varna programska orodja, ki omogočajo uporabo opombe v formatu Docblock (“/** @var Type */”) za zagotavljanje informacij o vrstah spremenljivk, vrnjenih vrednostih, funkcijskih parametrih, lastnostih objektov. Podprto je tudi definiranje vzorcev uporabe tipa in uporaba trditvenih stavkov. Na primer:

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

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

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

Za avtomatizacijo odpravljanja ugotovljenih težav je na voljo pripomoček Psalter, ki podpira vtičnike in omogoča odpravljanje pogostih težav s kodo, dodajanje opomb tipa in izvajanje manipulacij, kot je premikanje razredov iz enega imenskega prostora v drugega, premikanje metod med razredi ter preimenovanje razredov in metod.

V novi številki Psalma izvajati možnost "--taint-analysis" vam omogoča sledenje razmerju med vhodnimi parametri, prejetimi od uporabnika (na primer $_GET['name']) in njihovo uporabo na mestih, ki zahtevajo ubežanje znakov (na primer echo " $name «), vključno s sledenjem verig vmesnih dodelitev in funkcijskih klicev. Uporaba asociativnih nizov $_GET, $_POST in $_COOKIE velja za vire potencialno nevarnih podatkov, možna pa je tudi določitev lastnih virov. Dejanja, ki zahtevajo izogibanje sledenju, vključujejo izhodne operacije, ki generirajo vsebino HTML, dodajo glave HTTP ali izvajajo poizvedbe SQL.

Preverjanje se uporablja pri uporabi funkcij, kot so echo, exec, include in header. Pri analizi potrebe po uhajanju se upoštevajo podatkovni tipi, kot so besedilo, nizi s kodo SQL, HTML in Shell, nizi z avtentikacijskimi parametri. Predlagani način vam omogoča prepoznavanje ranljivosti v kodi, ki vodijo do skriptnega izvajanja na več mestih (XSS) ali zamenjave SQL.

Poleg tega je mogoče opozoriti začetek alfa testiranje nove veje PHP 8.0. Izid je predviden za 26. november. V novi poslovalnici pričakujejo: inovacijeKot je:

  • Vključenost JIT prevajalnik, katerih uporaba bo izboljšala produktivnost.
  • Podpora vrste sindikatov, ki definirajo zbirke dveh ali več vrst (na primer »javna funkcija foo(Foo|Bar $input): int|float;«).
  • Podpora lastnosti (opombe), ki vam omogočajo povezovanje metapodatkov (kot so informacije o vrsti) z razredi brez uporabe sintakse Docblock.
  • Skrajšana sintaksa definicije razreda, kar vam omogoča kombiniranje definicije konstruktorja in lastnosti.
  • Nova vrsta vračila - statična.
  • Nova vrsta - mešano, s katerim lahko ugotovite, ali funkcija sprejema parametre različnih vrst.
  • Izraz met obravnavati izjeme.
  • WeakMap za ustvarjanje predmetov, ki jih je mogoče žrtvovati med zbiranjem smeti (na primer za shranjevanje nepotrebnih predpomnilnikov).
  • Priložnost z uporabo izraza “::class” za objekte (analogno klicu get_class()).
  • Priložnost definicije v bloku catch izjem, ki niso vezane na spremenljivke.
  • Priložnost pustite vejico za zadnjim elementom na seznamu funkcijskih parametrov.
  • Nov vmesnik Nanizna za identifikacijo vseh vrst nizov ali podatkov, ki jih je mogoče pretvoriti v niz (za kar je na voljo metoda __toString().
  • Nova funkcija str_contains(), poenostavljen analog strpos za ugotavljanje pojavljanja podniza, kot tudi funkciji str_starts_with() in str_ends_with() za preverjanje ujemanja na začetku in koncu niza.
  • Dodana funkcija fdiv(), ki izvede operacijo deljenja brez vrženja napake pri deljenju z ničlo.
  • Spremenjeno logiko spajanja nizov. Na primer izraz 'echo "sum:" . $a + $b' je bilo prej razloženo kot 'echo ("sum: " . $a) + $b', v PHP 8 pa bo obravnavano kot 'echo "sum: ". ($a + $b)'.
  • Zategnjen preverjanje aritmetičnih in bitnih operacij, na primer, izraza "[] % [42]" in "$object + 4" bosta povzročila napako.
  • Izvedeno stabilen algoritem razvrščanja, v katerem se vrstni red enakih vrednosti ohrani v različnih vožnjah.

Vir: opennet.ru

Dodaj komentar