コース目次 / 第0章

はじめに — 1つの窓口に、すべてが集まる

GraphQLがRESTと違い単一エンドポイントに全機能を集める設計であることを理解し、だからこそ認可チェックがフィールド単位で要ると気づきます。環境の準備とethicsゲートを確認します。

第0章 / 全6章目安 約6分この章のゴール: GraphQLの設計とRESTとの違いを理解し、認可の効かせどころを把握する

sec-http で、REST な API は /users/1 /orders/2 のように、機能ごとに URL が分かれているのを見ました。GraphQL は違います——1つの URL(たいてい /graphql)に、すべての問い合わせが集まります。

GraphQL は、何が違うのか

GraphQL では、利用者(クライアント)が「欲しいデータの形」を、クエリという文で指定します。
{ user(id: 2) { name email } } のように書けば、user というフィールド(REST でいうエンドポイントに近い)を、id: 2 という引数付きで呼び出し、返してほしいフィールド(name、email)を選べます。サーバ側では、各フィールドの裏にリゾルバという関数が結びついていて、それが実際にデータを取ってきます。

だからこそ、認可はフィールドごとに要る

REST なら「このURLは認証必須」と、経路ごとに守れました。でも GraphQL はURLが1つなので、その発想が通用しません。クエリの中に呼び出せるフィールドが何十とあり、その1つ1つ(=リゾルバ)が、自分で認可を確認しないといけません。1つでも確認を忘れたリゾルバがあれば、そこが穴になる——sec-authz で見た「認可はツールが見つけにくい」が、GraphQL ではさらに増幅されます。

このコースの環境

法と倫理ゲート

手を動かす前に

このコースは攻撃の技術に触れます。実習してよい相手は、次の3つだけです。

  • (a) 自分で作った練習用のやられ環境(このサイトが配る自作ターゲット)
  • (b) あなた自身の許可された環境(自分の Thousand SKY・secret-notes-ctf など)
  • (c) CTF 競技の中(規約の範囲で)

実在する第三者のシステムを許可なく触ることは、不正アクセス禁止法に触れます。 このゲートは、その線引きを毎回の入口で確かめるためのものです。詳しくは「セキュリティの法と倫理」へ。

このコースは、Node 標準にはない graphql パッケージを使います。演習フォルダで、次を実行してください。

mkdir sec-api-practice && cd sec-api-practice
npm init -y
npm install graphql

このコースのサーバは、この graphql パッケージと node:http だけで作ります(専用フレームワークは使いません)。相手は、あなたがこの手順で自分の 127.0.0.1 に立てる自作サーバだけです(法と倫理)。

このコースの地図

章 学ぶこと
第1章 Introspection — スキーマという、地図そのものが漏れる
第2章 BOLA — リゾルバの所有者チェック漏れ
第3章 BFLA と mass assignment — 権限チェック漏れと、入力の丸信じ
第4章 直す — フィールド単位の認可と、入力の許可リスト

準備ができたら、次の章へ。まずは、GraphQL 特有の情報開示——introspection からです。

こうなっていればOK

卒業まであと5章です。

この章はまだ完了していません。