Vimeo kompaniyasi statik analizatorning yangi versiyasi , bu sizga PHP kodidagi ham aniq, ham nozik xatolarni aniqlash, shuningdek, ayrim turdagi xatolarni avtomatik ravishda tuzatish imkonini beradi. Tizim ham eski koddagi, ham PHP ning yangi tarmoqlarida joriy qilingan zamonaviy funksiyalardan foydalanadigan koddagi muammolarni aniqlash uchun javob beradi. Loyiha kodi PHP da yozilgan va MIT litsenziyasi ostida.
Zabur noto'g'ri turdagi foydalanish bilan bog'liq muammolarning ko'pini, shuningdek, turli xil muammolarni aniqlaydi . Masalan, u ifodada turli turdagi o‘zgaruvchilarni aralashtirish, noto‘g‘ri mantiqiy testlar (masalan, “if ($a && $a) {}”, “if ($a && !$a) {}" va “kabi” haqida ogohlantirishlarni qo‘llab-quvvatlaydi. if ( $a) {} elseif ($a) {}"), ob'ekt xususiyatlarining to'liq ishga tushirilmaganligi. Analizator ko'p tarmoqli rejimda ishlaydi. Faqat oxirgi skanerdan keyin o'zgargan fayllarni tahlil qiladigan bosqichma-bosqich skanerlashni amalga oshirish mumkin.
Bundan tashqari, ruxsat berish uchun xavfsiz dasturlash vositalari taqdim etiladi formatdagi izohlar (“/** @var Type */”) oʻzgaruvchilar turlari, qaytariladigan qiymatlar, funksiya parametrlari, obyekt xossalari haqida maʼlumot berish uchun. Turlardan foydalanish naqshlarini aniqlash va tasdiqlash bayonotlaridan foydalanish ham qo'llab-quvvatlanadi. Masalan:
/** @var string|null */
$a = foo();
/** @var string $a */
echo strpos($a, 'salom');
/** @psalm-assert-if-rue B $a */
funksiyasiValidB(A $a): bool {
$a instanceof B && $a->isValid();
}
Topilgan muammolarni bartaraf etishni avtomatlashtirish uchun plaginlarni va plaginlarni qo'llab-quvvatlaydigan Psalter yordam dasturi taqdim etilgan. umumiy kod muammolarini bartaraf etish, turdagi izohlarni qo'shish va sinflarni bir nom maydonidan boshqasiga ko'chirish, sinflar o'rtasida usullarni ko'chirish va sinflar va usullarni qayta nomlash kabi manipulyatsiyalarni bajarish.
Zaburning yangi sonida "--taint-analysis" opsiyasi foydalanuvchidan qabul qilingan kiritish parametrlari (masalan, $_GET['name']) va ularning belgilardan qochish talab qilinadigan joylarda qo'llanilishi (masalan, echo ") o'rtasidagi munosabatni kuzatish imkonini beradi. $name "), shu jumladan oraliq topshiriqlar va funktsiya chaqiruvlarini kuzatish zanjirlari orqali. $_GET, $_POST va $_COOKIE assotsiativ massivlaridan foydalanish potentsial xavfli ma'lumotlar manbalari sifatida ko'rib chiqiladi, ammo bu ham mumkin. o'z manbalari. Qochish kuzatuvini talab qiladigan harakatlar HTML tarkibini yaratuvchi, HTTP sarlavhalarini qo'shadigan yoki SQL so'rovlarini bajaradigan chiqish operatsiyalarini o'z ichiga oladi.
Validatsiya echo, exec, include va header kabi funksiyalardan foydalanilganda ishlatiladi. Qochish zaruriyatini tahlil qilishda matn, SQL, HTML va Shell kodli satrlar, autentifikatsiya parametrlariga ega satrlar kabi ma'lumotlar turlari hisobga olinadi. Taklif etilayotgan rejim saytlararo skript (XSS) yoki SQL almashtirishga olib keladigan koddagi zaifliklarni aniqlash imkonini beradi.
Bundan tashqari, buni ta'kidlash mumkin yangi PHP 8.0 filialining alfa testi. Chiqarish 26-noyabrga rejalashtirilgan. Yangi filialda quyidagilar kutilmoqda: , quyidagilar:
- , ulardan foydalanish samaradorlikni oshiradi.
- Qo'llash , ikki yoki undan ortiq turdagi to'plamlarni aniqlash (masalan, “ommaviy funktsiya foo(Foo|Bar $input): int|float;”).
- Qo'llash Docblock sintaksisidan foydalanmasdan metama'lumotlarni (masalan, turdagi ma'lumotlar) sinflarga bog'lash imkonini beruvchi (annotatsiyalar).
- konstruktor va xususiyatlarning ta'rifini birlashtirishga imkon beruvchi sinf ta'riflari.
- Yangi qaytish turi - .
- Yangi tur - , bu funksiya har xil turdagi parametrlarni qabul qiladimi yoki yo'qligini aniqlash uchun ishlatilishi mumkin.
- So'zlashuv istisnolarni hal qilish uchun.
- axlat yig'ish paytida qurbon bo'lishi mumkin bo'lgan ob'ektlarni yaratish (masalan, keraksiz keshlarni saqlash uchun).
- ob'ektlar uchun "::class" iborasidan foydalanish (get_class() chaqiruviga o'xshash).
- o'zgaruvchilarga bog'lanmagan istisnolar blokidagi ta'riflar.
- funktsiya parametrlari ro'yxatidagi oxirgi elementdan keyin vergul qo'yish.
- Yangi interfeys satrga aylantirilishi mumkin bo'lgan har qanday satr turlarini yoki ma'lumotlarini aniqlash uchun (bular uchun __toString() usuli mavjud).
- Yangi xususiyat , pastki qatorning paydo bo'lishini aniqlash uchun strpos ning soddalashtirilgan analogi, shuningdek, satr boshida va oxirida mosliklarni tekshirish uchun str_starts_with() va str_ends_with() funktsiyalari.
- Qo'shilgan funksiya , nolga bo'lishda xatolikka yo'l qo'ymasdan bo'lish amalini bajaradi.
- satrlarni birlashtirish mantig'i. Masalan, 'echo "sum:" iborasi. $a + $b' avval 'echo ("sum: " . $a) + $b' sifatida talqin qilingan va PHP 8 da 'echo "sum:" sifatida ko'rib chiqiladi. ($a + $b)'.
- arifmetik va bit operatsiyalarini tekshirish, masalan, "[] % [42]" va "$object + 4" iboralari xatolikka olib keladi.
- barqaror saralash algoritmi, unda bir xil qiymatlar tartibi turli xil yugurishlarda saqlanadi.
Manba: opennet.ru
