phpsafe 𝕏 GitHub
公式CA 421DTkQ3TSG3n7F9SkNZj9NxvdFGbypwkctPd2uupump 公式アドレスはこちらのみです。
CWE · OWASP Top 10:2021

PHPセキュリティルール

PHP Safeスキャナーが確認する18のルール。それぞれに脆弱な例、安全な修正方法、CWE・OWASPの参照番号を掲載しています。

インジェクション 8

致命的 CWE-89

変数で組み立てたSQL(SQLインジェクション)

入力をSQLに直接連結すると、攻撃者がクエリ自体を書き換え、データベースのあらゆるデータを読み取り・変更・削除できます。プリペアドステートメントはクエリと値を別々に送るため、入力がSQLになることはありません。

詳しく →
致命的 CWE-78

シェルコマンドの実行

シェルに渡された入力に ; や | を入れると別のコマンドを追加でき、攻撃者にサーバーを乗っ取られます。値を厳密に検証し、すべての引数をエスケープしましょう。

詳しく →
致命的 CWE-95

eval() によるコード実行

eval()は受け取った文字列をPHPコードとして実行します。その一部でもリクエスト由来なら、攻撃者がサーバー上で任意のコードを実行できます。

詳しく →
致命的 CWE-95

preg_replace の /e 修飾子

/e修飾子は置換文字列をPHPコードとして実行していました。PHP 7で削除されたため、使い続けていると古いサーバーでは危険で、新しいサーバーでは動きません。

詳しく →
致命的 CWE-98

ユーザー入力によるファイル読込

リクエストの値でincludeパスを作ると、攻撃者がシステムファイルやPHP入りの画像、外部コードを読み込めます。サーバー全体を乗っ取られる最短ルートの一つです。

詳しく →
中 CWE-98

変数で作ったinclude パス

変数で作ったincludeパスは、その変数にユーザー入力が絶対に入らない場合だけ安全です。上流のコードでリクエスト値が入っていることが多いので確認しましょう。

詳しく →
致命的 CWE-502

信頼できないデータへの unserialize()

unserialize()は任意のオブジェクトを生成できるため、攻撃者は既存クラスを連結して(ガジェットチェーン)ファイル削除やコード実行を行えます。JSONは単純なデータしか作りません。

詳しく →
高 CWE-621

リクエストデータへの extract()

extract()はリクエストの全フィールドを変数にするため、攻撃者はフォームに項目を一つ足すだけで $is_admin などの変数を上書きできます。

詳しく →