+38/050/370-3627
+38/093/220-0872
+38/044/257-2444
Новини

Vimeo опублікувала статичний аналізатор Psalm 3.12, який виявляє та виправляє помилки в коді мовою PHP

Vimeo опублікував статичний аналізатор Psalm 3.12, який виявляє та виправляє помилки в php-коді

Компанія Vimeo опублікувала статичний аналізатор Psalm 3.12, який дозволяє виявляти і виправляти помилки в php-коді. Система підходить для виявлення проблем як в застарілому коді, так і в коді, що використовує сучасні можливості, що з'явилися в нових гілках PHP. Код проекту пишеться на PHP і поширюється під ліцензією MIT.

Псалом виділяє більшість проблем, пов'язаних з неправильним вживанням типів, а також різноманітні поширені помилки. Наприклад, підтримується відображення попереджень про змішування змінних з різними типами в виразі, неправильні логічні перевірки (такі як "if ($a && $a) {}", "if ($a && !$a) {}" і "if ($a) {} elseif ($a) {}"), неповна ініціалізація властивостей об'єкта. Аналізатор виконаний в багатопотоковому режимі. Можливе виконання інкрементних перевірок, при яких аналізуються тільки файли, які змінилися з моменту останнього сканування.

Додатково передбачені засоби захищеного програмування, що дозволяють використовувати анотації в форматі docblock ("/** @var Type */") для надання інформації про типи змінних, значеннях повернення, параметрах функцій, властивостях об'єктів. Ви також можете визначити шаблони використання типів і використовувати вирази assert.

Для автоматизації усунення знайдених проблем передбачена утиліта Psalter, яка підтримує плагіни і дозволяє усувати типові проблеми в коді, додавати анотації про типи, виконувати такі маніпуляції, як переміщення класів з одного простору імен в інший, переміщення методів між класами, перейменування класів і методів.

У новому релізі Псалма реалізована опція «--taint-analysis», яка дозволяє простежити взаємозв'язок між вхідними параметрами, отриманими від користувача (наприклад, $_GET['name']) і їх використанням в місцях, що вимагають втечі символів (наприклад, відлуння «<h1>$name</h1>»), в тому числі за допомогою ланцюжків відстеження проміжних призначень і викликів функцій. В якості джерел потенційно небезпечних даних розглядається використання асоціативних масивів $_GET, $_POST і $_COOKIE, але також можна визначити власні джерела. З дій, які вимагають відстеження втечі, вважаються операції виведення, які призводять до генерації HTML-контенту, додавання ЗАГОЛОВКІВ HTTP або виконання SQL-запитів.

Перевірка застосовується при використанні таких функцій, як echo, exec, include і header. При аналізі необхідності втечі враховуються такі типи даних, як текст, рядки з кодом SQL, HTML і Shell, рядки з параметрами аутентифікації. Запропонований режим дозволяє виявити вразливості в коді, які призводять до міжсайтових сценаріїв (XSS) або підміни SQL.

Додатково можна відзначити початок альфа-тестування нової гілки PHP 8.0. Реліз запланований на 26 листопада. У новій галузі очікуються такі нововведення, як:

  • Увімкніть своєчасний компілятор (JIT) для підвищення продуктивності.
  •  Підтримка типів об'єднань, які визначають колекції двох і більше типів (наприклад, "public function foo(Foo| Барна $input): інт|плоузд;»).
  •  Підтримка атрибутів (анотацій), які дозволяють прив'язувати метадані (наприклад, інформацію про тип) до класів без використання синтаксису Docblock.
  • Спрощений синтаксис визначення класу, що дозволяє об'єднати визначення конструктора і властивості.
  • Новий тип повернених значень – статичний .
  • Новий тип - змішаний , за допомогою якого функція може визначати прийом параметрів з різними типами.
  • Кинути вираз для обробки винятків.
  • WeakMap для створення об'єктів, які можна пожертвувати при зборі сміття (наприклад, для зберігання необов'язкових кешів).
  • Можливість використання виразу "::class" для об'єктів (аналогічно виклику get_class()).
  • Можливість визначати винятки в блоці улову, які не прив'язані до змінних.
  • Можливість залишати символ коми після останнього елемента в списку параметрів функції.
  • Новий рядковий інтерфейс для ідентифікації будь-яких типів рядків або даних, які можна перетворити в рядок (для чого доступний метод __toString().
  • Нова функція str_contains(), спрощений аналог strpos для визначення входження підрядки, а також функції str_starts_with() і str_ends_with() для перевірки збігів на початку і кінці рядка.
  • Додано функцію fdiv() , яка виконує операцію ділення без відображення помилки в разі ділення на нуль.
  •  Логіка об'єднання рядків була змінена. Наприклад, вираз 'echo 'sum:' . $a + $b' раніше інтерпретувався як 'echo('сума:' . $a) + $b' і в PHP 8 буде розглядатися як 'echo'sum:' . ($a + $b)'.
  • Посилена перевірка арифметичних і розрядних операцій, наприклад, вирази «[] % [42]» і «$object + 4» приведуть до помилки.
  • Реалізовано стабільний алгоритм сортування , в якому порядок одних і тих же значень зберігається при різних пусках.

Інші новини

Найкраща ціна