Vimeo şirkəti statik analizatorun yeni buraxılışı , 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ə 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 . 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 formatda qeydlər (“/** @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. ü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 "--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. ö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 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: Kimi:
- , istifadəsi məhsuldarlığı artıracaq.
- Dəstək , 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 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).
- konstruktor və xassələrin tərifini birləşdirməyə imkan verən sinif tərifləri.
- Yeni qaytarma növü - .
- Yeni tip - , funksiyanın müxtəlif tipli parametrləri qəbul edib-etmədiyini müəyyən etmək üçün istifadə edilə bilər.
- İfadə istisnaları idarə etmək.
- zibil yığımı zamanı qurban verilə bilən obyektlər yaratmaq (məsələn, lazımsız keşləri saxlamaq üçün).
- obyektlər üçün “::class” ifadəsindən istifadə etməklə (get_class() çağırışının analoqu).
- dəyişənlərə bağlı olmayan istisnaların tutma blokundakı təriflər.
- funksiya parametrləri siyahısında sonuncu elementdən sonra vergülün qoyulması.
- Yeni interfeys 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 , 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 , sıfıra bölərkən xəta atmadan bölmə əməliyyatını yerinə yetirir.
- 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)'.
- 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.
- 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
