生成AIに書かせたPHPは安全? 公式情報でたどる脆弱性対策と、本番に入れる前のレビュー手順


SETODEZA合同会社 代表 / せとうちAI 編集長
BBT大学卒業。システム開発・スタートアップ支援・マーケティングを経て生成AI事業を開始。SETODEZA合同会社代表として岡山・香川の中小企業へのAI導入を支援するほか、岡山市ももスタ「NoCodeBootCamp」を運営。せとうちAIの企画・編集を担当。
「ChatGPT や Claude Code に PHP で簡単な社内ツールを作ってもらった。動いてはいるが、このまま使って大丈夫だろうか」。生成AI でコードを書く人が増え、こうした不安を持つ中小企業の方からの相談も聞くようになりました。
- この記事の対象
生成AI(ChatGPT・Claude Code など)に PHP の Web システムやツールを書かせている、またはこれから任せたい中小企業の経営者・担当者
- 結論
- 生成AI はセキュリティ要件を指定しないと脆弱なコードを出しやすい。複数言語をまとめた2025年の調査では検証したテストの45%で欠陥が見つかっており、人によるレビューは欠かせない
- SQLインジェクション・XSS・CSRF などの定番の脆弱性は、PHP 公式マニュアルと OWASP が推奨する対策(プリペアドステートメント・出力エスケープ・トークン)で多くを防げる。プロンプトで要件を指定し、生成物でも確かめる
- 秘密情報は AI に渡さない・コードに書かない。AI が提案する依存パッケージは、存在と安全性を自分で確かめる
- PHP 8.2 は2026年12月31日にサポート終了(2026年10月29日時点)。使っているバージョンを確かめ、サポート中のものに保つ
「ChatGPT や Claude Code に PHP で簡単な社内ツールを作ってもらった。動いてはいるが、このまま使って大丈夫だろうか」。生成AI でコードを書く人が増え、こうした不安を持つ中小企業の方からの相談も聞くようになりました。
この記事は、生成AI に PHP の Web システムやツールを書かせている、またはこれから任せたい経営者・担当者に向けて、AI が書いた PHP コードのどこを確認すればよいかを、PHP 公式マニュアル・OWASP・IPA といった一次情報に沿って整理します。専門用語はできるだけかみ砕いて説明します。プログラムを自分で書かない方でも、「何を確認すべきか」「どこからは人に頼むべきか」の判断に使えるようにしました。
なお、この記事は一般的な注意点の整理です。顧客の個人情報や決済を扱うなど、問題が起きたときの影響が大きいシステムは、公開前に専門家の確認を受けることをおすすめします。
「生成AIで書いたコードのセキュリティ」とは
生成AI で書いたコードのセキュリティとは、ChatGPT・Claude Code などの生成AI が出力したプログラムに、攻撃に悪用される弱点(脆弱性)が残っていないかを確かめ、対策することです。
ここで混同しやすいのが、「AI に入力した情報が漏れないか」という話との違いです。入力情報の扱い(学習への利用、情報漏えい)は別のテーマで、当サイトの生成AIで入力した情報を学習に使わせない設定や社内の生成AI利用ルールの作り方で扱っています。この記事が扱うのは、AI が「作ったもの(コード)」の中身の安全性です。
AIに任せきりが危ない理由
生成AI は、指示(プロンプト)にセキュリティの要件を書かないと、動くけれど穴のあるコードを出すことがあります。公開されている調査には、次のような結果があります(いずれも公開時点で確認できた範囲のものです)。
- セキュリティ企業 Veracode の調査(2025年)では、生成AI にコードを書かせたテストの45%でセキュリティ上の欠陥が見つかりました。100以上の大規模言語モデル(LLM)を対象に80のタスクを検証したもので、新しく大きなモデルほど安全なコードを書くわけではない、と結論づけています。この調査の対象言語は Java・JavaScript・Python・C# で、PHP は含まれていません(報告書本体は登録制で、ここでは公式ページの概要に基づきます)。
- Cloud Security Alliance(CSA)の調査ノート(2026年3月)では、AI の支援を受けたコード変更が API キーやパスワードなどの秘密情報を含む割合は3.2%で、人だけで書いた場合(1.5%)の2倍以上とされています。
- 学術論文(arXiv、2025年)には、AI に繰り返し修正させると、5回の反復の後にクリティカルな脆弱性が37.6%増えたという報告もあります(400のコードサンプルで検証)。AI に「直して」と繰り返せば安全になる、とは限らないという結果です。
これらは PHP だけを対象にした数字ではなく、調査によって対象言語や母数も異なります。そのまま「PHP の◯%が危険」とは読めませんが、生成AI のコードをそのまま本番で使うのはリスクがあるという方向は、複数の調査で共通しています。だからこそ、公開前に人が確認する工程が欠かせません。
PHPでよくある脆弱性と、公式の対策
AI が書いたかどうかにかかわらず、PHP の Web アプリには定番の弱点があります。逆に言えば、定番の対策を押さえているかを確認すれば、多くは防げます。主なものを、PHP 公式マニュアル・OWASP(Web セキュリティの国際的なコミュニティ)・IPA(独立行政法人 情報処理推進機構)の推奨に沿って整理します。

| 弱点(脆弱性) | どんな問題か | 公式が推奨する対策 |
|---|---|---|
| SQLインジェクション | 入力欄に細工した文字を入れられ、データベースを不正に操作される | プリペアドステートメント(PDO / MySQLi)で値を埋め込む。文字列を直接つなげて SQL を組み立てない |
| XSS(クロスサイト・スクリプティング) | 画面に出す文字を悪用され、他人のブラウザで不正なスクリプトが動く | 画面に出すユーザー入力は出力時にエスケープする(htmlspecialchars() を ENT_QUOTES 付きで、など)。出力先(HTML・JavaScript・URL)ごとに方法を使い分ける |
| CSRF(クロスサイト・リクエスト・フォージェリ) | 利用者になりすまして、意図しない操作(送信・削除など)をさせられる | フォームごとに予測できないトークンを発行して照合する(Synchronizer Token Pattern)。トークンを Cookie だけで送らない |
| ファイルアップロードの悪用 | 危険なファイルをアップロードされ、サーバー上で実行される | 拡張子は許可リスト方式(通してよいものだけを列挙)。保存名はランダムにし、Web から直接見えない場所に置く。Content-Type は信用しない |
| パストラバーサル | ファイル名のパラメータを細工され、見せてはいけないファイルを読まれる | ファイル名のパラメータを検証し、想定した場所の外を参照できないようにする |
| 安全でないデシリアライズ | unserialize() に外部の値を渡し、不正なオブジェクトを作られる | ユーザーが操作できる値を unserialize() に渡さない。データのやり取りには JSON(json_decode() / json_encode())を使う |
| 秘密情報のハードコード | パスワードや API キーをコードに直書きし、流出時に漏れる | 秘密情報はコードに書かず、環境変数などから実行時に読み込む。.env ファイルはバージョン管理に含めない |
このほか、次の2点も生成AI のコードで見落とされがちです。
- パスワードの保存: PHP 公式マニュアルは、パスワードの保存に
password_hash()を使うよう推奨しています。PASSWORD_DEFAULT(PHP 8.4 時点では bcrypt)またはPASSWORD_ARGON2IDを使い、MD5 や SHA-1 をパスワードのハッシュに使わないこと、照合にはpassword_verify()を使うことが示されています。 - エラーの表示設定: 本番環境では
display_errorsをOffにするよう、PHP 公式マニュアルが明記しています。エラー画面にデータベースのパスワードやファイル構成など機微な情報が出てしまうためです。本番ではエラーは画面に出さず、サーバーのログ(log_errors)に記録します。
これらはいずれも、PHP マニュアル・OWASP チートシート・IPA「安全なウェブサイトの作り方」(改訂第7版、2021年)に基づく、2026年10月時点の推奨です。仕様は変わることがあるため、公開前に各公式情報で最新の内容を確認してください。
使っているPHPのバージョンを確かめる
コードの書き方とは別に、PHP 本体のバージョンも確認してください。サポートが終わった(EOL=End of Life)バージョンには、新しい脆弱性が見つかってもセキュリティ修正が提供されません。
php.net が公表しているサポート状況は、2026年10月29日時点で次のとおりです。
| バージョン | セキュリティ修正の終了 |
|---|---|
| 8.2 | 2026年12月31日(この記事の時点で約2か月後) |
| 8.3 | 2027年12月31日 |
| 8.4 | 2028年12月31日 |
| 8.5 | 2029年12月31日 |
- PHP のサポートは「アクティブサポート2年+セキュリティ修正のみ2年」の計4年です。
- 8.1 以下はすべてサポート終了です。
- 8.2 は2026年12月31日に終了予定で、まもなくです。レンタルサーバーや社内サーバーで動かしている PHP のバージョンを確かめ、サポート中のものへ上げる計画を立てておくと安心です。
サポート状況は更新されるため、公開後に判断するときは php.net の Supported Versions で最新を確認してください。
生成AIに安全なPHPを書かせる・確認する手順
ここまでを踏まえた、実務で使えるチェックリストです。OpenSSF(Open Source Security Foundation)のガイドや、各 AI ツールの公式ドキュメントの推奨をもとにまとめました。
1. プロンプトでセキュリティ要件を指定する
OpenSSF のガイドは、AI コードアシスタントへの指示に「入力の検証」「出力時のエスケープ」「秘密情報をコードに含めない」「認証のベストプラクティスに従う」などを明示するよう勧めています。要件を書かないと、AI は穴のあるコードを返しやすいとされています。たとえば「SQL はプリペアドステートメントで書いて」「出力は htmlspecialchars() でエスケープして」と具体的に伝えます。
2. 秘密情報をAIに渡さない・出力に含めない
データベースのパスワードや API キーを、そのままプロンプトに貼り付けないようにします。前述のとおり、AI の支援を受けたコードは秘密情報を含みやすいという調査もあります。生成されたコードに秘密情報が直書きされていないかも確認します。
3. AIが提案する依存パッケージを自分で確かめる
AI は、実在しないライブラリ(パッケージ)を提案することがあります。OpenSSF ガイドは、AI が提案したパッケージのうち相当数が実在しない「ハルシネーション」だったとする研究を引用しています(一例として19.7%という数字が挙げられていますが、対象のモデルや母数など元研究の詳細は今回確認できていません)。AI が入れようとするパッケージは、公式の配布元に実在するか、メンテナンスされているかを自分で確かめてから使います。
4. 本番に入れる前に、人がレビューしてテストする
これが最も大切な工程です。Claude Code の公式ドキュメントは「提案されたコードとコマンドを承認前に安全性の観点で見直すのは、あなたの責任です」と明記しています。OpenAI の開発者向けガイドも、コード生成のような影響の大きい領域では人によるレビューが特に重要だとしています。AI が『安全です』と言っても、それは保証ではありません。上の「PHPでよくある脆弱性」の表を確認の観点として使い、動作テストも行ってから本番に入れます。
よくある疑問
AIが「このコードは安全です」と言えば、信用していい?
いいえ、保証とは考えないでください。前述の調査のとおり、AI はセキュリティ上の問題を認識していても、脆弱なコードを出すことがあります。各 AI ツールの公式ドキュメント自身が、承認・レビューの責任は利用者にあるとしています。AI の説明は参考にしつつ、公式の対策(表の内容)で確かめます。
社内だけで使う小さなツールでも、ここまで必要?
扱うデータと公開範囲で判断します。インターネットに公開されていて、誰でもアクセスできるもの、個人情報や決済に関わるものは、規模が小さくても上の対策が必要です。一方、社内ネットワーク内だけで動き、機微な情報を扱わないツールは、リスクに応じて優先順位をつけてよいでしょう。ただし「社内だけのつもり」が後で公開される場合もあるため、最低限、秘密情報の直書きとサポート切れバージョンは避けておくと安心です。
どんなときに専門家へ頼むべき?
顧客の個人情報・認証(ログイン)・決済・外部との連携を扱うシステムや、停止・改ざんの影響が大きいシステムは、公開前にセキュリティに詳しい人の確認を受けることをおすすめします。この記事のチェックは、そうした確認を「省く」ためではなく、依頼する前に自分たちで整え、確認の精度を上げるためのものです。
まとめ
- 生成AI は便利ですが、セキュリティ要件を指定しないと脆弱なコードを出しやすく、複数言語をまとめた2025年の調査では検証したテストの45%で欠陥が見つかっています。人によるレビューは欠かせません。
- SQLインジェクション・XSS・CSRF などの定番の脆弱性は、PHP 公式マニュアルと OWASP が推奨する対策(プリペアドステートメント・出力エスケープ・トークン)で多くを防げます。プロンプトで要件を指定し、生成物でも確かめましょう。
- 秘密情報は AI に渡さず、コードに直書きしない。AI が提案する依存パッケージは、存在と安全性を自分で確かめます。
- PHP 8.2 は2026年12月31日にサポート終了(2026年10月時点)。使っているバージョンを確かめ、サポート中のものに保ちましょう。
生成AI を業務に取り入れるとき、こうした「安全に使うためのルールや確認の型」を社内でどう整えるかは、多くの中小企業に共通する悩みです。当サイトでは、社内の生成AI利用ルール(ガイドライン)の作り方や、Claude Code を会社で導入するときの管理設定もまとめています。あわせてご覧ください。
次にできること
取材・事業提携のご依頼は お問い合わせ から
この記事で扱うAIエージェント
- Claude Code
Anthropicが提供する、開発を任せるAIエージェントです。日本語で指示すると、ファイルを読み書きし、コマンドを実行しながら、開発やデータ整形などの作業を進めます。SETODEZAのエンジニアが、実際の開発の現場で使っています。
- ChatGPT Work
OpenAIが提供するChatGPTの「Work」は、時間のかかる複数ステップの仕事を任せるAIエージェントです。調べて分析し、文書・表・スライド・レポートなどの成果物まで仕上げます。

