ProHoster > Blog > nûçeyên înternetê > Derxistina Zebûr 3.12, analîzkerek statîk ji bo zimanê PHP. Daxistina Alpha ya PHP 8.0
Derxistina Zebûr 3.12, analîzkerek statîk ji bo zimanê PHP. Daxistina Alpha ya PHP 8.0
Компания Vimeo weşandin новый выпуск статического анализатора ZEBÛR 3.12, позволяющего выявлять как очевидные, так и трудноуловимые ошибки в коде на языке PHP, а также автоматически исправлять некоторые виды ошибок. Система подходит для выявления проблем как в устаревшем коде, так и в коде, использующем современные возможности, появившиеся в новых ветках PHP. Код проекта написан на языке PHP и belav kirin ji hêla di bin lîsansa MIT.
Psalm определяет большую часть проблем, связанных с некорректным использованием типов, а также разнообразные типичные ошибки. Например, поддерживается вывод предупреждений о смешивании в выражении переменных с разными типами, некорректных логических проверках (таких как «if ($a && $a) {}», «if ($a && !$a) {}» и «if ($a) {} elseif ($a) {}»), неполной инициализации свойств объекта. Анализатор выполняется в многопоточном режиме. Возможно выполнение инкрементальных проверок, при которых анализируются только файлы, изменившиеся с момента прошлой проверки.
Дополнительно предоставляются средства безопасного программирования, позволяющие bikar bînin аннотации в формате Docblock («/** @var Type */») для предоставления информации о типах переменных, возвращаемых значениях, параметрах функций, свойствах объектов. Также поддерживается определение шаблонов использования типов и применение выражений assert. Например:
/** @var string|null */
$a = foo();
/** @var string $a */
echo strpos($a, ‘hello’);
/** @psalm-assert-if-true B $a */
function isValidB(A $a) : bool {
return $a instanceof B && $a->isValid();
}
Для автоматизации устранения найденных проблем предоставляется утилита Psalter, которая поддерживает плагины и Ev rê dide устранять типовые проблемы в коде, добавлять аннотации о типах, а также выполнять такие манипуляции, как перемещение классов из одного пространства имён в другое, перемещение методов между классами, переименовывание классов и методов.
В новом выпуске Psalm pêkanîn опция «—taint-analysis», позволяющая проследить связь между полученными от пользователя входными параметрами (например, $_GET[‘name’]) и их использованием в местах, требующих экранирования символов (например, echo «<h1>$name</h1>»), в том числе через отслеживание цепочек промежуточных присвоений и вызовов функций. В качестве источников потенциально опасных данных рассматривается использование ассоциативных массивов $_GET, $_POST и $_COOKIE, но возможно и biryardariyê собственных источников. Из действий, требующих отслеживания экранирования, рассматриваются операции вывода, приводящие к формированию контента в формате HTML, добавлению HTTP-заголовков или выполнению SQL-запросов.
Проверка применяется при использовании таких функций, как echo, exec, include и header. При анализе необходимости экранирования учитываются типы данных, такие как текст, строки с SQL, HTML и Shell-кодом, строки с параметрами аутентификации. Предложенный режим позволяет выявлять уязвимости в коде, приводящие к межсайтовому скриптингу (XSS) или подстановке SQL-кода.
Wekî din, ew dikare were destnîşan kirin destpêkê альфа-тестирования новой ветки PHP 8.0. Релиз намечен на 26 ноября. В новой ветке ожидаются такие nûbûnênmîna
alîkarî cureyên yekîtiyê, danasîna berhevokên du an bêtir celeban (mînak, "fonksiyona giştî foo(Foo|Bar $input): int|float;").
alîkarî taybetmendiyên (navdêr) ku destûrê dide te ku hûn metadata (wek mînak agahdariya celeb) bi dersan ve girêdin bêyî ku hevoksaziya Docblock bikar bînin.
Hevoksaziya kurtkirî pênaseyên sinifê, dihêle hûn pênaseya çêker û taybetmendiyan bi hev re bikin.
WeakMap ji bo afirandina tiştên ku dikarin di dema berhevkirina çopê de bêne qurban kirin (mînakî, hilanîna kaşên nehewce).
Fersend bikaranîna îfadeya "::class" ji bo hêmanan (analog bi gazîkirina get_class()).
Fersend pênaseyên di bloka girtina îstisnayan de ku bi guherbaran ve girêdayî ne.
Fersend piştî hêmana paşîn di navnîşa parametreyên fonksiyonê de kommayek hiştin.
Navbera nû Stringable ji bo naskirina cûreyên rêzikan an daneya ku dikare bibe stringek (ji bo ku rêbaza __toString() heye) nas bike.
Taybetmendiya nû str_contains(), analogek sadekirî ya strpos ji bo destnîşankirina rûdana binerêzek, û her weha fonksiyonên str_starts_with() û str_ends_with() ji bo kontrolkirina hevberdan li destpêk û dawiya rêzekê.
Taybetmendiya zêdekirî fdiv(), ku dema dabeşkirina bi sifirê bêyî ku xeletiyek bavêje operasyonek dabeşkirinê pêk tîne.
Guhertin string tevlî mantiqa. Mînakî, îfadeya 'echo "sum:" . $a + $b' berê wekî 'echo ("sum: " . $a) + $b' dihat şîrovekirin, û di PHP 8 de dê wekî 'echo "sum:" were hesibandin. ($a + $b)'.
Tightened Ji bo nimûne, biwêjên "[] % [42]" û "$object + 4" dê bibe sedema xeletiyekê.
Pêk anîn algorîtmayek birêkûpêk a bi îstîqrar ku tê de rêza nirxên yeksan di nav rêzikên cihêreng de tê parastin.