# NETプロジェクト：セキュリティスキャンのベストプラクティス

Aikidoは、.NETの依存関係に含まれる既知の脆弱性（CVE）に加え、それらの依存関係で使用されているマルウェアや危険なライセンスを検出できます。

Aikidoはどのようにしてそれらの依存関係と、その推移的なサブ依存関係を見つけるのでしょうか？

Aikidoは、標準で以下のファイルのスキャンに対応しています：

* \*.csproj
* \*.deps.json
* packages.lock.json
* packages.config
* packages.props
* paket.lock

なお、.csprojファイルにはサブ依存関係の正確なバージョンが含まれていないことがよくあります。そのため、Aikidoがサブ依存関係において誤検知のCVEを検出する場合があります。

## ロックファイルを使い始めるべき理由 <a href="#why-you-should-start-using-lockfiles" id="why-you-should-start-using-lockfiles"></a>

各NuGet依存関係およびそのサブ依存関係のバージョンとハッシュを含むロックファイルを使用することをお勧めします。

Aikidoによるセキュリティスキャンを容易にする以外にも、ロックファイルを使用する理由があります：

* ロックファイルを使用すると、悪意のあるパッケージを介したサプライチェーン攻撃から保護されます。この種の攻撃はますます増えています
* ロックファイルを使用すると、全員がまったく同じマイナーバージョンのパッケージを使用するため、ビルドの予測可能性が高まります。「自分のマシンでは動く」という問題が起こりにくくなります
* ビルド時間の短縮：依存関係の解決が不要になります

### .NETプロジェクトでロックファイルを使い始めるには？ <a href="#how-to-start-using-lockfiles-in-your-net-project" id="how-to-start-using-lockfiles-in-your-net-project"></a>

ロックファイルを作成するには、`.csproj`ファイルに以下の行を追加する必要があります：

```
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <!-- Generate the lock file -->
    <RestorePackagesWithLockFile>true</RestorePackagesWithLockFile>

    <!-- Restore the exact packages as listed in the lock file -->
    <RestoreLockedMode Condition="'$(ContinuousIntegrationBuild)' == 'true'">true</RestoreLockedMode>
  </PropertyGroup>

  <ItemGroup>
    ...
  </ItemGroup>
</Project>
```

これらの行を追加したら、次を実行します

```
dotnet.exe restore
```

これにより、リポジトリにコミットできるロックファイル（packages.lock.json）が生成されます。NodeJSの世界でNPMのpackage-lock.jsonファイルを扱う場合と同様に、このファイルを手動で編集してはいけません。

既存のロックファイルを使用してリストアするには、次を実行します

```
dotnet.exe restore --locked-mode
```
