Wydanie Psalmu 3.12, statycznego analizatora języka PHP. Wersja alfa PHP 8.0

Firma Vimeo опубликовала nowa wersja analizatora statycznego Psalm 3.12, który pozwala zidentyfikować zarówno oczywiste, jak i subtelne błędy w kodzie PHP, a także automatycznie skorygować niektóre typy błędów. System nadaje się do identyfikacji problemów zarówno w kodzie starszym, jak i w kodzie wykorzystującym nowoczesne funkcje wprowadzone w nowych gałęziach PHP. Kod projektu jest napisany w języku PHP i dystrybuowane przez na licencji MIT.

Psalm identyfikuje większość problemów związanych z nieprawidłowym użyciem czcionek, a także różne typowe błędy. Na przykład obsługuje ostrzeżenia o mieszaniu zmiennych różnych typów w wyrażeniu, nieprawidłowe testy logiczne (takie jak „if ($a && $a) {}”, „if ($a && !$a) {}” i „ if ( $a) {} elseif ($a) {}"), niekompletna inicjalizacja właściwości obiektu. Analizator działa w trybie wielowątkowym. Możliwe jest wykonywanie skanów przyrostowych, które analizują tylko te pliki, które uległy zmianie od czasu ostatniego skanowania.

Dodatkowo dostępne są bezpieczne narzędzia programistyczne umożliwiające używać adnotacje w formacie Blok dokumentów („/** @var Type */”), aby dostarczyć informacje o typach zmiennych, wartościach zwracanych, parametrach funkcji, właściwościach obiektu. Obsługiwane jest również definiowanie wzorców użycia typów i używanie instrukcji potwierdzenia. Na przykład:

/** @var ciąg|null */
$a = foo();

/** @var ciąg $a */
echo strpos($a, 'cześć');

/** @psalm-assert-if-true B $a */
funkcja isValidB(A $a): bool {
zwróć $instancję B && $a->isValid();
}

Aby zautomatyzować eliminację znalezionych problemów, dostępne jest narzędzie Psałterz, które obsługuje wtyczki i pozwala on rozwiązuj typowe problemy z kodem, dodawaj adnotacje typów i wykonuj operacje, takie jak przenoszenie klas z jednej przestrzeni nazw do drugiej, przenoszenie metod między klasami oraz zmiana nazw klas i metod.

W nowym numerze Psalmu wdrożone opcja „--taint-analytic” pozwala prześledzić związek pomiędzy parametrami wejściowymi otrzymanymi od użytkownika (np. $_GET['nazwa']) a ich użyciem w miejscach wymagających zmiany znaczenia znaków (np. echo " $imię "), w tym poprzez śledzenie łańcuchów przypisań pośrednich i wywołań funkcji. Użycie tablic asocjacyjnych $_GET, $_POST i $_COOKIE jest uważane za źródło potencjalnie niebezpiecznych danych, ale jest również możliwe określenie własne źródła. Akcje wymagające śledzenia ucieczki obejmują operacje wyjściowe, które generują treść HTML, dodają nagłówki HTTP lub wykonują zapytania SQL.

Walidacja jest używana podczas korzystania z funkcji takich jak echo, exec, include i nagłówek. Analizując potrzebę ucieczki, brane są pod uwagę typy danych takie jak tekst, ciągi znaków z kodem SQL, HTML i Shell, ciągi znaków z parametrami uwierzytelniającymi. Proponowany tryb pozwala zidentyfikować luki w kodzie, które prowadzą do cross-site scripting (XSS) lub podstawienia SQL.

Dodatkowo można to zauważyć start testy alfa nowej gałęzi PHP 8.0. Premiera zaplanowana jest na 26 listopada. W nowym oddziale spodziewane są: innowacjeJak:

  • Zwiększ moc Kompilator JIT, którego zastosowanie poprawi produktywność.
  • Wsparcie typy związkowe, definiując kolekcje dwóch lub więcej typów (na przykład „funkcja publiczna foo(Foo|Bar $input): int|float;”).
  • Wsparcie atrybuty (adnotacje), które umożliwiają powiązanie metadanych (takich jak informacje o typie) z klasami bez użycia składni Docblock.
  • Skrócona składnia definicje klas, umożliwiające połączenie definicji konstruktora i właściwości.
  • Nowy typ zwrotu - statyczny.
  • Nowy typ - mieszany, którego można użyć do określenia, czy funkcja akceptuje parametry różnych typów.
  • Wyrażenie rzucać do obsługi wyjątków.
  • SłabaMapa do tworzenia obiektów, które można poświęcić podczas zbierania elementów bezużytecznych (na przykład w celu przechowywania niepotrzebnych pamięci podręcznych).
  • Okazja używając wyrażenia „::class” dla obiektów (analogicznie do wywołania funkcji get_class()).
  • Okazja definicje w bloku catch wyjątków, które nie są powiązane ze zmiennymi.
  • Okazja pozostawienie przecinka po ostatnim elemencie na liście parametrów funkcji.
  • Nowy interfejs Stringi w celu zidentyfikowania dowolnego typu ciągu znaków lub danych, które można przekonwertować na ciąg znaków (dla których dostępna jest metoda __toString()).
  • Nowa cecha str_zawiera(), uproszczony odpowiednik strpos do określania występowania podciągu, a także funkcje str_starts_with() i str_ends_with() do sprawdzania dopasowań na początku i na końcu łańcucha.
  • Dodano funkcję fdiv(), który wykonuje operację dzielenia bez zgłaszania błędu podczas dzielenia przez zero.
  • Zmieniono logika łączenia ciągów. Na przykład wyrażenie „echo „suma:” . $a + $b' było wcześniej interpretowane jako 'echo ("suma: " . $a) + $b', a w PHP 8 będzie traktowane jako "echo "sum: ". ($a + $b)”.
  • Dokręcone sprawdzanie operacji arytmetycznych i bitowych, na przykład wyrażenia „[] % [42]” i „$obiekt + 4” spowodują błąd.
  • Wdrożone stabilny algorytm sortowania, w którym zachowana jest kolejność identycznych wartości w różnych przebiegach.

Źródło: opennet.ru

Dodaj komentarz