PHP tili uchun statik analizator bo'lgan Psalm 3.12 ning chiqarilishi. PHP 8.0 ning alfa versiyasi

Vimeo kompaniyasi e'lon qilindi statik analizatorning yangi versiyasi Zabur 3.12, 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 tarqaladi MIT litsenziyasi ostida.

Zabur noto'g'ri turdagi foydalanish bilan bog'liq muammolarning ko'pini, shuningdek, turli xil muammolarni aniqlaydi tipik xatolar. 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 foydalanish formatdagi izohlar Docblock (“/** @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. Bu beradi 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 amalga oshirildi "--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. aniqlash 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 boshlang yangi PHP 8.0 filialining alfa testi. Chiqarish 26-noyabrga rejalashtirilgan. Yangi filialda quyidagilar kutilmoqda: yangiliklar, quyidagilar:

  • Faollashtirish JIT kompilyatori, ulardan foydalanish samaradorlikni oshiradi.
  • qo'llab-quvvatlash birlashma turlari, ikki yoki undan ortiq turdagi to'plamlarni aniqlash (masalan, “ommaviy funktsiya foo(Foo|Bar $input): int|float;”).
  • qo'llab-quvvatlash atributlar Docblock sintaksisidan foydalanmasdan metama'lumotlarni (masalan, turdagi ma'lumotlar) sinflarga bog'lash imkonini beruvchi (annotatsiyalar).
  • Qisqartirilgan sintaksis konstruktor va xususiyatlarning ta'rifini birlashtirishga imkon beruvchi sinf ta'riflari.
  • Yangi qaytish turi - statik.
  • Yangi tur - aralash, bu funksiya har xil turdagi parametrlarni qabul qiladimi yoki yo'qligini aniqlash uchun ishlatilishi mumkin.
  • So'zlashuv otish istisnolarni hal qilish uchun.
  • Zaif xarita axlat yig'ish paytida qurbon bo'lishi mumkin bo'lgan ob'ektlarni yaratish (masalan, keraksiz keshlarni saqlash uchun).
  • imkoniyat ob'ektlar uchun "::class" iborasidan foydalanish (get_class() chaqiruviga o'xshash).
  • imkoniyat o'zgaruvchilarga bog'lanmagan istisnolar blokidagi ta'riflar.
  • imkoniyat funktsiya parametrlari ro'yxatidagi oxirgi elementdan keyin vergul qo'yish.
  • Yangi interfeys Tarmoqli satrga aylantirilishi mumkin bo'lgan har qanday satr turlarini yoki ma'lumotlarini aniqlash uchun (bular uchun __toString() usuli mavjud).
  • Yangi xususiyat str_contains(), 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 fdiv(), nolga bo'lishda xatolikka yo'l qo'ymasdan bo'lish amalini bajaradi.
  • O'zgartirildi 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)'.
  • Qattiqlashtirilgan arifmetik va bit operatsiyalarini tekshirish, masalan, "[] % [42]" va "$object + 4" iboralari xatolikka olib keladi.
  • Amalga oshirildi barqaror saralash algoritmi, unda bir xil qiymatlar tartibi turli xil yugurishlarda saqlanadi.

Manba: opennet.ru

a Izoh qo'shish