PHP 言語の静的アナライザーである Psalm 3.12 のリリース。 PHP 8.0のアルファ版リリース

Vimeo会社 опубликовала 静的アナライザーの新リリース 詩篇3.12これにより、PHP コード内の明らかなエラーと微妙なエラーの両方を識別し、一部の種類のエラーを自動的に修正できます。 このシステムは、従来のコードと、PHP の新しいブランチに導入された最新の機能を使用するコードの両方の問題を特定するのに適しています。 プロジェクトのコードはPHPで書かれており、 によって配布 MITライセンスの下で。

詩篇は、誤ったタイプの使用法に関連する問題のほとんどと、さまざまな問題を特定しています。 典型的な間違い。 たとえば、式内での異なる型の変数の混合、誤った論理テスト (「if ($a && $a) {}」、「if ($a && !$a) {}」、「 if ( $a) {} elseif ($a) {}")、オブジェクト プロパティの初期化が不完全です。 アナライザーはマルチスレッド モードで実行されます。 最後のスキャン以降に変更されたファイルのみを分析する増分スキャンを実行することができます。

さらに、安全なプログラミング ツールが提供されており、 使用します 形式の注釈 ドックブロック (「/** @var Type */」) 変数の型、戻り値、関数パラメーター、オブジェクトのプロパティに関する情報を提供します。 型の使用パターンの定義と、assert ステートメントの使用もサポートされています。 例えば:

/** @var 文字列|null */
$a = foo();

/** @var string $a */
echo strpos($a, 'hello');

/** @psalm-assert-if-true B $a */
関数 isValidB(A $a) : bool {
$a インスタンスを返します && $a->isValid();
}

見つかった問題の排除を自動化するために、プラグインとプラグインをサポートする Psalter ユーティリティが提供されています。 許可する 一般的なコードの問題のトラブルシューティング、型注釈の追加、ある名前空間から別の名前空間へのクラスの移動、クラス間でのメソッドの移動、クラスとメソッドの名前変更などの操作を実行します。

詩篇の新刊では 実装されました 「--taint-analysis」オプションを使用すると、ユーザーから受け取った入力パラメータ ($_GET['name'] など) と、文字エスケープが必要な場所 (echo など) での使用との間の関係を追跡できます。 $name ")、中間代入と関数呼び出しの追跡チェーンによるものも含まれます。 連想配列 $_GET、$_POST、$_COOKIE の使用は潜在的に危険なデータのソースとみなされますが、可能性もあります。 決定 独自の情報源。 追跡のエスケープが必要なアクションには、HTML コンテンツの生成、HTTP ヘッダーの追加、SQL クエリの実行などの出力操作が含まれます。

検証は、echo、exec、include、header などの関数を使用するときに使用されます。 エスケープの必要性を分析する際には、テキスト、SQL、HTML、シェルコードを含む文字列、認証パラメータを含む文字列などのデータ型が考慮されます。 提案されたモードを使用すると、クロスサイト スクリプティング (XSS) や SQL 置換につながるコード内の脆弱性を特定できます。

さらに、注目できるのは、 スタート 新しい PHP 8.0 ブランチのアルファ テスト。 発売は26月XNUMX日を予定しております。 新しいブランチでは次のことが期待されます。 イノベーションとして:

  • 有効化 JITコンパイラを使用すると生産性が向上します。
  • サポート 共用体型、XNUMX つ以上の型のコレクションを定義します (たとえば、「public function foo(Foo|Bar $input): int|float;」)。
  • サポート 属性 Docblock 構文を使用せずにメタデータ (型情報など) をクラスにバインドできるようにする (アノテーション)。
  • 短縮された構文 クラス定義を使用すると、コンストラクターの定義とプロパティを組み合わせることができます。
  • 新しい戻り値の型 - 静的な.
  • 新しいタイプ - 混合、関数が異なるタイプのパラメーターを受け入れるかどうかを判断するために使用できます。
  • 投げる 例外を処理するため。
  • ウィークマップ ガベージ コレクション中に犠牲になる可能性のあるオブジェクトを作成するため (たとえば、不要なキャッシュを保存するため)。
  • 機会 オブジェクトに対して式「::class」を使用します (get_class() の呼び出しに似ています)。
  • 機会 変数にバインドされていない例外の catch ブロック内の定義。
  • 機会 関数パラメータのリストの最後の要素の後にカンマを残します。
  • 新しいインターフェース ストリング可能 文字列に変換できる文字列タイプまたはデータを識別します (__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" などの算術演算およびビット演算をチェックすると、エラーが発生します。
  • 実装済み 安定した並べ替えアルゴリズム。異なる実行間でも同一の値の順序が保持されます。

出所: オープンネット.ru

コメントを追加します