はじめに:Web APIの「作法」を理解する
現代のWebサービスは、単に情報を表示するだけでなく、ユーザーの操作に応じて動的にデータをやり取りしています。このデータのやり取りを行うための「作法」や「ルール」が、Web API(Application Programming Interface)です。Web APIには様々な種類がありますが、現在最も広く利用されているのが「REST(Representational State Transfer)」という設計原則に基づいたものです。
私は情シスセキュリティ担当として、このRESTの仕組みを正しく理解することが、Webアプリケーションのセキュリティを考える上で不可欠だと考えています。なぜなら、データのやり取りのルールを理解しなければ、どこに脆弱性が潜んでいるかを見抜くことができないからです。
1. RESTとは?
RESTは、特定の技術やプロトコルを指すものではなく、Webの設計思想に基づいたソフトウェアアーキテクチャのスタイルです。RESTの原則に従うことで、シンプルで拡張性が高く、保守しやすいWebサービスを構築できます。
Webサービスのコンテキストでは、ほとんどのサービスはRESTの原則に従って設計されており、URLと4つの主要なハイパーテキストプロトコルコール(HTTPメソッド)を使用して必要なすべての情報を交換します。この4つの主要なHTTPメソッドは、GET、POST、PUT、そしてDELETEです。
これらは、Web上の「リソース」(データや情報)を操作するための基本的な命令だと考えると分かりやすいでしょう。
2. 4つの主要なHTTPメソッドと具体例
RESTfulなWebサービスでは、リソースの操作をCRUD(Create, Read, Update, Delete)という4つの基本操作にマッピングします。そして、それぞれの操作に、前述のHTTPメソッドを割り当てます。
2.1. GET:リソースを「読み込む」(Read)
GETメソッドは、指定されたURLにあるリソースの情報を取得するために使用します。このメソッドは、データの取得のみを目的としており、サーバー上のデータを変更することはありません。
- 具体例:
GET https://infomation-sytem-security.hatenablog.com/entry/microsoft-sdl-security-development-lifecycle- 私のブログの特定の記事を閲覧するために、サーバーに記事の情報を要求します。
GET https://api.example.com/users/123- IDが「123」のユーザーの情報を取得します。
セキュリティの観点から、GETリクエストはパラメータに機密情報(パスワードなど)を含めるべきではありません。URLに表示されてしまうため、ログやブラウザの履歴に残り、漏洩のリスクがあるからです。
2.2. POST:新しいリソースを「作成する」(Create)
POSTメソッドは、サーバーに新しいリソースを作成するために使用します。ユーザーが入力したデータをサーバーに送信する際に使われることが最も多いです。
- 具体例:
POST https://api.example.com/users- 新規ユーザー登録フォームから、ユーザー名やパスワードなどの情報を含んだリクエストを送信し、新しいユーザーアカウントを作成します。
POST https://api.example.com/articles- ブログの新規記事投稿画面から、記事のタイトルや本文などのデータを送信し、新しい記事をサーバーに保存します。
POSTリクエストのデータはリクエストボディに格納されるため、GETと比べて機密情報の送信に適していますが、SSL/TLSによる暗号化は必須です。
2.3. PUT:既存のリソースを「更新する」(Update)
PUTメソッドは、指定されたURLにあるリソースの内容を、送られたデータで完全に置き換えるために使用します。
- 具体例:
PUT https://api.example.com/users/123- IDが「123」のユーザーの情報を、リクエストボディ内の新しいデータで上書き更新します。例えば、ユーザーのメールアドレスを変更する場合などに使用します。
似たメソッドとしてPATCHがありますが、こちらはリソースの一部を更新する際に使われます。PUTは全体を置き換える点が異なります。
2.4. DELETE:リソースを「削除する」(Delete)
DELETEメソッドは、指定されたURLにあるリソースを削除するために使用します。
- 具体例:
DELETE https://api.example.com/users/123- IDが「123」のユーザーアカウントを削除します。
DELETE https://api.example.com/articles/456- IDが「456」のブログ記事を削除します。
これらのメソッドは非常に強力なため、セキュリティ対策が特に重要になります。DELETEリクエストを誰でも実行できないように、認証や認可(特定のユーザーだけが削除できる権限)の仕組みを厳格に実装することが不可欠です。
3. RESTとセキュリティの関連性
RESTful APIは便利である一方、セキュリティ上の注意点も多く存在します。
- 認証と認可: 上述のように、誰でもPOST、PUT、DELETEを実行できる状況は絶対に避けるべきです。APIキー、OAuth2.0、JWT(JSON Web Token)などを利用して、正当なユーザーのみが操作できるようにする必要があります。
- SSL/TLSによる暗号化: すべての通信をHTTPSで行い、データを暗号化することは基本中の基本です。これにより、通信経路上でのデータの盗聴や改ざんを防ぎます。
- 入力値の検証: クエリパラメータやリクエストボディに含まれる入力値を常に検証し、不正なデータ(SQLインジェクションやクロスサイトスクリプティングの原因となる文字列など)を無効化する処理が不可欠です。
まとめ
RESTは、Webサービスの開発において広く採用されているアーキテクチャスタイルであり、HTTPメソッドはリソースを操作するための重要な命令です。
- REST: Webの設計思想に基づいた、シンプルで使いやすいWeb APIの設計原則。
- 4つの主要なHTTPメソッド:
- GET: データの取得(Read)。
- POST: 新規データの作成(Create)。
- PUT: 既存データの更新(Update)。
- DELETE: データの削除(Delete)。
- セキュリティ: 各メソッドの特性を理解し、認証・認可、暗号化、入力値検証といったセキュリティ対策を組み合わせることで、安全なWebサービスを構築できます。
情シス担当としては、自社サービスがどのHTTPメソッドを使い、どのようにセキュリティ対策を行っているかを常に把握しておくことが重要です。