メインコンテンツに移動

AIが作ったWebサイトは安全なのか?構成・通信・依存関係・脆弱性を検証する重要性

AIが作ったWebサイトは安全なのか?構成・通信・依存関係・脆弱性を検証する重要性

AIに指示を出せば、WebサイトのデザインやHTML、CSS、JavaScript、さらにはサーバー側のプログラムまで生成できるようになりました。以前なら、専門知識を持つ技術者が時間をかけて作っていたものを、AIの支援によって短時間で形にできる場面も増えています。

これは、Web制作やシステム開発にとって大きな変化です。

しかし、Webの仕事に26年携わってきた立場から言えば、AIでWebサイトを作れるかどうかだけが重要なのではありません。

本当に問われるのは、AIが生成したプログラムを含め、システム全体の構成や通信、依存関係、脆弱性を検証し、安全に運用し続けられるかどうかです。

画面がきれいに表示されることと、安全に動作することは別です。
機能が正常に動くことと、想定外の操作や攻撃にも耐えられることも別です。
そして、公開時点で問題が見つからなかったとしても、将来にわたって安全であるとは限りません。

この記事では、AIが生成したWebサイトやシステムを公開する前に何を確認すべきか、そして公開後に何を続けるべきかを、図解と動画で解説します。

この記事の要点

  • AIが生成したコードでも、正しさや安全性が保証されるわけではない
  • コードだけでなく、システム構成・通信・依存関係・脆弱性の4つの観点で確認する
  • PHPを使わない静的HTMLは攻撃経路を減らす有効な選択肢だが、すべてのリスクがなくなるわけではない
  • 自動の検査やAIによるレビューだけでなく、必要に応じて人による検証も行う
  • 公開後も脆弱性情報や更新を確認し、継続的に保守する

 

AIが生成したコードは、そのまま公開してよいのか

AIは、指示に応じてプログラムを生成できます。しかし、生成されたコードが必ず正しいとは限りません。

例えば、お問い合わせフォームを作るように指示した場合、見た目や送信機能は完成しているように見えるかもしれません。
ところが、内部を確認すると、次のような問題が潜んでいる可能性があります。

  • 入力値の検証が不十分
  • 本来アクセスできない情報を取得できてしまう
  • 認証や権限の確認が不足している
  • エラーのときに、内部の情報が表示される
  • パスワードやAPIキーなどの機密情報が、コードに含まれている
  • 古いライブラリや、脆弱性のあるパッケージを使っている

こうした問題は、見た目を確認しただけでは分かりません。
また、AIに「セキュリティを考慮してください」と指示したとしても、それだけで必要な対策がすべて実装されるわけではありません。

AIは、セキュリティ対策の提案やコードのレビューにも活用できます。
しかし、生成したAI自身に確認させて「問題ない」と回答したからといって、安全性が証明されたことにはなりません。

AIを使うことと、AIの生成物を検証することは、分けて考える必要があります。

 

確認すべきなのは、プログラムの中身だけではない

Webサイトやシステムの安全性を考えるとき、プログラムのコードだけに注目しがちです。
しかし、実際のシステムは、さまざまな要素が組み合わさって動いています。

  • ブラウザに表示するHTML、CSS、JavaScript
  • サーバーで動作するプログラム
  • データベース
  • 外部APIや各種サービス
  • ライブラリや依存パッケージ
  • DNS、ネットワーク、サーバーの設定
  • 認証情報や管理者アカウント

一つひとつの要素に問題がなくても、組み合わせ方や接続方法によってリスクが生じることがあります。
そこで、少なくとも次の4つの観点から確認することが重要です。

下の図は、その4つの観点を示したものです。

図をクリックすると、その場で動画で確認できます。

見た目と動作は問題なくても、システム構成・通信・依存関係・脆弱性の4つの観点で中身を確かめることを示す図

① システム構成:何がどこで動いているのか

まず確認したいのは、システム全体の構成です。
どのプログラムがどこで動作し、どのデータを扱い、どのサービスと接続しているのかを把握できているでしょうか。

例えば、単純な会社案内サイトだと思っていたものが、実際には外部API、複数のJavaScriptライブラリ、フォームの送信先のサービスに依存していることもあります。AIにWebサイトを作らせる場合も、完成したファイルを受け取って終わりにするのではなく、構成を確認する必要があります。

  • 公開サーバーで動作するプログラムは何か
  • 管理画面はどこにあるのか
  • データベースは必要なのか
  • 外部サービスに、どのような情報を送信するのか
  • 管理用の機能が、公開側からアクセスできる状態になっていないか

こうした点を整理することで、不要な機能や、公開する必要のない仕組みを減らせます。

② 通信:どこと、何の情報をやり取りしているのか

Webサイトは、ブラウザとサーバーの間だけで動いているとは限りません。
外部API、アクセス解析サービス、フォームサービス、画像配信サービスなど、さまざまな接続先と通信する場合があります。そこで確認したいのが、通信先と、送受信する情報です。

  • 想定していない外部のサーバーに通信していないか
  • APIキーや認証情報が、ブラウザ側に露出していないか
  • 個人情報を、必要以上に外部へ送信していないか
  • HTTPSが適切に設定されているか
  • API側で、認証・権限の確認・入力値の検証が行われているか

HTTPSを使用していれば、通信経路の保護には役立ちます。しかし、送信先が適切か、送信する情報が必要か、サーバー側の認証が正しいかまで保証されるわけではありません。

通信が暗号化されていることと、通信の内容や接続先が安全であることは、別の問題です。

③ 依存関係:外部のプログラムに問題はないか

Webサイトやシステムでは、自分で書いたコードだけでなく、ほかの開発者が作ったライブラリやパッケージを利用することがあります。こうした外部の部品を利用する関係を、依存関係と呼びます。AIが生成したプログラムでも、外部ライブラリを読み込んだり、パッケージをインストールしたりすることがあります。

  • そのパッケージは実在し、信頼できる配布元から提供されているか
  • 現在も保守されているか
  • 既知の脆弱性が報告されていないか
  • 古いバージョンを使い続けていないか
  • 不必要なパッケージまで追加していないか

AIは、もっともらしい名前の実在しないパッケージを提案したり、古い情報に基づいてバージョンを推奨したりすることがあります。さらに、AIが提案しがちな「存在しないパッケージ名」で、攻撃者が不正なパッケージを先回りして公開しておく手口(スロップスクワッティングと呼ばれます)も報告されています。提案されたパッケージ名を、そのままインストールしないことが大切です。

また、公開時点では問題がなかったライブラリでも、後から脆弱性が見つかることがあります。依存関係の確認は、公開前の一度だけで終わる作業ではありません。継続的に情報を確認し、必要に応じて更新や影響の調査を行うことが重要です。

④ 脆弱性:想定外の操作や攻撃に耐えられるか

最後に確認したいのが、プログラムや設定に脆弱性がないかという点です。

  • 不正な入力によって、意図しない処理が実行される
  • 認証を通過しなくても、データにアクセスできる
  • ほかの利用者の情報を、閲覧・変更できる
  • ファイルのアップロード機能が悪用される
  • エラー処理やアクセス制御が不十分
  • サーバーや管理画面の設定が適切でない

正常な操作で期待どおりに動くことを確認するだけでは、こうした問題を見つけられない場合があります。
入力値を意図的に変える、権限のない状態でアクセスする、異常なデータを送信するといったテストも必要です。

自動のスキャンやテストツールは有効ですが、それだけで安全性を完全に証明できるわけではありません。
業務上のルールやアクセス権限の設計など、ツールだけでは判断しにくい問題もあるからです。

 

PHPを使わなければ、安全なWebサイトになるのか

ここは、誤解されやすいポイントです。

PHPを使用しない静的HTML中心のWebサイトでは、公開側でPHPのプログラムを実行する必要がありません。
あらかじめ生成したHTMLファイルを配信する構成にすれば、公開側にPHPの実行環境やデータベース、CMSの管理画面を置かずに運用することもできます。

このような構成は、不要な実行環境や攻撃経路を減らすうえで有効な選択肢です。
会社案内やサービス紹介など、頻繁に内容が変わらないページであれば、静的HTMLを採用することで、公開側の構成をシンプルにできる場合があります。静的HTMLとWordPressの違いは「静的HTMLに変えるべき?WordPressのメリット・デメリットを比較」で詳しく解説しています。

ただし、ここで重要なのは、PHPを使わないことと、Webサイト全体が安全であることは同じではないという点です。

静的HTMLにすると減らせるものと、それでも残るリスクを比べた図

例えば、公開ページ自体が静的HTMLでも、お問い合わせフォームの送信先でプログラムを動かしている場合、その部分には別にセキュリティ対策が必要です。また、PHPを使っていないからといって、サーバーのアカウントが乗っ取られたり、公開ファイルが改ざんされたりする可能性までなくなるわけではありません。

大切なのは、特定の言語や技術を使っているかどうかだけで判断するのではなく、実際の構成に応じてリスクを把握することです。

不要な仕組みを減らすことと、残った仕組みを適切に守ること。この両方が必要です。

 

公開前に確認したいチェックポイント

AIを使ってWebサイトやシステムを構築した場合、公開前に次のような項目を確認するとよいでしょう。

観点確認すること
構成と設計どのプログラムやサービスが動作しているかを把握している/公開する必要のない管理機能やファイルが公開されていない/個人情報や機密情報を扱う場所が明確になっている/必要以上に機能や外部サービスを追加していない
通信とデータ外部の通信先を把握している/APIキーや認証情報をブラウザ側に露出させていない/HTTPSやアクセス制御を適切に設定している/個人情報などを必要以上に送信していない
依存関係とコード外部ライブラリやパッケージの配布元を確認している/既知の脆弱性がないか調べている/入力値の検証や認証・認可の処理を確認している/秘密情報がソースコードや公開ファイルに含まれていない/自動テストやセキュリティ検査の結果を確認している
公開後の運用更新や脆弱性情報を確認する担当者が決まっている/バックアップと復旧の方法を確認している/不具合や攻撃の兆候を把握する手段がある/問題が見つかったときの対応手順が決まっている

すべてのサイトに同じ対策を機械的に当てはめればよいわけではありません。
扱う情報、公開の範囲、必要な機能、事業への影響などに応じて、必要な対策を選ぶことが重要です。

 

AIを使った開発だからこそ、継続的な保守が必要

Webサイトは、公開したら終わりではありません。公開後に脆弱性が発見されることもありますし、利用している外部サービスやライブラリの仕様が変わることもあります。
アクセス数や機能の追加によって、当初は想定していなかった問題が生じる場合もあります。
そのため、開発時に検証するだけでなく、公開後も必要な確認を続けることが大切です。

下の図は、公開前の検証から公開後の保守までの流れを示したものです。図をクリックすると、その場で動画で確認できます。

公開前の検証・テスト・公開から、公開後に情報の確認・更新とテスト・バックアップ・記録を繰り返す保守の流れの図

  1. 利用しているプログラムや外部サービスを把握する
  2. 脆弱性情報や更新情報を、定期的に確認する
  3. 必要な更新を行い、動作や安全性をテストする
  4. バックアップと復旧の手順を確認する
  5. 構成の変更や障害があった場合に、原因を調査できる状態にしておく

AIを使えば、コードの説明や修正案の作成、テスト項目の洗い出しなどを効率化できる場合があります。
一方で、AIが提案した修正によって、別の問題が発生する可能性もあります。
変更の内容を理解し、テストやレビューを通じて確認することが欠かせません。

また、AIエージェントにファイルの変更、コマンドの実行、外部サービスへのアクセスなどを許可する場合は、与える権限も慎重に設計する必要があります。

重要なのは、AIを使わないことではありません。AIを活用しながら、検証・承認・保守を行う仕組みを整えることです。

 

AI時代に問われるのは、作る力だけではない

AIによって、Webサイトやプログラムを形にするまでの時間は短縮できるようになりました。
しかし、短時間で作れることと、安全に運用できることは別です。

Webサイトやシステムには、見た目だけでは分からない構成上の問題や、通信・依存関係・脆弱性に関するリスクがあります。
そして、そのリスクは、PHPを使っているかどうか、AIを使って作ったかどうかだけで決まるものではありません。
必要なのは、どのような仕組みで動いているのかを把握し、不要な要素を減らし、残るリスクを検証し、公開後も適切に保守していくことです。

長年Web制作に携わってきた立場から、これからのWeb制作では「AIで作れるかどうか」だけでなく、「生成されたものを理解し、安全性を検証し、継続して運用できるかどうか」が、より重要になると考えています。

AIは、Web制作やシステム開発を支援する強力な道具です。
だからこそ、生成されたものをそのまま信頼するのではなく、設計・検証・運用まで含めて考えることが必要です。

 

よくある質問

Q. AIに「安全なコードを書いて」と指示すれば大丈夫ですか?

指示することには意味がありますが、それだけで必要な対策がすべて入るわけではありません。入力値の検証や権限の確認など、サイトごとに必要な対策は異なります。生成されたコードは、テストやレビューで確かめてから公開しましょう。

Q. 小さな会社案内のサイトでも、確認は必要ですか?

必要です。ただし、確認する範囲はサイトの構成によって変わります。お問い合わせフォームや外部サービスとの連携があるか、管理画面があるか、個人情報を扱うかによって、重点的に確認する場所が決まります。

Q. 自動の脆弱性スキャンだけで十分ですか?

自動のスキャンは、既知の問題を効率よく見つけるのに役立ちます。一方で、アクセス権限の設計や業務上のルールに関わる問題は、ツールだけでは判断しにくいことがあります。必要に応じて、人による確認と組み合わせることが大切です。

Q. AIにコードを確認させることに意味はありますか?

あります。問題点の洗い出しや修正案の作成には役立ちます。ただし、AIが「問題ない」と回答しても、安全性が証明されたことにはなりません。テストや人のレビューと組み合わせて使いましょう。

 

まとめ

  • AIが生成したコードでも、正しさや安全性が保証されるわけではない
  • コードだけでなく、システム構成・通信・依存関係・脆弱性を確認する
  • PHPを使わない静的HTMLは攻撃経路を減らす選択肢だが、すべてのリスクがなくなるわけではない
  • 自動の検査やAIによるレビューだけでなく、必要に応じて人による検証も行う
  • 公開後も脆弱性情報や更新を確認し、継続的に保守する

AIでWebサイトを作れる時代だからこそ、制作の速さだけでなく、安全に運用し続けるための設計と検証が重要です。

金風株式会社では、Webサイトを制作するだけでなく、サイトの構成やセキュリティ、更新・運用の負担にも目を向け、事業に合った仕組みづくりを支援しています。AIで作ったサイトや、今お使いのサイトの安全性を確かめたい方は、お気軽にご相談ください。

 

あわせて読みたい

 

参考資料

最新のお役立ち情報はメルマガでもお届けしています