Psalm 3.12 шығарылымы, PHP тіліне арналған статикалық анализатор. PHP 8.0 альфа нұсқасы

Vimeo компаниясы жарияланған статикалық анализатордың жаңа шығарылымы Забур 3.12, бұл PHP кодындағы анық және жасырын қателерді анықтауға, сонымен қатар қателердің кейбір түрлерін автоматты түрде түзетуге мүмкіндік береді. Жүйе бұрынғы кодта да, PHP жаңа тармақтарында енгізілген заманауи мүмкіндіктерді пайдаланатын кодта да проблемаларды анықтауға жарамды. Жоба коды PHP тілінде жазылған және таралады MIT лицензиясы бойынша.

Забурда әртүрлі типті дұрыс қолданбаумен байланысты мәселелердің көпшілігі анықталған типтік қателер. Мысалы, ол өрнектегі әртүрлі түрдегі айнымалы мәндерді араластыру туралы ескертулерді, қате логикалық сынақтарды («if ($a && $a) {}», «if ($a && !$a) {}» және « сияқты) қолдайды. if ( $a) {} elseif ($a) {}"), нысан сипаттарын инициализациялау аяқталмаған. Анализатор көп ағынды режимде жұмыс істейді. Соңғы сканерлеуден кейін өзгерген файлдарды ғана талдайтын қадамдық сканерлеуді орындауға болады.

Сонымен қатар, рұқсат ету үшін қауіпсіз бағдарламалау құралдары қамтамасыз етілген пайдалану форматтағы аннотациялар Докблок («/** @var Type */») айнымалылар түрлері, қайтарылатын мәндер, функция параметрлері, нысан сипаттары туралы ақпаратты қамтамасыз етеді. Түрді пайдалану үлгілерін анықтауға және бекіту мәлімдемелерін пайдалануға да қолдау көрсетіледі. Мысалы:

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

/** @var жолы $a */
echo strpos($a, 'сәлем');

/** @psalm-assert-if-true B $a */
функциясы -ValidB(A $a): bool {
$a данасын қайтару && $a->isValid();
}

Табылған ақауларды жоюды автоматтандыру үшін плагиндер мен плагиндерді қолдайтын Psalter утилитасы ұсынылған. ол мүмкіндік береді жалпы код мәселелерін шешіңіз, түр аннотацияларын қосыңыз және сыныптарды бір аттар кеңістігінен екіншісіне жылжыту, сыныптар арасында әдістерді жылжыту және сыныптар мен әдістердің атын өзгерту сияқты манипуляцияларды орындаңыз.

Забурдың жаңа санында жүзеге асырылды "--taint-analysis" опциясы пайдаланушыдан алынған енгізу параметрлері (мысалы, $_GET['name']) және оларды таңбадан шығуды қажет ететін жерлерде пайдалану (мысалы, echo ") арасындағы қатынасты қадағалауға мүмкіндік береді. $атауы "), соның ішінде аралық тағайындаулар мен функциялық шақыруларды қадағалау тізбегі арқылы. $_GET, $_POST және $_COOKIE ассоциативті массивтерін пайдалану қауіпті деректер көзі ретінде қарастырылады, бірақ ол да мүмкін. анықтау меншікті көздері. Қашуды бақылауды қажет ететін әрекеттер HTML мазмұнын жасайтын, HTTP тақырыптарын қосатын немесе SQL сұрауларын орындайтын шығыс әрекеттерін қамтиды.

Тексеру echo, exec, include және header сияқты функцияларды пайдалану кезінде қолданылады. Қашу қажеттілігін талдау кезінде мәтін, SQL, HTML және Shell кодтары бар жолдар, аутентификация параметрлері бар жолдар сияқты деректер түрлері ескеріледі. Ұсынылған режим сайттар арасындағы сценарийге (XSS) немесе SQL ауыстыруына әкелетін кодтағы осалдықтарды анықтауға мүмкіндік береді.

Бұған қоса, атап өтуге болады бастау жаңа PHP 8.0 тармағының альфа тестілеуі. Шығарылым 26 қарашаға жоспарланған. Жаңа филиалда келесілер күтілуде: инновациялар, ретінде:

  • Қосу JIT компиляторы, оны пайдалану өнімділікті арттырады.
  • қолдау одақ түрлері, екі немесе одан да көп түрлердің жинақтарын анықтау (мысалы, “жалпыға ортақ функция foo(Foo|Bar $input): int|float;”).
  • қолдау атрибуттар (аннотациялар) Docblock синтаксисін пайдаланбай, метадеректерді (мысалы, түр туралы ақпарат) сыныптарға байланыстыруға мүмкіндік береді.
  • Қысқартылған синтаксис конструктор мен қасиеттердің анықтамасын біріктіруге мүмкіндік беретін класс анықтамалары.
  • Жаңа қайтару түрі - статикалық.
  • Жаңа түрі - аралас, ол функцияның әртүрлі типтегі параметрлерді қабылдайтынын анықтау үшін пайдаланылуы мүмкін.
  • Өрнек тастаңыз ерекше жағдайларды өңдеу үшін.
  • Әлсіз карта қоқыс жинау кезінде құрбан болуға болатын нысандарды жасау (мысалы, қажетсіз кэштерді сақтау үшін).
  • Қабілеті нысандар үшін “::class” өрнегін қолдану (get_class() шақыруының аналогы).
  • Қабілеті айнымалы мәндерге байланбаған ерекшеліктерді ұстау блогындағы анықтамалар.
  • Қабілеті функция параметрлері тізіміндегі соңғы элементтен кейін үтір қалдыру.
  • Жаңа интерфейс Жіпті жолға түрлендіруге болатын кез келген жол түрлерін немесе деректерді анықтау үшін (олар үшін __toString() әдісі қолжетімді).
  • Жаңа мүмкіндік str_contains(), ішкі жолдың пайда болуын анықтауға арналған strpos-тың жеңілдетілген аналогы, сондай-ақ жолдың басы мен соңындағы сәйкестіктерді тексеру үшін str_starts_with() және str_ends_with() функциялары.
  • Қосымша функция fdiv(), ол нөлге бөлу кезінде қате жібермей бөлу операциясын орындайды.
  • Өзгертілді жолды біріктіру логикасы. Мысалы, "echo "sum:" өрнегі. $a + $b' бұрын 'echo ("sum: " . $a) + $b' ретінде түсіндірілді, ал PHP 8 тілінде 'echo "sum:" ретінде қарастырылады. ($a + $b)'.
  • Тартылған арифметикалық және бит амалдарын тексеру, мысалы, "[] % [42]" және "$объект + 4" өрнектері қатеге әкеледі.
  • Орындалды тұрақты сұрыптау алгоритмі, онда бірдей мәндердің реті әртүрлі жүгірістерде сақталады.

Ақпарат көзі: opennet.ru

пікір қалдыру