Psalm 7 включает анализ безопасности по умолчанию и ускоряет его в 10 раз
Psalm 7 release: PHP security&static analysis software

Вышел Psalm 7 — статический анализатор для PHP. Анализ уязвимостей теперь включён по умолчанию и работает в одном прогоне с проверкой типов и поиском мёртвого кода, а благодаря хранению taint-меток в виде битмаски он стал до 10 раз быстрее. Отслеживание taint углубилось: NoSQL, инъекции в LLM-промпты и URL, потоки через замыкания, генераторы и traits. Добавлены модель чистоты на основе capabilities из Hack, графовый поиск неиспользуемого кода, значения шаблонов по умолчанию и поддержка PHP 8.5–8.6.
Psalm 7 работает на 64-битном PHP от 8.2 до 8.6. Для большинства проектов обновление сводится к обновлению зависимости в Composer.
- idoubtit
Тем, кто не знаком с PHP: статический анализ здесь практически обязателен, потому что официальная система типов PHP минимальна. Детальные типы добавляются через phpdoc-комментарии, и они также помогают IDE обеспечивать разумное автодополнение. Например, простой "array" следует уточнять через phpdoc:
/**
* @param array<string, MyRecord> $input
* @return list<int>
*/
function foo(array $input): array
{
foreach ($input as $string => $record) {
// IDE знает, что $record — экземпляр MyRecord
Статический анализ будет использовать обе системы типов, и это единственный способ проверить, что phpdoc согласованы. У Psalm есть различные уровни строгости, и даже на очень мягком уровне он может помочь обнаружить ошибки или код-смеллы.
Для PHP есть два основных инструмента статического анализа — Psalm и PHPstan, оба написаны на PHP. Последний раньше был намного медленнее, но в последний раз, когда я его пробовал, разница была небольшой (около 20 с для 100 тыс. строк + зависимости).
Моя догадка: новый конкурент Mago, написанный на Rust, вероятно, скоро заменит эти другие инструменты. Его команды (analyze, lint) уже почти так же полны, как у psalm/phpstan. Хотя миграция будет непростой, потому что у него нет понятия уровней.
- tosti
> Официальное сообщество в Discord!
Это регресс.
- anthk
Да будете вы использовать переписанный на Rust PHP.
- origini
Ох, парни, PHP был первым языком, который я выучил сам, но, блин, ему всё ещё нужны PHPDoc-комментарии для типов возвращаемых значений?
Да ладно, в PHP столько дерьмовых вещей, но даже что-то базовое, вроде этого, всё ещё не в самом языке?