Psalm 7 включает анализ безопасности по умолчанию и ускоряет его в 10 раз

Psalm 7 release: PHP security&static analysis software

Psalm 7 включает анализ безопасности по умолчанию и ускоряет его в 10 раз

Вышел 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.
  1. 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. Хотя миграция будет непростой, потому что у него нет понятия уровней.

  2. tosti

    > Официальное сообщество в Discord!

    Это регресс.

  3. anthk

    Да будете вы использовать переписанный на Rust PHP.

  4. origini

    Ох, парни, PHP был первым языком, который я выучил сам, но, блин, ему всё ещё нужны PHPDoc-комментарии для типов возвращаемых значений?

    Да ладно, в PHP столько дерьмовых вещей, но даже что-то базовое, вроде этого, всё ещё не в самом языке?

Ещё за этот день

2026-11-09