PHPの静的解析ツールです。
PHPのコードを擬似的に実行して脆弱性を検出します。
以下の特徴があります。
- オブジェクト指向のPHPに対応
- リフレクションに対応
- エスケープ処理の有無を考慮して脆弱性を判別
以下の脆弱性を検査することができます。
- Remote Code Execution
- Local File Inclusion
- SQL Injection
- Path Manipulation
- Server Side Request Forgery
- Cross Site Scripting
- Object Injection
- PHP File Manipulation
- XML External Entity
検査結果はHTML形式のレポートとして出力されます。
検査レポートには、ユーザ入力値が初めて代入された地点から危険な関数で使用される地点までの呼び出しの経路が記載されます。
以下の環境で動作確認しました。
- OS: Ubuntu 18.04
- ミドルウェア: jdk1.8.0_242
gradlew build
を実行すると、phpscan-1.0-SNAPSHOTディレクトリが作成されます。
CMSのプラグインを検査する場合を一例として説明します。
- setting.propertiesをテキストエディタで開きます。
- ENTRY_POINT_PATHにプラグインのディレクトリのパスを記入します。
- PROJECT_PATHにCMS本体のディレクトリのパスを記入します。
- PHP_INI_PATHにphp.iniファイルのパスを記入します。
phpscan-1.0-SNAPSHOT/bin/phpscan
を実行すると、プラグインのディレクトリ内のPHPファイル群に対して検査を実行します。- 脆弱性があれば、resultディレクトリ内に検査レポートが作成されます。
動作設定はsetting.propertiesで行います。
検査対象のPHPファイル群が配置されたディレクトリのパスを指定します。
ENTRY_POINT_PATHとENTRY_POINT_PARENT_PATHは、いずれかを必ず入力する必要があります。
ENTRY_POINT_PATHが複数存在する場合に使用します。
ENTRY_POINT_PATH群を1つのディレクトリ内に配置し、この項目にそのディレクトリのパスを指定することで、ENTRY_POINT_PATH群を検査することができます。
例えば、同時に複数のプラグインを検査したい場合に、プラグインのディレクトリ群を配置したディレクトリのパスを指定します。
ENTRY_POINT_PATHとENTRY_POINT_PARENT_PATHは、いずれかを必ず入力する必要があります。
検査対象のPHPファイルを実行するために必要なPHPファイル群が配置されているディレクトリのパスを指定します。
このディレクトリ内にあるPHPファイル群は検査対象になりません。
例えば、CMSのプラグインを検査する場合は、この項目にCMS本体のディレクトリのパスを指定します。
未指定の場合、ENTRY_POINT_PATHとENTRY_POINT_PARENT_PATHのいずれかの値が使用されます。
php.iniファイルのパスを指定します。
入力必須の項目です。
検査から除外するPHPファイルのパスを記載したテキストファイルのパスを指定します。
検査から除外するパスを正規表現で指定します。
コンマ区切りで複数指定することができます。
アプリケーションが独自にSQL文の文字列をエスケープする関数を実装している場合に、その関数名を指定します。
コンマ区切りで複数指定することができます。
アプリケーションが独自にHTMLの文字列をエスケープする関数を実装している場合に、その関数名を指定します。
コンマ区切りで複数指定することができます。
検査から除外する脆弱性のカテゴリを指定します。
指定したカテゴリは検査レポートに表示されません。
指定できる値は以下の通りです。
- Remote Code Execution
- Local File Inclusion
- SQL Injection
- Path Manipulation
- Server Side Request Forgery
- Cross Site Scripting
- Object Injection
- PHP File Manipulation
コンマ区切りで複数指定することができます。
PHPファイルとして認識する拡張子を記載します。
コンマ区切りで複数指定することができます。
未指定の場合、phpとincの2つの拡張子がPHPファイルとして認識されます。
アプリケーションの使用しているフレームワーク、CMSを指定します。
指定することで検査の網羅性を上げることができます。
指定できる値は以下の通りです。
- WordPress
コンマ区切りで複数指定することができます。
以下のサイトに掲載されている脆弱性のうち、PHP関連のものはすべてPHPSCANで発見しています。
PHP7の機能には未対応です。
This software is released under the MIT License, see LICENSE.txt.