Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】I break into apps for a living. AI just made my job easier.

2026年10月09日に「Dev.to」が公開したITニュース「I break into apps for a living. AI just made my job easier.」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

AIはアプリ開発を高速化するが、セキュリティ対策が不十分なコードを生成しがちだ。AIは「動く」アプリは作るが「安全」は保証しない。開発者は、APIキーの扱い、認可、レートリミットなど、サーバー側で意図的にセキュリティを考慮し、対策する必要がある。リリース前に悪意ある利用を想定し、脆弱性がないか確認することが重要だ。

ITニュース解説

現代のソフトウェア開発において、人工知能(AI)の活用は目覚ましい進歩をもたらしている。AIは、ほんの数分で動くアプリケーションの骨組みを作り上げることができ、開発の速度を劇的に向上させた。これは本当に驚くべきことだが、「動く」アプリと「安全な」アプリは全く異なる概念である。AIは動くアプリを作るのは得意だが、その安全性を確保することには無関心であることが、今、大きな課題となっている。

この記事の筆者は、かつて侵入テストやバグ探しを専門としていた経験から、攻撃者の視点に立ってソフトウェアの弱点を見つけることに長けている。彼が指摘するのは、AIが生成したコードを開発者が十分な吟味もせずにそのまま公開してしまうことで、かえってシステムの脆弱性が増大しているという現実だ。開発者が「動けばいい」という考えでAIの生成物を安易に採用する風潮が、「安全性が疎かになる黄金時代」を生み出してしまったと言える。

AIの役割は、デモンストレーションが機能するようにすることであり、安全性を保証することではない。しかし、アプリケーションを世に出す開発者の役割は、悪意を持った第三者が現れたときに何が起こるかを予測し、対策を講じることにある。残念ながら、AIが構築した多くのアプリケーションでは、この「悪意ある利用」という視点が欠けていると筆者は述べている。

具体的に、開発者がAIを使ってWebアプリケーションを作る際に頻繁に陥る、同じようなセキュリティ上の穴が5つ繰り返し見られるという。

まず一つ目は、「クライアントサイドに秘密情報が置かれている」ことだ。APIキーや認証トークンといった、本来なら厳重に管理されるべき秘密の情報が、Webブラウザで動作するフロントエンドのコードや、公開されてはならない設定ファイル(例:.envファイル)に直接埋め込まれてしまっているケースである。AIはそれらをスムーズに組み込んでアプリを動かすが、ブラウザの開発者ツールを使えば誰でもこれらの秘密情報にアクセスできてしまうため、攻撃者にとってはアプリの重要な部分へアクセスするための「合鍵」を渡しているようなものだ。

二つ目は、「認可の機能が不完全である」ことだ。認証は「あなたが誰であるか」を確認するプロセスであり、認可は「あなたにこの操作をする権限があるか」を確認するプロセスである。AIはログイン画面の認証機能を構築するのは得意だが、ユーザーがログインした後に「このデータにアクセスする権限があるか」「この機能を実行する権限があるか」といった認可のチェックを忘れてしまうことが多い。その結果、悪意あるユーザーがURLのIDを少し変更するだけで、他のユーザーのデータに簡単にアクセスできてしまうといった事態が頻発する。

三つ目は、「クライアント(ブラウザ)を信用しすぎている」ことである。商品の価格計算や、入力されたデータの検証(例えば、ユーザーが正しい形式のデータを入力したかどうかのチェック)、あるいは「このユーザーは管理者である」といった重要な判断を、すべてブラウザ側で行ってしまうケースだ。しかし、Webブラウザは攻撃者によって自由に操作できる環境であり、ブラウザから送られてくる情報は決して信頼できるものではない。重要な処理や判断は、必ずサーバー側で行う必要がある。

四つ目は、「レート制限が設定されていない」ことだ。ログイン機能、パスワードリセット機能、あるいは高価なAIサービスへの問い合わせなど、リソースを消費するエンドポイントに対して、短期間に何度もリクエストを送信できる状態になっていることである。デモンストレーションでは一人のユーザーが使う分には問題ないが、悪意のあるスクリプトを使った攻撃者によって、これらの機能が毎秒何千回も繰り返し利用されると、サービス停止や経済的な損害につながる可能性がある。

五つ目は、「エラーメッセージが詳細すぎる」ことである。アプリケーションがエラーを起こした際、ユーザーに対して、システムの完全なスタックトレース(プログラムの実行履歴)、データベースのエラーメッセージ、サーバー内部のファイルパスといった、デバッグに使うような詳細な情報をそのまま表示してしまうことだ。これは攻撃者にとって、システムの構造や弱点を見つけるための「地図」を無料で提供しているようなものであり、脆弱な部分を特定されやすくなる。

この記事はAIそのものを批判するものではない。筆者自身もAIを積極的に活用し、以前よりもはるかに速く開発を行っている。AIは素晴らしいツールであり、開発スピードを飛躍的に向上させる力を持っている。しかし、この「スピード」は両刃の剣である。以前は、手動でコードを書くという「摩擦」があったため、開発者は必然的に作業を一時停止し、コードの内容や潜在的な問題をじっくり考える機会があった。この「摩擦」がセキュリティ確保の一助となっていた。しかしAIはこの摩擦を取り除いてしまったため、今では開発者が意図的にセキュリティについて考え、対策を講じる必要があるのだ。

そこで筆者は、安全なアプリケーションを構築するための具体的な心構えと対策を提案している。まず、ユーザーから受け取る「すべての入力」を疑い、悪意のあるものとみなして扱うべきだ。次に、すべての操作について、サーバー側で「認可」のチェックを必ず行う。秘密情報(APIキーなど)は常にサーバー側に厳重に保管し、決してクライアントサイドに置かない。コストがかかる処理や、ログインなどの重要な機能には、必ずレート制限を設定する。そして、エラーメッセージは必要最小限に抑え、攻撃者にヒントを与えるような詳細な情報は表示しない。

これらの対策は、どれも特別に難しいものではないと筆者は言う。ただ、AIが自動でやってくれるわけではないため、開発者が意識して実行する必要がある。そして、この「自動ではない」という部分こそが、攻撃者が狙うポイントなのだ。

最も懸念すべきは、このようなセキュリティ上の問題が、初心者によって作られたアプリだけでなく、知識豊富な開発者が高速開発の過程で生み出したアプリにも見られることである。彼らはAIが生成した「きれいなコード」を信用し、その安全性を十分に確認しないまま出荷してしまう。きれいなコードと安全なコードは、問題が発覚する直前までは同じように見えるものなのだ。

だからこそ、筆者は自分の作ったアプリケーションを公開する前に、常に一つの重要な問いを立てることを推奨している。「もしこのアプリケーションを、私に損害を与えたいと考えている誰かに渡したら、その人はまず何を試みてくるだろうか?そして、その試みは成功してしまうだろうか?」この問いに対する明確な答えを持っていなければ、それはまだ完成したアプリとは言えず、むしろ「いつか必ず発生する事件」を待っている状態だと言える。

速く開発することは大切だが、セキュリティを無視して盲目的に出荷してはならない。AIを活用しつつも、攻撃者の視点を持ち、意図的にセキュリティを確保することが、現代のシステム開発において最も重要な課題となっている。

関連コンテンツ

関連IT用語

関連ITニュース