SonarQubeを試してみる
こちらの続きです。
セキュリティの診断ができる静的解析ツールを探していましたが、前回絞り込みを行った結果以下、3つのツールが残りました。
2018-12-09 現在、それぞれ、以下のような状況でした。
Parse: A PHP Security Scanner
https://github.com/psecio/parse
- Star: 229
- 最終更新: 2018-08-02
- contributors: 7
- その他
PLEASE NOTE: This tool is still in a very early stage. The work continues...
とのこと・・・- このあたりのチェックができるらしい https://github.com/psecio/parse#the-checks
Pixy
https://github.com/oliverklee/pixy
- Star: 85
- 最終更新: 2018-01-24
- contributors: 1
- その他
- JUnit が必要らしい
SonarQube
https://github.com/SonarSource/sonarqube
- Star: 3164
- 最終更新: 2018-12-04
- contributors: 75
- その他
- phpの他に20種類以上の言語に対応しているらしい
- 管理サーバを立てる必要があるらしい
SonarQube を試す
パッと見で、3つの内だと SonarQube が良さそうなので試してみる。
以下の方法で試せる
1. webサービスから
https://sonarcloud.io/about/sq
2. HomeBrew から
brew install sonarqube
でいけるらしい。
参考: https://qiita.com/thankkingdom/items/8abb0b329dc575f5b281
3. docker から
Docker Hub に公式のリポジトリがあるので、それを使う
https://hub.docker.com/_/sonarqube/
4. サーバをちゃんと構築
サーバにちゃんと構築するなら、この方法でやる。 https://docs.sonarqube.org/latest/setup/overview/
参考: https://dev.classmethod.jp/ci/sonarqube-source-analytics-1/
dockerで立ち上げる
一番手軽そうな docker を選びました。
今回は docker-compose
を使いました。
docker-compose.yml
に
version: '3' services: sonarqube: image: sonarqube:lts ports: - 9000:9000
これだけ書いて、
docker-compose up
で、ピッとサービスが上がるはずです。
その他、設定などはこちらに書いてあります。 https://hub.docker.com/_/sonarqube/
初期設定
- ログイン
http://localhost:9000/ へアクセス
id, password は、DockerHubのページに書いてあります。
tokenの生成 と 診断したいプロジェクトの言語を選択するウィザードがでるのでよしなに入力します。
次の画面のリンク先から SonarQube Scanner
というソースコードの解析を行い、サーバに結果を通知するツールをダウンロードします。そして、パスの通ったディレクトリから呼び出せるように設定します。
次に、Execute the SonarQube Scanner from your computer
の欄にあるコマンドを、静的解析したいコードのあるディレクトリで実行します。(なければ、ウィザード画面上部にある Skip Tutorial
を押します。)
Administration
-> Marketplace
から、phpの解析プラグイン(SonarPHP
)を更新します。
Update to XXX
の部分が Update Pending
になったら、画面上部に出てくる Restart
ボタンを押し再起動します。
静的解析してみる
手元に静的解析したい良い感じのPHPのコードが無かったので、GETのパラメータの値を直接 shell_exec
コマンドに入れてみたり、SQL文に入れてみたり(PreparedStatementなし)ないかにもヤバそうなコードを書いてテストしてみました。
先程チュートリアルで実行したものと同じコマンドを実行しました。
結果
1件
Define a constant instead of duplicating this literal "hoge_id" 3 times.
コードの内部で $_GET['hoge_id']
を3回つかっていたのですが、そこだけ怒られました。
もう少し怒ってくれることを期待していたのですが。
rulesを確認する
セキュリティに関する rules は以下、合わせて28でした。
https://rules.sonarsource.com/php/type/Vulnerability https://rules.sonarsource.com/php/type/Security%20Hotspot
これは一般的にみて、多いのか少ないのか比較していないのでわかりませんが、とりあえず今日はここまで