ソースコードロケーション (Pro)
ソースコードロケーションは、ロケーションモデルを静的解析にまで拡張します。URL(DAST)や依存関係(SCA)と並んで、コードロケーションは、SASTの検出事項がソースコード内のどこに存在するかをファイルパスと行番号によって示します。
ソースコードロケーションを利用するには、ロケーション機能(ベータ版)が必要です。お使いのインスタンスでロケーションを有効にするには、までご連絡ください。
モデル化する対象
ファイルパスを報告するすべての静的解析の検出事項には、コードロケーションが割り当てられます。ロケーションの正規値は path/to/file.py:42 です(ツールが行番号を報告しない場合はファイルパスのみになります)。他のすべてのロケーションと同様、コードロケーションは共有オブジェクトです。同じファイル・行にある2つの検出事項は同じロケーションを参照し、そのロケーションは検出事項ごと・アセットごとの参照ステータスを保持します。
コードロケーションはスキャン管理されます。手動ではなく、インポートおよび再インポートによって作成・更新されます。「新しいソースコードロケーション」という操作は存在しません。コードの検出事項がどこに存在するかについては、スキャナーが唯一の正しい情報源です。
確認できる場所
- サイドバーのすべてのソースコードには、インスタンス内のすべてのコードロケーションが、URLや依存関係と同じフィルタリングおよびタグ付け機能とともに一覧表示されます。
- アセットのロケーションメニューにあるソースコードを表示を使うと、一覧を1つのアセットに絞り込めます。
- 検出事項のページには、現在のコードロケーションと、検出事項が移動している場合はそのロケーション履歴が表示されます。
移動履歴
ソースコードは絶えず変化します。コミットによって行番号がずれ、リファクタリングによってファイル名が変わります。あるツールでロケーションドリフトマッチングが有効になっている場合、移動した検出事項もその同一性を保持し、コードロケーションの参照がその経路を記録します。
- 検出事項の旧ロケーションへの参照は緩和済みとなり、検出事項がどこへ移動したかとなぜその対応付けが行われたか(最も近い行、データフロー、ファイル名変更など)が記録されます。
- 新しいロケーションへの参照が作成され、アクティブなまま維持されます。
その結果、閲覧可能な履歴の連鎖ができあがります。「この検出事項は auth.py:42 にあり、次に auth.py:57、そして session.py:31 に移った」といった具合に、検出事項のページ上でタイムラインとして表示されます。同じ履歴の仕組みはURLの移動や依存関係のバージョンアップにも及ぶため、3種類すべてのロケーションが1つのタイムラインUIを共有します。
履歴は、インスタンスでロケーションが有効化された時点から記録されます。それ以前に移動した検出事項は現在のロケーションを保持しますが、過去の移動は適用されただけで記録はされていません。この機能が導入される前の履歴が何年分もあるインスタンスでは、チャーン統合コマンドを使うことで、過去のクローズ・再作成の連鎖を統合しながら経路を再構築できます。
ステータスの正確性
コードロケーション参照のステータスは、ドリフトマッチングの有効・無効にかかわらず、すべてのマッチングアルゴリズムにおいて再インポート時に正しく保たれます。
- マッチした検出事項の現在のコード参照は、再インポートのたびに同期されるため、移動した検出事項の旧参照が永久にアクティブなまま残ることはありません。
- 同じくトグルに依存しない同期は、依存関係の参照にも適用されます。SCAの検出事項のパッケージバージョンが上がった場合、旧バージョンの参照は新しいバージョンと並んでアクティブなまま残るのではなく、緩和済みになります。
検出事項フィールドとの関係
検出事項自体が持つ file_path / line フィールドは、引き続き正となるスカラー値です(フィルタ、ハッシュ、APIが公開するのはこれらです)。コードロケーションは、その同じ座標を共有し参照カウントする形で表現したものです。再インポートは最新のスキャンからスカラー値を更新し、ロケーションの仕組みはそこからロケーションを導出するため、両者がずれることはありません。