Psalm 7、セキュリティ解析をデフォルトで常時オンに
Psalm 7 release: PHP security&static analysis software

PHPの静的解析ツールPsalmのメジャーバージョン7が登場。型チェック・セキュリティ解析・デッドコード検出を1回の実行でまとめて行えるようになり、テイント解析がデフォルトで有効になった。テイントをビットマスクで保持するなど内部を刷新し、解析は最大10倍高速化。LLMプロンプトインジェクションやNoSQL、URLインジェクションの検出にも対応し、GuzzleやMonologなど主要ライブラリ向けのスタブも同梱される。
テイント解析がデフォルトで有効になり、セキュリティ上の問題はSECURITYという重大度で報告されます。
HNでの議論
30- 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には主要な静的解析ツールが2つあり、PsalmとPHPstanで、どちらもPHPで書かれている。後者は以前はずっと遅かったが、最後に試したときはほとんど差がなかった(10万行+依存関係で約20秒)。
私の推測では、Rustで書かれた新参者のMagoが、おそらくまもなくこれらのツールに取って代わるだろう。そのコマンド(analyze、lint)はすでにpsalm/phpstanとほぼ同等に充実している。ただしレベルという概念がないので、移行は簡単ではないだろう。
- anthk
PHPのRust書き直しを使うべし。
- origini
ああもう、PHPは私が独学で覚えた最初の言語だが、それでもまだ戻り値の型にPHPDocコメントが必要なのか?
おいおい、PHPにはクソみたいなところが山ほどあるが、こんな基本的なことすらまだ言語自体に備わっていないのか?