Vydanie Psalm 3.12, statického analyzátora pre jazyk PHP. Alfa vydanie PHP 8.0

Spoločnosť Vimeo опубликовала nové vydanie statického analyzátora Žalm 3.12, ktorý umožňuje identifikovať zjavné aj jemné chyby v kóde PHP, ako aj automaticky opraviť niektoré typy chýb. Systém je vhodný na identifikáciu problémov ako v starom kóde, tak aj v kóde, ktorý využíva moderné funkcie zavedené v nových vetvách PHP. Kód projektu je napísaný v PHP a distribuovaný pod licenciou MIT.

Žalm identifikuje väčšinu problémov spojených s nesprávnym používaním typu, ako aj rôzne typické chyby. Podporuje napríklad upozornenia na miešanie premenných rôznych typov vo výraze, nesprávne logické testy (ako napríklad „if ($a && $a) {}“, „ak ($a && !$a) {}“ a „ if ( $a) {} elseif ($a) {}"), neúplná inicializácia vlastností objektu. Analyzátor beží vo viacvláknovom režime. Je možné vykonávať prírastkové kontroly, ktoré analyzujú iba súbory, ktoré sa zmenili od poslednej kontroly.

Okrem toho sú k dispozícii bezpečné programovacie nástroje, ktoré to umožňujú na použitie anotácie vo formáte Docblock (“/** @var Type */”) poskytuje informácie o typoch premenných, návratových hodnotách, parametroch funkcií, vlastnostiach objektu. Podporované je aj definovanie vzorov používania typov a používanie príkazov potvrdenia. Napríklad:

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

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

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

Na automatizáciu odstraňovania nájdených problémov je k dispozícii obslužný program Psalter, ktorý podporuje doplnky a umožňuje odstraňovať bežné problémy s kódom, pridávať anotácie typu a vykonávať manipulácie, ako je presúvanie tried z jedného priestoru názvov do druhého, presúvanie metód medzi triedami a premenovanie tried a metód.

V novom čísle Žalmu implementovaná možnosť "--taint-analysis" vám umožňuje sledovať vzťah medzi vstupnými parametrami prijatými od používateľa (napríklad $_GET['name']) a ich použitím na miestach, ktoré vyžadujú escapovanie (napríklad echo " $name “), a to aj prostredníctvom sledovacích reťazcov prechodných priradení a volaní funkcií. Použitie asociatívnych polí $_GET, $_POST a $_COOKIE sa považuje za zdroje potenciálne nebezpečných údajov, ale je tiež možné určenie vlastné zdroje. Akcie, ktoré vyžadujú sledovanie pomocou escapovania, zahŕňajú výstupné operácie, ktoré generujú obsah HTML, pridávajú hlavičky HTTP alebo vykonávajú dotazy SQL.

Overenie sa používa pri používaní funkcií ako echo, exec, include a header. Pri analýze potreby escapovania sa berú do úvahy dátové typy ako text, reťazce s kódom SQL, HTML a Shell, reťazce s parametrami autentifikácie. Navrhovaný režim vám umožňuje identifikovať zraniteľnosti v kóde, ktoré vedú k cross-site scriptingu (XSS) alebo nahradzovaniu SQL.

Okrem toho je možné poznamenať začiatok alfa testovanie novej vetvy PHP 8.0. Vydanie je naplánované na 26. novembra. V novej pobočke sa očakáva: inovácieAko:

  • zahrnutie JIT kompilátor, ktorých používanie zlepší produktivitu.
  • Podpora odborové typy, definujúce kolekcie dvoch alebo viacerých typov (napríklad „verejná funkcia foo(Foo|Bar $input): int|float;“).
  • Podpora atribúty (anotácie), ktoré vám umožňujú viazať metadáta (napríklad informácie o type) na triedy bez použitia syntaxe Docblock.
  • Skrátená syntax definície tried, ktoré vám umožňujú kombinovať definíciu konštruktora a vlastností.
  • Nový typ vrátenia - statický.
  • Nový typ - zmiešaný, ktorý možno použiť na určenie, či funkcia prijíma parametre rôznych typov.
  • vyjadrenie hod zvládnuť výnimky.
  • WeakMap vytvárať objekty, ktoré je možné obetovať počas zberu odpadu (napríklad na ukladanie nepotrebných skrýš).
  • Príležitosť pomocou výrazu „::class“ pre objekty (analogicky k volaniu get_class()).
  • Príležitosť definície v bloku catch výnimiek, ktoré nie sú viazané na premenné.
  • Príležitosť ponechaním čiarky za posledným prvkom v zozname parametrov funkcií.
  • Nové rozhranie Navliekacie na identifikáciu všetkých typov reťazcov alebo údajov, ktoré možno konvertovať na reťazec (pre ktorý je dostupná metóda __toString()).
  • Nová funkcia str_contains(), zjednodušený analóg strpos na určenie výskytu podreťazca, ako aj funkcie str_starts_with() a str_ends_with() na kontrolu zhody na začiatku a na konci reťazca.
  • Pridaná funkcia fdiv(), ktorý vykoná operáciu delenia bez vyhodenia chyby pri delení nulou.
  • Zmenené logika spájania reťazcov. Napríklad výraz „echo „súčet:“ . $a + $b' bolo predtým interpretované ako 'echo ("sum: " . $a) + $b' av PHP 8 sa bude považovať za "echo "sum: " . ($a + $b)“.
  • Dotiahnuté pri kontrole aritmetických a bitových operácií, napríklad výrazov "[] % [42]" a "$object + 4" dôjde k chybe.
  • Implementovaná stabilný triediaci algoritmus, v ktorom sa zachováva poradie identických hodnôt v rôznych cykloch.

Zdroj: opennet.ru

Pridať komentár