Release van Psalm 3.12, een statische analyser voor de programmeertaal PHP. Alpha-release van PHP 8.0

Vimeo bedrijf heeft gepubliceerd nieuwe versie van de statische analyzer Psalm 3.12, waarmee zowel duidelijke als moeilijk opspoorbare fouten in PHP-code kunnen worden geïdentificeerd en sommige soorten fouten automatisch kunnen worden gecorrigeerd. Het systeem is geschikt voor het opsporen van problemen in zowel verouderde code als in code die gebruikmaakt van moderne mogelijkheden die zijn verschenen in nieuwe PHP-versies. De code van het project is geschreven in PHP en wordt verspreid valt onder de MIT-licentie.

Psalm identificeert de meeste problemen met onjuist gebruik van types, evenals diverse typische fouten. Bijvoorbeeld, waarschuwingen over het mengen van variabelen van verschillende types in een expressie, onjuiste logische controles (zoals “if ($a && $a) {}”, “if ($a && !$a) {}” en “if ($a) {} elseif ($a) {}”), en onvolledige initialisatie van objecteigenschappen worden ondersteund. De analyzer wordt uitgevoerd in multithreaded modus. Incrementele controles zijn mogelijk, waarbij alleen de bestanden worden geanalyseerd die zijn gewijzigd sinds de laatste controle.

Bovendien wordt veilige programmeertools aangeboden, bestaande uit gebruikt annotaties in het formaat Docblock (“/** @var Type */”) om informatie te verstrekken over variabelentypen, teruggegeven waarden, functieparameters en eigenschappen van objecten. Het ondersteunt ook de definitie van typegebruikpatronen en het toepassen van assert-expressies. Bijvoorbeeld:

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

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

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

Voor de automatisering van het oplossen van gevonden problemen is er de Psalm-utility, die plugins ondersteunt en toe typeproblemen in de code kan verhelpen, type-annotaties kan toevoegen, en manipulaties kan uitvoeren zoals het verplaatsen van klassen van de ene namespace naar de andere, het verplaatsen van methoden tussen klassen en het hernoemen van klassen en methoden.

In de nieuwe release van Psalm geïmplementeerd de optie «—taint-analysis», waarmee de relatie kan worden gevolgd tussen de door de gebruiker ontvangen invoerparameters (bijvoorbeeld, $_GET[‘name’]) en hun gebruik op plaatsen die karakterescaping vereisen (bijvoorbeeld, echo «<h1>$name</h1>»), inclusief het volgen van ketens van tussentijdse toewijzingen en functieroepingen. Associatieve arrays zoals $_GET, $_POST en $_COOKIE worden als potentiële bronnen van gevaarlijke gegevens beschouwd, maar het is ook mogelijk dat definitie eigen bronnen. Onder de acties die het bijhouden van escapes vereisen, worden uitvoeroperaties beschouwd die leiden tot het vormen van inhoud in HTML-indeling, het toevoegen van HTTP-headers of het uitvoeren van SQL-query's.

De controle wordt toegepast bij het gebruik van functies zoals echo, exec, include en header. Bij het analyseren van de noodzaak van escaping worden datatypen in overweging genomen, zoals tekst, SQL-strings, HTML en shell-code, en strings met authenticatieparameters. De voorgestelde modus maakt het mogelijk om kwetsbaarheden in de code te identificeren die leiden tot cross-site scripting (XSS) of SQL-injectie.

Daarnaast kan worden vermeld een begin alpha-test van de nieuwe tak PHP 8.0. De release staat gepland voor 26 november. In de nieuwe tak worden onder andere de volgende features verwacht: vernieuwingen, zoals:

  • Inschakeling van de JIT-compiler, waarvan het gebruik de prestaties zal verbeteren.
  • Ondersteuning union-types, die collecties van twee of meer typen definiëren (bijvoorbeeld “public function foo(Foo|Bar $input): int|float;”).
  • Ondersteuning attributen (annotaties), waarmee metadata (bijvoorbeeld type-informatie) aan klassen kunnen worden gekoppeld zonder het gebruik van Docblock-syntaxis.
  • Afgekorte syntaxis voor de definitie van klassen, waarmee de definitie van de constructor en eigenschappen kan worden samengevoegd.
  • Een nieuw type retourwaarden — static.
  • Een nieuw type — mixed, dat kan worden gebruikt om een functie parameters van verschillende types te laten aannemen.
  • De uitdrukking throw voor het afhandelen van uitzonderingen.
  • WeakMap voor het maken van objecten die kunnen worden opgegeven bij garbage collection (bijvoorbeeld voor het opslaan van optionele caches).
  • Mogelijkheid gebruik van de expressie “::class” voor objecten (vergelijkbaar met de aanroep van get_class()).
  • Mogelijkheid de definitie in de catch-blok van uitzonderingen die niet aan variabelen zijn gebonden.
  • Mogelijkheid het achterlaten van een komma na het laatste element in de parameterlijst van een functie.
  • De nieuwe interface Stringable voor het identificeren van elke stringtype of gegevens die in een string kunnen worden omgezet (voor welke de methode __toString() beschikbaar is).
  • Nieuwe functie str_contains(), een vereenvoudigd alternatief voor strpos om het voorkomen van een substring te bepalen, en ook de functies str_starts_with() en str_ends_with() voor het controleren van overeenkomsten aan het begin en einde van een string.
  • De functie is toegevoegd fdiv(), voert de delingsoperatie uit zonder een foutmelding weer te geven in het geval van deling door nul.
  • Gewijzigd de logica voor het samenvoegen van strings. Bijvoorbeeld, de uitdrukking ‘echo «sum: » . $a + $b’ werd eerder geïnterpreteerd als ‘echo («sum: » . $a) + $b’, terwijl deze in PHP 8 zal worden behandeld als ‘echo «sum: » . ($a + $b)’.
  • Verscherpt de controle op wiskundige en bitbewerkingen, bijvoorbeeld de uitdrukkingen «[] % [42]» en «$object + 4» zullen een fout veroorzaken.
  • Geïmplementeerd stabiel sorteeralgoritme, waarin de volgorde van gelijke waarden behouden blijft bij verschillende uitvoeringen.

Bron: opennet.ru

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster