Uitgave van Psalm 3.12, een statische analysator voor de PHP-taal. Alfaversie van PHP 8.0

Vimeo-bedrijf опубликовала nieuwe release van statische analysator Psalm 3.12, waarmee u zowel voor de hand liggende als subtiele fouten in PHP-code kunt identificeren, en sommige soorten fouten automatisch kunt corrigeren. Het systeem is geschikt voor het identificeren van problemen in zowel oudere code als in code die gebruik maakt van moderne functies die in nieuwe takken van PHP zijn geïntroduceerd. De projectcode is geschreven in PHP en gedistribueerd door onder de MIT-licentie.

Psalm identificeert de meeste problemen die verband houden met onjuist typegebruik, evenals verschillende typische fouten. Het ondersteunt bijvoorbeeld waarschuwingen over het combineren van variabelen van verschillende typen in een expressie, onjuiste logische tests (zoals “if ($a && $a) {}”, “if ($a && !$a) {}” en “ if ($a) {} elseif ($a) {}"), onvolledige initialisatie van objecteigenschappen. De analysator werkt in multi-threaded modus. Het is mogelijk om incrementele scans uit te voeren, waarbij alleen bestanden worden geanalyseerd die sinds de laatste scan zijn gewijzigd.

Bovendien zijn er beveiligde programmeertools beschikbaar om dit mogelijk te maken te gebruiken annotaties in het formaat Documentblok (“/** @var Type */”) om informatie te geven over variabeletypen, retourwaarden, functieparameters en objecteigenschappen. Het definiëren van typegebruikspatronen en het gebruik van assert-instructies wordt ook ondersteund. Bijvoorbeeld:

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

/** @var tekenreeks $a */
echo strpos($a, 'hallo');

/** @psalm-assert-if-true B $a */
functie isGeldigB(A $a) : bool {
return $a exemplaar van B && $a->isValid();
}

Om de eliminatie van gevonden problemen te automatiseren, is het hulpprogramma Psalter beschikbaar, dat plug-ins en laat los algemene codeproblemen op, voeg type-annotaties toe en voer manipulaties uit zoals het verplaatsen van klassen van de ene naamruimte naar de andere, het verplaatsen van methoden tussen klassen en het hernoemen van klassen en methoden.

In de nieuwe uitgave van Psalm geïmplementeerd Met de optie "--taint-analysis" kunt u de relatie traceren tussen invoerparameters ontvangen van de gebruiker (bijvoorbeeld $_GET['naam']) en hun gebruik op plaatsen waar karakter-escaping vereist is (bijvoorbeeld echo " $naam "), onder meer door het volgen van ketens van tussenliggende opdrachten en functieaanroepen. Het gebruik van associatieve arrays $_GET, $_POST en $_COOKIE wordt beschouwd als bronnen van potentieel gevaarlijke gegevens, maar het is ook mogelijk определение eigen bronnen. Acties waarvoor ontsnappingstracking vereist is, zijn onder meer uitvoerbewerkingen die HTML-inhoud genereren, HTTP-headers toevoegen of SQL-query's uitvoeren.

Validatie wordt gebruikt bij het gebruik van functies zoals echo, exec, include en header. Bij het analyseren van de noodzaak tot ontsnappen wordt rekening gehouden met gegevenstypen zoals tekst, strings met SQL-, HTML- en Shell-code, strings met authenticatieparameters. Met de voorgestelde modus kunt u kwetsbaarheden in de code identificeren die leiden tot cross-site scripting (XSS) of SQL-vervanging.

Bovendien kan worden opgemerkt Start alpha-testen van de nieuwe PHP 8.0-tak. De release staat gepland voor 26 november. In de nieuwe vestiging worden het volgende verwacht: innovatiesAls:

  • inclusie JIT-compiler, waarvan het gebruik de productiviteit zal verbeteren.
  • Ondersteunen soorten vakbonden, waarbij verzamelingen van twee of meer typen worden gedefinieerd (bijvoorbeeld “public function foo(Foo|Bar $input): int|float;”).
  • Ondersteunen attributen (annotaties) waarmee u metagegevens (zoals type-informatie) aan klassen kunt binden zonder de Docblock-syntaxis te gebruiken.
  • Verkorte syntaxis klassedefinities, waardoor u de definitie van een constructor en eigenschappen kunt combineren.
  • Nieuw retourtype - statisch.
  • Nieuw type - gemengd, die kan worden gebruikt om te bepalen of een functie parameters van verschillende typen accepteert.
  • uitdrukking Gooi uitzonderingen afhandelen.
  • Zwakke kaart om objecten te maken die kunnen worden opgeofferd tijdens het verzamelen van afval (bijvoorbeeld om onnodige caches op te slaan).
  • Kans gebruik van de uitdrukking “::class” voor objecten (analoog aan het aanroepen van get_class()).
  • Kans definities in het catch-blok van uitzonderingen die niet aan variabelen zijn gebonden.
  • Kans een komma achterlatend na het laatste element in de lijst met functieparameters.
  • Nieuwe interface rijgbaar om tekenreekstypen of gegevens te identificeren die kunnen worden geconverteerd naar een tekenreeks (waarvoor de methode __toString() beschikbaar is).
  • Nieuwe functie str_bevat(), een vereenvoudigde analoog van strpos voor het bepalen van het voorkomen van een substring, evenals de functies str_starts_with() en str_ends_with() voor het controleren van overeenkomsten aan het begin en einde van een string.
  • Functie toegevoegd fdiv(), die een delingsbewerking uitvoert zonder een fout te genereren bij het delen door nul.
  • Gewijzigd logica voor het samenvoegen van strings. Bijvoorbeeld de uitdrukking 'echo "sum:" . $a + $b' werd voorheen geïnterpreteerd als 'echo ("sum: " . $a) + $b', en wordt in PHP 8 behandeld als 'echo "sum: " . ($a + $b)'.
  • Aangedraaid het controleren van rekenkundige en bitbewerkingen, bijvoorbeeld de uitdrukkingen "[] ​​% [42]" en "$object + 4" zullen resulteren in een fout.
  • Geïmplementeerd een stabiel sorteeralgoritme waarbij de volgorde van identieke waarden over verschillende runs behouden blijft.

Bron: opennet.ru

Voeg een reactie