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

  • Zivirî Berhevkarê JIT, karanîna wê dê hilberînê çêtir bike.
  • 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.
  • Tîpa vegerê ya nû - Static.
  • Tîpa nû - mixed, ku dikare were bikar anîn da ku diyar bike ka fonksiyonek pîvanên celebên cûda qebûl dike.
  • Expression avêtin to handle îstîsnayan.
  • 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.

Source: opennet.ru

Add a comment