Vydání Psalm 3.12, statického analyzátoru pro jazyk PHP. Alfa vydání PHP 8.0

Společnost Vimeo publikováno nové vydání statického analyzátoru Žalm 3.12, který umožňuje identifikovat zjevné i jemné chyby v kódu PHP a také automaticky opravovat některé typy chyb. Systém je vhodný pro identifikaci problémů jak ve starém kódu, tak v kódu, který využívá moderní funkce zavedené v nových větvích PHP. Kód projektu je napsán v PHP a distribuovány pod licencí MIT.

Žalm identifikuje většinu problémů spojených s nesprávným použitím typu, stejně jako různé typické chyby. Podporuje například varování před mícháním proměnných různých typů ve výrazu, nesprávné logické testy (jako například „if ($a && $a) {}“, „pokud ($a && !$a) {}“ a „ if ( $a) {} elseif ($a) {}"), neúplná inicializace vlastností objektu. Analyzátor běží ve vícevláknovém režimu. Je možné provádět přírůstkové kontroly, které analyzují pouze soubory, které se od poslední kontroly změnily.

Navíc jsou poskytovány bezpečné programovací nástroje, které to umožňují k použití anotace ve formátu Docblock („/** @var Type */“) poskytuje informace o typech proměnných, návratových hodnotách, parametrech funkcí, vlastnostech objektů. Podporováno je také definování vzorů použití typů a používání příkazů stvrzení. Napří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();
}

Pro automatizaci odstraňování nalezených problémů je k dispozici utilita Psalter, která podporuje pluginy a umožňuje odstraňovat běžné problémy s kódem, přidávat typové anotace a provádět manipulace, jako je přesouvání tříd z jednoho jmenného prostoru do druhého, přesouvání metod mezi třídami a přejmenování tříd a metod.

V novém čísle Žalmu implementováno volba "--taint-analysis" umožňuje sledovat vztah mezi vstupními parametry přijatými od uživatele (například $_GET['name']) a jejich použitím na místech, která vyžadují escapování znaků (například echo " $jméno "), a to i prostřednictvím sledovacích řetězců přechodných přiřazení a volání funkcí. Použití asociativních polí $_GET, $_POST a $_COOKIE je považováno za zdroje potenciálně nebezpečných dat, ale je také možné určení vlastní zdroje. Akce, které vyžadují escapování, zahrnují výstupní operace, které generují obsah HTML, přidávají hlavičky HTTP nebo spouštějí dotazy SQL.

Ověření se používá při použití funkcí, jako je echo, exec, include a header. Při analýze potřeby escapování se berou v úvahu datové typy jako text, řetězce s kódem SQL, HTML a Shell, řetězce s autentizačními parametry. Navrhovaný režim umožňuje identifikovat zranitelná místa v kódu, která vedou ke skriptování mezi weby (XSS) nebo nahrazení SQL.

Navíc lze poznamenat začátek alfa testování nové větve PHP 8.0. Vydání je naplánováno na 26. listopadu. V nové pobočce se očekává následující: inovaceJako:

  • Povolení JIT kompilátor, jejichž použití zvýší produktivitu.
  • Podpora odborové typy, definující kolekce dvou nebo více typů (například „public function foo(Foo|Bar $input): int|float;“).
  • Podpora atributy (anotace), které vám umožňují svázat metadata (jako jsou informace o typu) na třídy bez použití syntaxe Docblock.
  • Zkrácená syntaxe definice tříd, což umožňuje kombinovat definici konstruktoru a vlastností.
  • Nový typ vrácení - statický.
  • Nový typ - smíšený, který lze použít k určení, zda funkce přijímá parametry různých typů.
  • Výraz hod řešit výjimky.
  • Slabá mapa k vytváření objektů, které lze obětovat během sběru odpadu (například pro ukládání nepotřebných mezipamětí).
  • Příležitost pomocí výrazu „::class“ pro objekty (analogicky k volání get_class()).
  • Příležitost definice v bloku catch výjimek, které nejsou vázány na proměnné.
  • Příležitost ponechání čárky za posledním prvkem v seznamu parametrů funkcí.
  • Nové rozhraní Navlékací k identifikaci všech typů řetězců nebo dat, která lze převést na řetězec (pro který je k dispozici metoda __toString()).
  • Nová vlastnost str_contains(), zjednodušená obdoba strpos pro určení výskytu podřetězce, stejně jako funkce str_starts_with() a str_ends_with() pro kontrolu shody na začátku a konci řetězce.
  • Funkce přidána fdiv(), který provede operaci dělení bez vyvolání chyby při dělení nulou.
  • Změněno logika spojování řetězců. Například výraz 'echo "součet:" . $a + $b' bylo dříve interpretováno jako 'echo ("součet: " . $a) + $b' a v PHP 8 bude považováno za "echo "součet: " . ($a + $b)'.
  • Utažené kontrola aritmetických a bitových operací, například výrazy "[] % [42]" a "$object + 4", způsobí chybu.
  • Realizováno stabilní třídicí algoritmus, ve kterém je zachováno pořadí identických hodnot v různých běhech.

Zdroj: opennet.ru

Přidat komentář