Scroll down
drag view

Webサイト・アプリ・
プラットフォームの
脆弱性診断(セキュリティ診断)

PHP脆弱性診断は自社でできる?外部委託の判断基準と対策を専門家が解説

PHP脆弱性診断は自社でできる?外部委託の判断基準と対策を専門家が解説 | 脆弱性診断とは

「PHPのバージョンを最新にしておけばセキュリティは問題ない?」

「自動スキャンで問題なしが出たから、外部診断は不要?」

PHPを使ったサービスを持つ担当者から、よく聞く疑問です。

ただ、バージョン管理や自動スキャンだけでは把握しきれない脆弱性があります。

XSS・SQLインジェクション・CSRFの多くは、コードの書き方やログインやアクセス制御の仕組みをどう作るかに原因があり、人が実際に操作して初めて見つかります。

この記事では、PHPに特有の脆弱性と対策から、自社対応と外部委託の判断基準、診断サービスの選び方まで、セキュリティ診断の現場で100件以上の案件に携わってきたIFTの知見をもとに解説しています。

この記事でわかること
  • PHPの主な脆弱性の仕組みと対策
  • 自動・手動・ハイブリッド診断の違い
  • 自社対応できる範囲と、外部に任せるべき領域の見分け方
  • バージョン管理とセキュアコーディングの実践ポイント
  • 診断サービスを選ぶ3つのポイント
この記事を書いた人
アバター画像
みらいと

セキュリティサービス事業部 コンサルタント/プログラマーからシステム運用を経て情報セキュリティ全般の業務に従事。現在は培った情報セキュリティの経験を活かしお客様の課題に向き合った企画やマーケティングを担当。

目次

PHP脆弱性診断とは?バージョン管理だけでは防げない脆弱性がある

PHPで構築されたWebアプリの脆弱性を見つけ、評価する作業

PHP脆弱性診断は、PHPで構築されたWebアプリケーション(会員サイト、ECサイト、管理画面、CMS等)を対象に、セキュリティ上の脆弱性を発見し、評価する作業です。

診断の目的は、情報漏洩、改ざん、不正アクセス等のセキュリティインシデントを未然に防ぐこと。

ただし、脆弱性診断は「一度やれば終わり」ではありません。

PHPの新しいバージョンがリリースされたり、新たな脆弱性が発見されたりするため、継続的に行う必要があります。

なぜPHPが診断対象として重要なのか。

W3Techsの調査では、サーバーサイド言語が判明しているWebサイトのうち、PHPが72.0%で使われています(2026年2月15日時点)。

PHPバージョンの分布はVersion 8が56.5%、Version 7が34.4%、Version 5が9.0%となっており、古いバージョンが一定数残っているため、定期的な診断と棚卸しが必要です。

放置した場合の被害:中小企業で平均73万円、復旧まで最長360日

サイバーインシデントの被害額は、中小企業で平均73万円。

これはIPAの「2024年度中小企業等実態調査結果」速報版が示した数字です。

100万円以上の被害が9.4%、最大1億円。

復旧まで平均5.8日、最長360日という数字もあります。

「うちには関係ない」と感じるかもしれませんが、IPA「情報セキュリティ10大脅威 2026(組織)」では「システムの脆弱性を悪用した攻撃」が4位にランクインしています。

毎年上位に入り続けているということは、対策できていない企業がまだ多い、という現実の裏返しでもあります。

個人情報・決済機能・EOL環境を持つサービスは優先度が高い

以下に該当する場合は、診断の優先度が高いと考えてください。

  • 個人情報や機密情報を扱うシステム(ECサイト、会員制サイト等)
  • カード情報を扱うECサイトや決済機能を持つシステム
  • 外部に公開されているWebアプリケーション
  • サポートが終了したPHPバージョン(EOL)の環境
  • WordPress、Laravel、Symfony等のフレームワーク/CMSを使用している環境
  • システムの大規模な改修やリリース前
  • 取引先や監査からの要求がある場合

「自社は該当するか」を一つひとつ確認してみてください。

PHPで多いXSS・SQLインジェクション・CSRFの仕組みと対策

「エスケープ処理」「プリペアドステートメント」「CSRFトークン」。

これらのキーワードが自社の対策として挙がっているかどうか、確認しながら読んでみてください。

XSS:フォームに悪意あるプログラムを仕込まれ、閲覧者の情報が盗まれる

WordPressでXSSが多い理由は、プラグインにあります。

公式ディレクトリに登録されているプラグインでも、定期的に脆弱性が報告されています。

コアは安全でも、プラグイン経由で攻撃の足がかりになるケースは実際によくあります。

クロスサイトスクリプティング(XSS)は、Webページに悪意のあるプログラムを埋め込み、閲覧者のブラウザ上で勝手に実行させる攻撃です。

たとえばお問い合わせフォームに悪意あるプログラムを仕込まれると、そのページを開いた訪問者のログイン情報が自動的に攻撃者へ送信されてしまいます。

その情報を使って管理者アカウントが乗っ取られ、顧客データの流出やサイト改ざんにつながることも実際にあります。

ログイン状態を保持するCookie情報が盗まれたり、偽のログインフォームが表示されて認証情報が抜き取られたりすることも起こりえます。

対策方法

いちばん重要な対策は、エスケープ処理です。

エスケープ処理とは、プログラムとして解釈されうる文字を無害な文字に置き換える処理で、出力する全ての要素に施すことで攻撃を防ぎます。

PHPでの対策例

echo htmlspecialchars($value, ENT_QUOTES | ENT_SUBSTITUTE, ‘UTF-8’);

WordPressでの対策例

echo esc_html($value);

SQLインジェクション:データベースの顧客情報を丸ごと抜き取られる攻撃

PHPとMySQLの組み合わせは、今も攻撃者に好まれます。

構成がシンプルで普及率が高いため、既知の攻撃パターンが豊富に存在します。

特にWordPressのカスタムクエリは実装の甘さが出やすく、診断で指摘を受けることが多い箇所です。

SQLインジェクションは、データベースを不正に操作する攻撃です。

データベースとは、顧客情報や商品情報を保管する「倉庫」のようなもの。

そこへのアクセスに使う言語がSQL(エスキューエル)です。

攻撃者はこのSQL命令の中に「ついでに全部のデータを見せて」という命令をこっそり忍び込ませます。

検索フォームなどから不正な文字列を入力するだけで実行できてしまうため、被害が広がりやすい攻撃です。

実際に起こりうる被害は、データベース内の全顧客情報の流出、データの削除・改ざんなどです。

対策方法

効果的な対策は、プリペアドステートメントの使用です。

SQL命令とユーザーが入力したデータを別々に処理する仕組みで、命令の中に不正な文字列を混入させても無効化できます。

PHP(PDO)での対策例

$stmt = $pdo->prepare(‘SELECT * FROM users WHERE email = :email’);

$stmt->execute([‘:email’ => $email]);

WordPress特有の対策例

global $wpdb;

$sql = $wpdb->prepare(“SELECT * FROM {$wpdb->users} WHERE user_email = %s”, $email);

CSRF:ログイン中のサービスで意図しない操作を強制させられる攻撃

「CSRFトークンは実装済みです」という現場は少なくありません。

しかし、実装していても検証が不完全なケースが目立ちます。

フォームにトークンを埋め込んでいても、受信側でそれを正しく照合していなければ意味をなしません。

CSRFは、ユーザーの意図しない操作を、ログイン中のサービスに対して勝手に実行させる攻撃です。

ネットバンキングにログインしたまま別のサイトを開いたとき、そのサイトから「100万円を振り込む」という命令があなたの銀行へ送られてしまうイメージです。

パスワード変更や個人情報の書き換え、商品の購入といった操作も、同じ仕組みで勝手に実行されてしまいます。

対策方法

対策の基本は、CSRFトークンの実装と、受信側できちんと照合することです。

フォームに使い捨ての合言葉(トークン)を埋め込み、サーバー側で照合することで、外部からの不正なリクエストをブロックします。

WordPress特有の対策例

// フォームにnonceを埋め込む

wp_nonce_field(‘my_action’, ‘my_nonce’);

// 受信側で検証する

if (!wp_verify_nonce($_POST[‘my_nonce’], ‘my_action’)) {

wp_die(‘Invalid request’);

}

WordPressのセキュリティ対策をより詳しく知りたい方は、こちらもあわせてご覧ください。

あわせて読みたい
PHP脆弱性診断は自社でできる?外部委託の判断基準と対策を専門家が解説 | 脆弱性診断とは
WordPressの脆弱性を診断する3つの方法と専門家が教える対策

インターネットの普及に伴い、多くの企業や個人がウェブサイトを運営しています。 中でもWordPressは、世界中で広く利用されているコンテンツ管理システム(CMS)です。 しかし、その人気が裏目に出て、WordPressサイトは常にサイバー攻撃の標的となりやすいという問題があります。 しかし、

PHP脆弱性診断の3つの方法と選び方

PHP脆弱性診断の方法は大きく3つに分けられます。

  • 自動診断ツールによる診断
  • 手動診断(ペネトレーションテスト)
  • ハイブリッド診断(自動+手動)
診断方法 検出精度 コスト 時間 主な特徴
自動診断ツール 広範囲を効率的にスキャン
手動診断 複雑な脆弱性も検出可能
ハイブリッド診断 自動と手動の長所を組み合わせ

自動診断ツール:広範囲をスキャンできるが、設計の問題は見逃す

自動診断ツールは、既知の脆弱性パターンをデータベース化し、自動的にスキャンするツールです。

人の手をかけずに広い範囲を確認できるので、定期スキャンや初期調査に向いています。

ただし、業務フローや権限設計に起因する問題は検出できません。

自動ツールの結果だけで「安全」と結論づけるのは避けましょう。

手動診断(ペネトレーションテスト):専門家が攻撃者の視点で「設計の穴」を探す

手動診断は、セキュリティ専門家が実際の攻撃者と同じ視点で脆弱性を探す手法です。

自動ツールでは気づけない「設計の穴」を、人間の発想と経験で発見できます。

精度が高い分、時間とコストはかかるため、個人情報や決済データを扱うシステムに向いています。

ハイブリッド診断:自動と手動を組み合わせて、コストを抑えつつ精度を上げる

ハイブリッド診断は、自動診断ツールと手動診断を組み合わせた診断手法です。

自動ツールの結果を専門家が精査することで、誤検知の判断や、単純なスキャンでは見落とされがちな認証・認可の不備なども発見できます。

費用対効果という点で、多くの企業にとってもっとも現実的な方法だと考えています。

\\はじめての診断にオススメ//

脆弱性診断とペネトレーションテストの違い、手法の選び方については以下の記事で詳しく解説しています。

あわせて読みたい
PHP脆弱性診断は自社でできる?外部委託の判断基準と対策を専門家が解説 | 脆弱性診断とは
脆弱性診断とペネトレーションテストの違いとは?目的・手法・選び方を徹底解説

「脆弱性診断とペネトレーションテストって、一体何が違うの?」 システムのセキュリティ対策を考えるとき、こんな声をよく聞きます。 どちらもセキュリティを高めるための重要な手段ですが、その目的や実施する内容は大きく異なります。 この記事では、特に、「脆弱性診断」と「ペネトレーションテスト」の特長や

自社でできることと、専門家に任せるべき領域の見分け方

専門知識なしでも始められること

とはいえ、最初から専門家に頼まなくていいこともあります。

  • PHPのバージョン管理
  • セキュアコーディングの習慣化
  • 無料ツールでの簡易スキャン。

    この3つは、専門的な知識がなくても取り組めます。

    PHPバージョンの管理とアップグレード

    サポートが終了したバージョン(EOL)は、新たな脆弱性へのパッチが提供されないため、攻撃者に狙われやすい状態が続きます。

    PHP.netも「EOLを迎えたバージョンは未修正の脆弱性にさらされる恐れがある」と明記しており、早めのアップグレードが推奨されています。

    XSS・SQLi・CSRFを防ぐ3つのコーディング習慣

    以下の3点を開発時から習慣にすることで、XSSやSQLインジェクション、CSRFといった主要な脆弱性の混入を大幅に減らせます。

    • エスケープ処理: 入力値をHTMLやSQLにそのまま使わない
    • プリペアドステートメント: SQL文とデータを分離してSQLインジェクションを防ぐ
    • CSRFトークン: フォームに使い捨てのトークンを埋め込んで不正リクエストをブロックする

    OWASP ZAPなどの無料ツールで現状把握から始める

    OWASP ZAPやWPScanなど無料ツールを使った簡易スキャンは、現状把握の最初の一手として使えます。

    ただし、業務ロジックや認証・権限管理の不備は検出できないため、「無料ツールで問題なし=安全」とは言い切れません。

    \\まずはツールで診断してみる//

    専門家に依頼すべきこと

    業務ロジックの不備、認証・権限設計の穴、複数機能をまたいだ脆弱性。

    これらはパターンマッチングで動く自動ツールでは、原理的に見つけられません。

    複雑な脆弱性の検出

    「本来見られないはずの他ユーザーの情報にアクセスできる」 「決済フローを不正な順序で操作すると通ってしまう」 といった問題は、専門家が実際に操作して初めて見つかります。

    • 認証・認可の不備(権限外操作等)
    • 決済フローの不正順序実行
    • API連携における脆弱性

    業務の流れや設計を把握していない自動ツールには、こうした問題を検出する手段がありません。

    診断後の修正支援と再診断

    脆弱性が見つかった後の対応も、専門家が必要な領域です。

    「どの箇所をどのコードに修正すればいいか」を自社だけで判断するのは難しく、方向を誤ると別の問題を生むこともあります。

    修正できたつもりでも本当に直っているかを確認するには、第三者による再診断が必要です。

    外部委託を推奨する状況

    「自社でできることはやっているけど、本当に安全かどうか確信が持てない」。

    その感覚自体が、外部委託を検討するサインです。

    以下に1つでも当てはまれば、専門家への相談をおすすめします。

    • 個人情報・決済・会員データを扱っている
    • ログイン機能が多い、または権限管理が複雑
    • PHPや主要コンポーネントがEOL、または更新が止まっている
    • 過去にインシデントを経験している
    • 社内にセキュリティ専門家がいない、またはリソースが不足している

    上記に該当する場合は、IFTにご相談ください。

    PHP脆弱性診断サービスを選ぶポイント

    信頼できるサービスかどうかは、次の3点で見分けられます。

    • ハイブリッド診断(自動+手動)を選ぶ
    • 高リスク検出時に迅速な対応がされるか
    • 再診断とアフターサポート体制はあるか

    1. ハイブリッド診断(自動+手動)を選ぶ

    自動診断だけで終わらせる診断会社もあります。

    業務ロジックの穴や認証の不備は人が操作して初めて見えるもので、自動ツールだけでは補えません。

    IFTでは、国内シェアNo.1の自動診断ツール「Vex」(OWASP Top 10準拠)と、15年以上の経験を持つセキュリティエンジニアによる手動診断を組み合わせています。

    Laravel、Symfony、CakePHP、WordPressなどのPHPソースコード診断にも対応しています。

    2. 高リスク検出時に迅速な対応がされるか

    高リスクの脆弱性が見つかったとき、報告書を待っている余裕はありません。

    即日対応できる体制があるかどうかで、被害の広がりが変わります。

    診断中に高リスクな問題が見つかった場合、診断完了を待たずに速報してくれるかどうかを確認してください。

    IFTでは、診断期間中に高リスク脆弱性を検出した場合、速報という形で即座にご報告します。

    3. 再診断とアフターサポート体制はあるか

    修正したつもりが、別の箇所に問題を生んでいた。

    そういう事例があるからこそ、再診断は保険ではなく確認のために必要です。

    修正方法のアドバイスや診断レポートの読み方まで相談できる体制があるかどうかも、選定の判断材料になります。

    IFTは、3カ月以内1回無償再診断、専任エンジニアによるサポートを提供しています。

    診断実績1,000件以上・15年以上の経験があり、大手企業・官公庁などへの採用実績、ISMS認証取得・プライバシーマーク取得などの第三者認証も保有しています。

    まとめ:PHP脆弱性診断で安全なシステムを構築しよう

    この記事のポイント
    • PHPの主な脆弱性:XSS・SQLインジェクション・CSRF
    • 自動診断だけでは複雑な問題は見逃す
    • バージョン管理・セキュアコーディングは自社対応できる
    • サービス選定はハイブリッド診断・速報対応・再診断の3点で判断

    結局のところ、PHPセキュリティ対策の肝は「自社でやれる範囲の見極め」だと考えています。

    すべてを外部に任せる必要はありません。

    ただし、業務ロジックの穴や認証設計の不備は、専門家でなければ見つけられません。

    IFTが再診断を無料で提供しているのは、修正後の確認まで完結しなければ診断の意味がないと考えているからです。

    まず今日できることから始めるなら、PHPのバージョン確認です。

    PHP.netのサポートページ(Supported Versions)を開けば、すぐに確認できます。

    問題があれば、ぜひご相談ください。

    この記事をシェアする

    関連記事

    まずは無料相談