Выпуск Psalm 3.12, статистического анализитора для языка PHP. Альфа выпуск PHP 8.0
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Компания Vimeo опубликовала новый выпуск статистического анализатора Psalm 3.12, позволяющего выявлять как очевидные, так и трудноуловимые ошибки в коде на языке PHP, а также автоматически исправлять некоторые виды ошибок. Система подходит для выявления проблем как в устаревшем коде, так и в коде, использующем современные возможности, появившиеся в новых ветках PHP. Код проекта написан на языке PHP и распространяется под лицензией MIT.
Psalm определяет большую часть проблем, связанных с некорректным использованием типов, а также разнообразные типовые ошибки. Например, поддерживается вывод предупреждений о смешивании в выражении переменных с разными типами, некорректных логических проверках (таких как "if ($a && $a) {}", "if ($a && !$a) {}" и "if ($a) {} elseif ($a) {}"), неполной инициализации свойств объекта. Анализатор выполняется в многопоточном режиме. Возможно выполнение инкрементальных проверок, при которых анализируются только файлы, изменившиеся с момента прошлой проверки.
Дополнительно предоставляются средства безопасного программирования, позволяющие использовать аннотации в формате 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, которая поддерживает плагины и позволяет устранять типовые проблемы в коде, добавлять аннотации о типах, а также выполнять такие манипуляции, как перемещение классов из одного пространства имён в другое, перемещение методов между классами, переименовывание классов и методов.
В новом выпуске Psalm реализована опция "--taint-analysis", позволяющая проследить связь между полученными от пользователя входными параметрами (например, $_GET['name']) и их использованием в местах, требующих экранирования символов (например, echo "<h1>$name</h1>"), в том числе через отслеживание цепочек промежуточных присвоений и вызовов функций. В качестве источников потенциально опасных данных рассматривается использование ассоциативных массивов $_GET, $_POST и $_COOKIE, но возможно и определение собственных источников.
В качестве выходных ворот, требующих отслеживания экранирования, проверяются операции, приводящие к выводу в формате HTML, добавлению HTTP-заголовков или формированию SQL-запросов. Проверка применяется при использовании таких функций, как echo, exec, include и header. При анализе необходимости экранирования учитываются типы данных, такие как текст, строки с SQL, HTML и Shell-кодом, строки с параметрами аутентификации. Предложенный режим позволяет выявлять уязвимости в коде, приводящие к межсайтовому скриптингу (XSS) или подстановке SQL-кода.
Дополнительно можно отметить начало альфа-тестирования новой ветки PHP 8.0. Релиз намечен на 26 ноября. В новой ветке ожидаются такие новшества, как:
- Включение JIT-компилятора, применение которого позволит повысить производительность.
- Поддержка union-типов, определяющих коллекции из двух и более типов (например "public function foo(Foo|Bar $input): int|float;").
- Поддержка атрибутов (аннотаций), позволяющих привязать метаданные (например, сведения о типах) к классам без использования синтаксиса Docblock.
- Сокращённый синтаксис определения классов, позволяющий объединить определение конструктора и свойств.
- Новый тип возвращаемых значений - static.
- Новый тип - mixed, который может применяться для определения приёма функцией параметров с разными типами.
- Выражение throw для обработки исключений.
- WeakMap для создания объектов, которыми можно пожертвовать при сборке мусора (например, для хранения необязательных кэшей).
- Возможность использования выражения "::class" для объектов (аналог вызова get_class()).
- Возможность определения в блоке catch исключений, не привязанных к переменным.
- Возможность оставления символа запятой после последнего элемента в списке параметров функции.
- Новый интерфейс Stringable для идентификации любых строковых типов или данных, которых можно преобразовать в строку (для которых доступен метод__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]" и "$object + 4" будут приводить к ошибке.
- Реализован стабильный алгоритм сортировки, в котором при разных запусках сохраняется порядок следования одинаковых значений.
===========
Источник:
OpenNet.RU
===========
Похожие новости
- Главная ссылка к новости (https://psalm.dev/articles/det...)
- OpenNews: Выпуск Snuffleupagus 0.5.1, модуля для блокирования уязвимостей в PHP-приложениях
- OpenNews: Релиз языка программирования PHP 7.4
- OpenNews: Уязвимость php-fpm, позволяющая удалённо выполнить код на сервере
- OpenNews: Разработчики PHP предложили P++, диалект со строгой типизацией
- OpenNews: Выпуск виртуальной машины HHVM 4.0 с прекращением поддержки PHP
Похожие новости:
- [IT-стандарты, Интерфейсы, Спортивное программирование, Функциональное программирование] Минимизация кликов и горячие клавиши для жизни разработчика + Темнее Тёмной Темноты
- Выпуск платформы динамической трассировки приложений Frida 12.10
- [PHP, Symfony, Тестирование веб-сервисов] 10 советов по тестированию в Symfony (перевод)
- [PHP, Symfony] [Symfony 5] Раздельная авторизация для админов и пользователей с двумя разными сущностями и формами входа
- [PHP, Symfony, Совершенный код, Управление разработкой] Как быть, когда все советуют растащить проект на микросервисы. А ты не готов
- [JavaScript, Lua, PHP, Хакатоны] Эволюция real-time Web: примеры из практики (или с чем Lua справляется лучше JS)
- [Laravel, PHP, Разработка веб-сайтов] Laravel-Дайджест (22–28 июня 2020)
- [Laravel, PHP, Высокая производительность] Решение проблемы N+1 запроса без увеличения потребления памяти в Laravel (перевод)
- [PHP, Symfony] Простое управление ACL в Symfony (перевод)
- [1С-Битрикс] Быстрая авторизация в Битрикс, или как переключаться между пользователями без ввода пароля
Теги для поиска: #_php, #_debug
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 23-Ноя 13:23
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Компания Vimeo опубликовала новый выпуск статистического анализатора Psalm 3.12, позволяющего выявлять как очевидные, так и трудноуловимые ошибки в коде на языке PHP, а также автоматически исправлять некоторые виды ошибок. Система подходит для выявления проблем как в устаревшем коде, так и в коде, использующем современные возможности, появившиеся в новых ветках PHP. Код проекта написан на языке PHP и распространяется под лицензией MIT. Psalm определяет большую часть проблем, связанных с некорректным использованием типов, а также разнообразные типовые ошибки. Например, поддерживается вывод предупреждений о смешивании в выражении переменных с разными типами, некорректных логических проверках (таких как "if ($a && $a) {}", "if ($a && !$a) {}" и "if ($a) {} elseif ($a) {}"), неполной инициализации свойств объекта. Анализатор выполняется в многопоточном режиме. Возможно выполнение инкрементальных проверок, при которых анализируются только файлы, изменившиеся с момента прошлой проверки. Дополнительно предоставляются средства безопасного программирования, позволяющие использовать аннотации в формате 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(); } В новом выпуске Psalm реализована опция "--taint-analysis", позволяющая проследить связь между полученными от пользователя входными параметрами (например, $_GET['name']) и их использованием в местах, требующих экранирования символов (например, echo "<h1>$name</h1>"), в том числе через отслеживание цепочек промежуточных присвоений и вызовов функций. В качестве источников потенциально опасных данных рассматривается использование ассоциативных массивов $_GET, $_POST и $_COOKIE, но возможно и определение собственных источников. В качестве выходных ворот, требующих отслеживания экранирования, проверяются операции, приводящие к выводу в формате HTML, добавлению HTTP-заголовков или формированию SQL-запросов. Проверка применяется при использовании таких функций, как echo, exec, include и header. При анализе необходимости экранирования учитываются типы данных, такие как текст, строки с SQL, HTML и Shell-кодом, строки с параметрами аутентификации. Предложенный режим позволяет выявлять уязвимости в коде, приводящие к межсайтовому скриптингу (XSS) или подстановке SQL-кода. Дополнительно можно отметить начало альфа-тестирования новой ветки PHP 8.0. Релиз намечен на 26 ноября. В новой ветке ожидаются такие новшества, как:
=========== Источник: OpenNet.RU =========== Похожие новости
|
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 23-Ноя 13:23
Часовой пояс: UTC + 5