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証明書のエラー)
脆弱性が含まれている場合の出力
既知の脆弱性を含んだバージョンのライブラリが検出された場合、こんな風に出力されます。
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
{
"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"
}
}
}
}
自動化やバッチ処理での用途を想定されているんでしょうか。
面倒な人にはオンライン版もあり
コマンドじゃなくてもいいという方は、オンライン版も用意されています。
元々、このオンライン版をこちらのスライド ぼくの考えたさいきょうの開発フロー - PHP編 // Speaker Deck で知ったんですが、日本語の情報を検索した限りではあまり広まってなさそうな気がしたので、改めて紹介した次第です。