# 複数ファイル / クロスファイルの脆弱性追跡

**汚染解析** プログラム内でデータがどのように移動するかを追跡することで、コード内のセキュリティリスクを見つける方法です。これは、Webリクエストやユーザーフォームのようにシステムの外部から来る「汚染された」入力から始まります。その後、解析はそのデータがどこへ行くかを追跡し、データベースクエリやシステムコマンドなど、コードの機密性の高い部分に、最初に検査や無害化をされないまま到達するかどうかを確認します。途中でそのデータが悪用される可能性がある場合、Aikidoはそれを潜在的な脆弱性としてフラグ付けします。汚染解析は、信頼できない入力がソフトウェア内をどのように移動し、適切に処理されなければ現実世界のセキュリティ問題を引き起こしうるかを開発者が把握するのに役立ちます。

Aikidoは信頼できないコードの流れを追跡し、それが危険なシンク（たとえばSQLやコマンド実行）に到達するとフラグを立てます。1つのファイル内だけでなく、ファイル間をまたぐ汚染解析にも対応しています。ある場所で受け取った入力が、別の場所でのリスクのある操作と結び付く可能性があるためです。

データフローに加えて、Aikidoは [到達可能性](https://help.aikido.dev/docs/docs-ja/getting-started/reachability-analysis/reachability-engine-to-remove-false-positives) もチェックするので、実際にはアプリで実行されない問題で通知されることはありません（たとえば、呼び出していない脆弱な関数や、テストでのみ実行されるコードなど）。これはノイズを減らすための仕組みの一部です。

### Aikidoでの汚染トレース

脆弱性が見つかると、Aikidoは関連する関数呼び出しを通じてそれを追跡します。セキュリティ課題を開いたら、選択 **コード解析を表示** すると、脆弱性の原因を詳細に確認でき、実行フローを示すコールグラフも表示されます。

<figure><img src="https://help.aikido.dev/_assets/356a51408abe/taint_analysis.gif" alt=""><figcaption></figcaption></figure>

### 複数ファイルの汚染解析が利用できる場所

Aikidoは現在、以下の言語でファイル間汚染トラッキングをサポートしています：

* JavaScript
* TypeScript
* PHP
* .NET/C#
* Java
* Rust
* Go
* Ruby
* Python

その他の言語では現在、ファイル内汚染解析をサポートしています：

* C/C++
* Swift
* Android
* Scala
* Kotlin
* Dart
* Elixir
