sensiolabs/security-checkerでComposerライブラリの脆弱性チェック

[sensiolabs/security-checker](https://github.com/sensiolabs/security-checker) を使うと、Composerでインストールしたライブラリに既知の脆弱性が含まれているかどうかをチェックしてくれます。

以下、動作確認した環境は Windows7, PHP 5.6.12 です。

## インストール＆簡単な使い方

グローバルのComposerに sensiolabs/security-checker をインストールします。

```
$ composer global require sensiolabs/security-checker
```

チェックしたいソースのComposerインストールディレクトリ（composer.lockファイルのあるディレクトリ）に移動して ``security-checker security:check`` コマンドを実行します。

```
$ cd C:\path\to\project\source
$ security-checker security:check
```

こんな風に、結果を出力してくれます。

	Security Check Report
	~~~~~~~~~~~~~~~~~~~~~

	Checked file: C:\path\to\project\source\composer.lock


	[OK]
	0 packages have known vulnerabilities


	          This checker can only detect vulnerabilities that are referenced
	Disclaimer  in the SensioLabs security advisories database. Execute this
	          command regularly to check the newly discovered vulnerabilities.

脆弱性がなかった時はこんな感じ。


コマンドの引数で直接 composer.lock のパスを指定してもOKです。

```
$ security-checker security:check C:\path\to\project\source\composer.lock
```

ソースを軽く追ってみたところ、https://security.sensiolabs.org/check_lock にcurlで接続し、composer.lockファイルを送信してJSONで返された結果を、テキストに変換して出力しているようです。

また security-checker のライブラリにはSSLのクライアント証明書も同梱されていました。（2020年5月30日まで有効）

なので、Windows環境でも心配ありません！（参考：[Windows + Goutte 3.0でHTTPSでのリクエストで発生するSSL証明書のエラー](http://qiita.com/k-holy/items/4362b8cce85642e477ec)）


## 脆弱性が含まれている場合の出力

既知の脆弱性を含んだバージョンのライブラリが検出された場合、こんな風に出力されます。

	Security Check Report
	~~~~~~~~~~~~~~~~~~~~~

	Checked file: C:\path\to\project\source\composer.lock


	  [CRITICAL]
	  1 packages have known vulnerabilities


	doctrine/cache (v1.2.0)
	-----------------------

	 * CVE-2015-5723: Security Misconfiguration Vulnerability in various Doctrine projects
	   http://www.doctrine-project.org/2015/08/31/security_misconfiguration_vulnerability_in_various_doctrine_projects.html

	             This checker can only detect vulnerabilities that are referenced
	 Disclaimer  in the SensioLabs security advisories database. Execute this
	             command regularly to check the newly discovered vulnerabilities.

分かりやすいですね！（CVE-2015-5723 の内容についてはここでは触れません）


## 出力フォーマットを指定する

オプションで出力フォーマットを指定できるようで、デフォルトは text ですが、他に json や simple が用意されています。

simple を指定した場合、先ほどの脆弱性はこんな風に出力されます。

```
$ security-checker security:check --format=simple
```

	Security Check Report: C:\path\to\project\source\composer.lock
	[CRITICAL] 1 packages have known vulnerabilities

	doctrine/cache (v1.2.0)
	-----------------------

	 * CVE-2015-5723: Security Misconfiguration Vulnerability in various Doctrine projects
	   http://www.doctrine-project.org/2015/08/31/security_misconfiguration_vulnerability_in_various_doctrine_projects.html

これでも充分かもしれません。


json を指定した場合だと、こうなります。

```
$ security-checker security:check --format=json
```

```json
{
    "doctrine\/cache": {
        "version": "v1.2.0",
        "advisories": {
            "doctrine\/cache\/2015-08-31.yaml": {
                "title": "Security Misconfiguration Vulnerability in various Doctrine projects",
                "link": "http:\/\/www.doctrine-project.org\/2015\/08\/31\/security_misconfiguration_vulnerability_in_various_doctrine_projects.html",
                "cve": "CVE-2015-5723"
            }
        }
    }
}
```

自動化やバッチ処理での用途を想定されているんでしょうか。


## 面倒な人にはオンライン版もあり

コマンドじゃなくてもいいという方は、オンライン版も用意されています。

- [Symfony Security Monitoring](https://security.symfony.com/)

元々、このオンライン版をこちらのスライド [ぼくの考えたさいきょうの開発フロー - PHP編 // Speaker Deck](https://speakerdeck.com/yutaadachi/bokufalsekao-etasaikiyoufalsekai-fa-huro-phpbian) で知ったんですが、日本語の情報を検索した限りではあまり広まってなさそうな気がしたので、改めて紹介した次第です。