PHP dili üçün statik analizator olan Psalm 3.12-nin buraxılışı. PHP 8.0-ın alfa buraxılışı

Vimeo şirkəti nəşr olundu statik analizatorun yeni buraxılışı Psalm 3.12, bu, PHP kodunda həm aşkar, həm də incə xətaları müəyyən etməyə, həmçinin bəzi xəta növlərini avtomatik düzəltməyə imkan verir. Sistem həm köhnə kodda, həm də PHP-nin yeni filiallarında təqdim edilmiş müasir funksiyalardan istifadə edən kodda problemləri müəyyən etmək üçün uyğundur. Layihə kodu PHP-də yazılmışdır və yayılır MIT lisenziyası altında.

Zəbur, müxtəlif növlərlə yanaşı, yanlış tip istifadəsi ilə bağlı problemlərin əksəriyyətini müəyyənləşdirir tipik səhvlər. Məsələn, o, ifadədə müxtəlif növ dəyişənlərin qarışdırılması, yanlış məntiqi testlər (məsələn, “if ($a && $a) {}”, “if ($a && !$a) {}" və “ kimi” xəbərdarlıqlarını dəstəkləyir. if ( $a) {} elseif ($a) {}"), obyekt xassələrinin natamam inisializasiyası. Analizator çox yivli rejimdə işləyir. Yalnız son skandan sonra dəyişmiş faylları təhlil edən artımlı skanlar həyata keçirmək mümkündür.

Bundan əlavə, icazə vermək üçün təhlükəsiz proqramlaşdırma vasitələri təmin edilir istifadə edin formatda qeydlər Docblock (“/** @var Type */”) dəyişən növləri, qaytarılan dəyərlər, funksiya parametrləri, obyekt xassələri haqqında məlumat vermək üçün. Növlərdən istifadə nümunələrinin müəyyən edilməsi və təsdiq ifadələrindən istifadə də dəstəklənir. Misal üçün:

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

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

/** @psalm-assert-if-true B $a */
funksiyasıValidB(A $a): bool {
$a instanceof B && $a->isValid();
}

Tapılan problemlərin aradan qaldırılmasını avtomatlaşdırmaq üçün plaginləri və plaginləri dəstəkləyən Psalter yardım proqramı təqdim olunur. imkan ümumi kod problemlərini həll edin, tip annotasiyaları əlavə edin və sinifləri bir ad məkanından digərinə köçürmək, siniflər arasında metodları köçürmək və siniflərin və metodların adının dəyişdirilməsi kimi manipulyasiyalar həyata keçirin.

Zəburun yeni sayında həyata keçirilən "--taint-analysis" seçimi istifadəçidən alınan daxiletmə parametrləri (məsələn, $_GET['name']) və onların simvol qaçışını tələb edən yerlərdə istifadəsi (məsələn, echo ") arasındakı əlaqəni izləməyə imkan verir. $adı "), o cümlədən aralıq tapşırıqların və funksiya çağırışlarının izlənilməsi zəncirləri vasitəsilə. $_GET, $_POST və $_COOKIE assosiativ massivlərindən istifadə potensial təhlükəli məlumat mənbəyi hesab olunur, lakin bu da mümkündür. müəyyənləşdirilməsi öz mənbələri. Qaçan izləmə tələb edən hərəkətlərə HTML məzmunu yaradan, HTTP başlıqları əlavə edən və ya SQL sorğularını yerinə yetirən çıxış əməliyyatları daxildir.

Validasiya echo, exec, include və header kimi funksiyalardan istifadə edərkən istifadə olunur. Qaçma ehtiyacını təhlil edərkən mətn, SQL, HTML və Shell kodu ilə sətirlər, autentifikasiya parametrləri olan sətirlər kimi məlumat növləri nəzərə alınır. Təklif olunan rejim kodda saytlararası skriptin (XSS) və ya SQL əvəzlənməsinə səbəb olan boşluqları müəyyən etməyə imkan verir.

Əlavə olaraq qeyd etmək olar başlamaq yeni PHP 8.0 filialının alfa sınağı. Buraxılış noyabrın 26-na planlaşdırılıb. Yeni filialda aşağıdakılar gözlənilir: yeniliklərKimi:

  • Açılır JIT kompilyatoru, istifadəsi məhsuldarlığı artıracaq.
  • Dəstək birlik növləri, iki və ya daha çox növün kolleksiyalarının müəyyən edilməsi (məsələn, “public function foo(Foo|Bar $input): int|float;”).
  • Dəstək atributlar Docblock sintaksisindən istifadə etmədən metadata (məsələn, növ məlumatı) siniflərə bağlamağa imkan verən (annotasiyalar).
  • Qısaldılmış sintaksis konstruktor və xassələrin tərifini birləşdirməyə imkan verən sinif tərifləri.
  • Yeni qaytarma növü - statik.
  • Yeni tip - qarışıq, funksiyanın müxtəlif tipli parametrləri qəbul edib-etmədiyini müəyyən etmək üçün istifadə edilə bilər.
  • İfadə atmaq istisnaları idarə etmək.
  • Zəif Xəritə zibil yığımı zamanı qurban verilə bilən obyektlər yaratmaq (məsələn, lazımsız keşləri saxlamaq üçün).
  • Imkan obyektlər üçün “::class” ifadəsindən istifadə etməklə (get_class() çağırışının analoqu).
  • Imkan dəyişənlərə bağlı olmayan istisnaların tutma blokundakı təriflər.
  • Imkan funksiya parametrləri siyahısında sonuncu elementdən sonra vergülün qoyulması.
  • Yeni interfeys Simli sətirə çevrilə bilən hər hansı sətir növlərini və ya verilənləri müəyyən etmək üçün (bunun üçün __toString() metodu mövcuddur).
  • Yeni xüsusiyyət str_contains(), alt sətirin baş verməsini təyin etmək üçün strposun sadələşdirilmiş analoqu, həmçinin str_starts_with() və str_ends_with() funksiyaları sətrin əvvəlində və sonunda uyğunluqları yoxlamaq üçün.
  • Əlavə edilmiş xüsusiyyət fdiv(), sıfıra bölərkən xəta atmadan bölmə əməliyyatını yerinə yetirir.
  • Dəyişdi simli birləşmə məntiqi. Məsələn, 'echo "sum:" ifadəsi. $a + $b' əvvəllər 'echo ("sum: " . $a) + $b' kimi şərh edilmişdi və PHP 8-də 'echo "sum:" kimi qəbul ediləcək. ($a + $b)'.
  • Sıxılmış arifmetik və bit əməliyyatlarının yoxlanılması, məsələn, "[] % [42]" və "$object + 4" ifadələri xəta ilə nəticələnəcək.
  • Həyata keçirilən eyni dəyərlərin ardıcıllığının müxtəlif dövrlərdə qorunduğu sabit çeşidləmə alqoritmi.

Mənbə: opennet.ru

Добавить комментарий