---
title: GraphQLを使ったWebアプリを攻めの視点から覗いてみる
tags:  #graphql #security #owaspkansai  
author: [att](https://convert.docswell.com/user/att)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/3EKD2YDPJD.jpg?width=480
description: 「OWASP Kansai DAY 2024.09 〜10周年記念セキュリティ・マシマシ全部盛り〜」で使用した資料です。
published: September 23, 24
canonical: https://convert.docswell.com/s/att/K3GGXL-2024-09-23-193924
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/3EKD2YDPJD.jpg)

GraphQLを使ったWebアプリを
攻めの視点から覗いてみる
2024/9/21
OWASP Kansai
Adachi Tomohiro


# Page. 2

![Page Image](https://bcdn.docswell.com/page/L73R49R4J5.jpg)

• 本資料は攻撃を推奨するものではなく、攻撃側の視点からできる
ことを⾒ることで、防御に必要な知識を得ていただくことを⽬的
に作成しています。
• ⾃⾝の管理外の環境に対して本資料内の⼿法を実⾏した場合、法
律で罰せられる可能性がありますので、絶対に実⾏しないでくだ
さい。
• 前述の⾏為等により発⽣する問題・責任について、著作者は⼀切
の責任を負いません。
2


# Page. 3

![Page Image](https://bcdn.docswell.com/page/87DYQGY57G.jpg)

⾃⼰紹介
名前︓
Adachi Tomohiro（@att0att0）
所属︓
GMOサイバーセキュリティ by
イエラエ株式会社
OWASP Kansaiボードメンバー
主にWebアプリの脆弱性診断をしています
3


# Page. 4

![Page Image](https://bcdn.docswell.com/page/VJP6L36DE8.jpg)

GraphQLとは
• API⽤のクエリ⾔語
• 必要なデータを指
定して取得するこ
とが可能なので、
効率的なデータ取
得ができる
参考・引⽤︓https://graphql.org/
4


# Page. 5

![Page Image](https://bcdn.docswell.com/page/2EV3Q43G7Q.jpg)

GraphQLとは
このハンズオンの中では以下を取り扱います。
(Subscriptionは出てきません)
■Query
主にデータ取得で⽤いる
■ Mutation
主にデータの作成・更新・削除で⽤いる
5


# Page. 6

![Page Image](https://bcdn.docswell.com/page/57G3W1YDJL.jpg)

クエリの⾒⽅
Queryなら「query」
Queryの場合は省略可
Mutationなら「mutation」
6


# Page. 7

![Page Image](https://bcdn.docswell.com/page/4EQ53DMXJP.jpg)

クエリの⾒⽅
オペレーション名
実⾏するクエリの識別につけ
る名前
リクエストで使⽤しない場合
は省略可
7


# Page. 8

![Page Image](https://bcdn.docswell.com/page/KJ491ZV271.jpg)

クエリの⾒⽅
Query / Mutation型に属す
るフィールド名
8


# Page. 9

![Page Image](https://bcdn.docswell.com/page/LE1KGR3KJG.jpg)

クエリの⾒⽅
「thread」というオブジェ
クト型のフィールドに属する
フィールド名
9


# Page. 10

![Page Image](https://bcdn.docswell.com/page/GEWDK1PPJ2.jpg)

クエリの⾒⽅
レスポンスでは、実⾏したクエリ
で指定したフィールド（id,title）
のデータが返される
10


# Page. 11

![Page Image](https://bcdn.docswell.com/page/47ZGZPK6E3.jpg)

クエリの⾒⽅
引数として、動的パラ
メータを渡すことも可能
11


# Page. 12

![Page Image](https://bcdn.docswell.com/page/YJ6YZMQL7V.jpg)

クエリの⾒⽅
クエリ内にハードコードせず、
外部から「variables」という
パラメータを介して渡すことも
可能
12


# Page. 13

![Page Image](https://bcdn.docswell.com/page/GJ5GWZRMJ4.jpg)

クエリの⾒⽅
フィールドを追加することで、取得するデータが増える
13


# Page. 14

![Page Image](https://bcdn.docswell.com/page/LE3R49P975.jpg)

クエリの⾒⽅
何でもフィールドが追加できるわけではない
14


# Page. 15

![Page Image](https://bcdn.docswell.com/page/8EDYQGL8EG.jpg)

GraphQLとは
指定できるフィールドって何で分かる︖
15


# Page. 16

![Page Image](https://bcdn.docswell.com/page/V7P6L32WJ8.jpg)

Introspection
イントロスペクションクエリを
実⾏することで、APIで定義さ
れたスキーマ情報を取得可能
スキーマ情報から、実⾏可能な
Query・Mutationや指定でき
るフィールド・引数の情報が分
かる
16


# Page. 17

![Page Image](https://bcdn.docswell.com/page/2JV3Q4D9EQ.jpg)

Introspectionの結果例
17


# Page. 18

![Page Image](https://bcdn.docswell.com/page/5EG3W1Y47L.jpg)

Introspectionの結果例
18


# Page. 19

![Page Image](https://bcdn.docswell.com/page/4JQ53DMR7P.jpg)

実際に触ってみる①
Burp Suiteの「Open browser」より起動したブラウザから、
デモサイトにアクセス
19


# Page. 20

![Page Image](https://bcdn.docswell.com/page/K7491ZVQE1.jpg)

実際に触ってみる①
Burpの「proxy」タブの
「HTTP history」を選択
表⽰されたログから、
TOPページにアクセスし
た際のリクエスト（query
thread）を選択
20


# Page. 21

![Page Image](https://bcdn.docswell.com/page/LJ1KGR3L7G.jpg)

実際に触ってみる①
⾚枠内で右クリック→
「Send to Repeater」を
クリック
21


# Page. 22

![Page Image](https://bcdn.docswell.com/page/GJWDK1PQ72.jpg)

実際に触ってみる①
「Repeater」タブのリクエ
スト部分で右クリック→
「GraphQL」→
「Set introspection query」
をクリック
22


# Page. 23

![Page Image](https://bcdn.docswell.com/page/4EZGZPK3J3.jpg)

実際に触ってみる①
イントロスペクションクエリ
が反映されていることを確認
し、「Send」をクリックして
リクエストを送信
23


# Page. 24

![Page Image](https://bcdn.docswell.com/page/Y76YZMQZEV.jpg)

実際に触ってみる①
レスポンスでスキーマの情報が返される
24


# Page. 25

![Page Image](https://bcdn.docswell.com/page/G75GWZR974.jpg)

実際に触ってみる①
]
Query型に属するフィールド「thread」があり
「Thread」という名前のオブジェクト型のデータを返す
25


# Page. 26

![Page Image](https://bcdn.docswell.com/page/9J2YQRD5JR.jpg)

実際に触ってみる①
「Thread」という名前のオブジェクト型のフィールドに属する、
26
「id」「title」フィールドがあることが確認できる


# Page. 27

![Page Image](https://bcdn.docswell.com/page/DEYGWD26EM.jpg)

とはいえレスポンスのJSONから
辿っていくのはちょとしんどい
27


# Page. 28

![Page Image](https://bcdn.docswell.com/page/VJNG96W178.jpg)

GraphQL Voyager
SDL形式のスキーマ情報
や、イントロスペクショ
ンの結果（JSON）を使⽤
し、スキーマ情報を視覚
化してくれるツールの1つ
https://github.com/graphql-kit/graphql-voyager
28


# Page. 29

![Page Image](https://bcdn.docswell.com/page/YE9W2LXYE3.jpg)

実際に触ってみる②
「CHANGE SCHEMA」
をクリック後、
「INTROSPECTION」
を選択
29


# Page. 30

![Page Image](https://bcdn.docswell.com/page/GE8N5X2K7D.jpg)

実際に触ってみる②
イントロスペクション
実⾏時のレスポンスの
JSONをコピー
30


# Page. 31

![Page Image](https://bcdn.docswell.com/page/LELPY82P7R.jpg)

実際に触ってみる②
「INTROSPECTION」
にペースト後、「DISP
LAY」をクリック
31


# Page. 32

![Page Image](https://bcdn.docswell.com/page/4JM4N6827W.jpg)

実際に触ってみる②
Queryのスキーマ情報
32


# Page. 33

![Page Image](https://bcdn.docswell.com/page/PJRWDP5579.jpg)

実際に触ってみる②
Mutationのスキーマ情報
33


# Page. 34

![Page Image](https://bcdn.docswell.com/page/PEXP13KX7X.jpg)

スキーマの情報の⾒⽅
例えばQueryであれば、
この2つがQuery型に属
するフィールドである
ことが分かる
フィールド名
返すデータの型
(!はnullを許容しない)
34


# Page. 35

![Page Image](https://bcdn.docswell.com/page/3EKD2Y59JD.jpg)

スキーマの情報の⾒⽅
スキーマ情報からクエリを組むことができる
35


# Page. 36

![Page Image](https://bcdn.docswell.com/page/L73R49K9J5.jpg)

Introspectionでスキーマ情報が取得できると
実⾏できるQueryやMutation等の情報が分かる
36


# Page. 37

![Page Image](https://bcdn.docswell.com/page/87DYQG387G.jpg)

GraphQLとは
スキーマ情報なんてなくても
アプリ操作すればそれで分かるのでは︖
37


# Page. 38

![Page Image](https://bcdn.docswell.com/page/VJP6L34WE8.jpg)

TOP画⾯アクセス時
38


# Page. 39

![Page Image](https://bcdn.docswell.com/page/2EV3Q4X97Q.jpg)

投稿時
39


# Page. 40

![Page Image](https://bcdn.docswell.com/page/57G3W1V4JL.jpg)

ログイン時
40


# Page. 41

![Page Image](https://bcdn.docswell.com/page/4EQ53D6RJP.jpg)

新規登録時
41


# Page. 42

![Page Image](https://bcdn.docswell.com/page/KJ491Z4Q71.jpg)

Queryの場合
Queryの場合、「flag」は先ほどの画⾯操作で確認できていない
42


# Page. 43

![Page Image](https://bcdn.docswell.com/page/LE1KGR4LJG.jpg)

Mutationの場合
Mutationでは、「loginotp」が先ほどの画⾯操作で確認できていない
43


# Page. 44

![Page Image](https://bcdn.docswell.com/page/GEWDK1XQJ2.jpg)

実際に触ってみる③
「query flag」を実⾏するために
「support」フォルダ内の「query_flag.txt」の内容をコピー
44


# Page. 45

![Page Image](https://bcdn.docswell.com/page/47ZGZP63E3.jpg)

実際に触ってみる③
「/graphql」へのリクエ
ストのログを選択後、
⾚枠内で右クリック→
「Send to Repeater」を
クリック
45


# Page. 46

![Page Image](https://bcdn.docswell.com/page/YJ6YZM2Z7V.jpg)

実際に触ってみる③
Repeaterに送信したリクエストのリクエストボディを
先ほどコピーした内容に置換
46


# Page. 47

![Page Image](https://bcdn.docswell.com/page/GJ5GWZ29J4.jpg)

実際に触ってみる③
この時に実⾏されるクエリの
内容は、「GraphQL」タブ
から確認できる
「Send」をクリックしてリ
クエストをAPIへ直接送信
47


# Page. 48

![Page Image](https://bcdn.docswell.com/page/9E2YQR45ER.jpg)

実際に触ってみる③
未認証での実⾏はエラーになる
ことが確認できたので、次は認
証状態で実⾏してみる
48


# Page. 49

![Page Image](https://bcdn.docswell.com/page/D7YGWDM67M.jpg)

実際に触ってみる③
以下の認証情報 or 「Signup」
からアカウント登録をしてログ
イン
email︓test@example.com
PW :password
49


# Page. 50

![Page Image](https://bcdn.docswell.com/page/VENG9631J8.jpg)

実際に触ってみる③
「HTTP history」のロ
グから、レスポンスで
返されたアクセストー
クンをコピー
50


# Page. 51

![Page Image](https://bcdn.docswell.com/page/Y79W2L9Y73.jpg)

実際に触ってみる③
「authorization: Bearer null」のnullの部分に、コピーしたトーク
51
ンをペースト「Send」でリクエスト送信


# Page. 52

![Page Image](https://bcdn.docswell.com/page/G78N5X9KJD.jpg)

実際に触ってみる③
レスポンスの内容から、
管理者で実⾏する必要が
あることが分かった
52


# Page. 53

![Page Image](https://bcdn.docswell.com/page/L7LPY8WPJR.jpg)

スキーマの情報を⾒ながら
何か⽅法がないか探してみる
53


# Page. 54

![Page Image](https://bcdn.docswell.com/page/4EM4N692JW.jpg)

実際に触ってみる④
表⽰をMutationに切り替
えた後、左のメニューの
「Mutation」をクリック
54


# Page. 55

![Page Image](https://bcdn.docswell.com/page/PERWDPG5J9.jpg)

実際に触ってみる④
Mutation時に渡せる引数の情報
が⾒える
55


# Page. 56

![Page Image](https://bcdn.docswell.com/page/P7XP13XXJX.jpg)

実際に触ってみる④
各Mutationを選択すると、引数
の型情報も確認できる
56


# Page. 57

![Page Image](https://bcdn.docswell.com/page/37KD2YW9ED.jpg)

実際に触ってみる④
「registerUser」を⾒ると気に
なる部分がある
57


# Page. 58

![Page Image](https://bcdn.docswell.com/page/LJ3R4919E5.jpg)

実際に触ってみる④
「adminflg」という、いかにも
な引数が定義されている
58


# Page. 59

![Page Image](https://bcdn.docswell.com/page/8JDYQGX8JG.jpg)

実際に触ってみる④
画⾯操作時のMutationでは送信されていなかった引数
59


# Page. 60

![Page Image](https://bcdn.docswell.com/page/VEP6L3PW78.jpg)

実際に触ってみる④
引数を追加した「mutation registerUser」を実⾏するために
「support」フォルダ内の「mutation_registerUser.txt」の内容をコピー
60


# Page. 61

![Page Image](https://bcdn.docswell.com/page/27V3Q429JQ.jpg)

実際に触ってみる④
「/graphql」へのリクエ
ストのログを選択後、
⾚枠内で右クリック→
「Send to Repeater」を
クリック
61


# Page. 62

![Page Image](https://bcdn.docswell.com/page/5JG3W1R4EL.jpg)

実際に触ってみる④
Repeaterに送信したリクエストのリクエストボディを
先ほどコピーした内容に置換
62


# Page. 63

![Page Image](https://bcdn.docswell.com/page/47Q53DVREP.jpg)

実際に触ってみる④
この時に実⾏されるクエリの
内容は、「GraphQL」タブ
から確認できる
「Send」をクリックしてリ
クエストをAPIへ直接送信
63


# Page. 64

![Page Image](https://bcdn.docswell.com/page/KE491ZMQJ1.jpg)

実際に触ってみる④
先ほど登録したアカウント
でログイン
email︓admintestuser@example.com
PW︓1qazxsw2
64


# Page. 65

![Page Image](https://bcdn.docswell.com/page/L71KGR8LEG.jpg)

実際に触ってみる④
通常のアカウントのログイ
ンでは表⽰されなかった、
2段階認証の画⾯が表⽰さ
れた
65


# Page. 66

![Page Image](https://bcdn.docswell.com/page/G7WDK1ZQE2.jpg)

実際に触ってみる④
正しいコード以外はエラー
になる
66


# Page. 67

![Page Image](https://bcdn.docswell.com/page/4JZGZP1373.jpg)

コードの総当たり
コードを「0001」〜「9999」まで総当たりしてみる
67


# Page. 68

![Page Image](https://bcdn.docswell.com/page/YE6YZMLZJV.jpg)

コードの総当たり
短い間隔で多数のリクエストを送信するとレート制限がかかる
68
かつ、コードの有効期限内（3分）の制限がある


# Page. 69

![Page Image](https://bcdn.docswell.com/page/GE5GWZ19E4.jpg)

コードの総当たり
リクエストを⼤量に送信する⽅法では難しい
69


# Page. 70

![Page Image](https://bcdn.docswell.com/page/972YQR157R.jpg)

GraphQLとは
今回のデモアプリの場合、
限られた時間内に
限られたリクエスト数で総当たりができること
が条件になる
70


# Page. 71

![Page Image](https://bcdn.docswell.com/page/DJYGWDZ6JM.jpg)

GraphQLのエイリアス
引数の値が異なる同名フィールドを追加して、1度のリクエスト
で複数の処理を実⾏してみる
71


# Page. 72

![Page Image](https://bcdn.docswell.com/page/V7NG96Y1E8.jpg)

GraphQLのエイリアス
フィールド名「loginopt」で返すデータが「0001」と「0002」
の時の異なる結果があるので、コンフリクトしている
72


# Page. 73

![Page Image](https://bcdn.docswell.com/page/YJ9W2LPYJ3.jpg)

GraphQLのエイリアス
エイリアスを使⽤し、フィールドに別名をつけることで、コンフ
リクトを回避することができる
73


# Page. 74

![Page Image](https://bcdn.docswell.com/page/GJ8N5XDKED.jpg)

GraphQLのエイリアス
エイリアスで増やした分だけ、引数の値が異なる同じ処理を、1
つのリクエストで複数実⾏することが可能になる
74


# Page. 75

![Page Image](https://bcdn.docswell.com/page/LJLPY8MPER.jpg)

実際に触ってみる⑤
エイリアスを使⽤した「mutation loginotp」を実⾏するために
「support」フォルダ内の「mutation_loginotp.txt」の内容をコピー
75


# Page. 76

![Page Image](https://bcdn.docswell.com/page/47M4N6Y2EW.jpg)

実際に触ってみる⑤
email︓admintestuser@example.com
PW
︓1qazxsw2
3分間の制限があるので、再度作成したadmin権限のアカウント
でログインして、任意の認証コードを送信
76


# Page. 77

![Page Image](https://bcdn.docswell.com/page/P7RWDP95E9.jpg)

実際に触ってみる⑤
「mutation loginotp」の
ログを選択後、
⾚枠内で右クリック→
「Send to Repeater」を
クリック
77


# Page. 78

![Page Image](https://bcdn.docswell.com/page/PJXP13QXEX.jpg)

実際に触ってみる⑤
「GraphQL」タブのmutationの内容を、先ほどコピーした内容
に置換後、「Send」でリクエストを送信
78


# Page. 79

![Page Image](https://bcdn.docswell.com/page/3JKD2Y997D.jpg)

実際に触ってみる⑤
レスポンスで返されるデータの中に、アクセストークンが含まれ
79
ていることを確認


# Page. 80

![Page Image](https://bcdn.docswell.com/page/LE3R49W975.jpg)

実際に触ってみる⑤
最初に実⾏した「query flag」のリクエストの、アクセストーク
ン部分を先ほど取得した値に置換後「Send」でリクエスト送信 80


# Page. 81

![Page Image](https://bcdn.docswell.com/page/8EDYQGK8EG.jpg)

実際に触ってみる⑤
管理者権限で実⾏したこ
とで、データの取得がで
きたことを確認
81


# Page. 82

![Page Image](https://bcdn.docswell.com/page/V7P6L3KWJ8.jpg)

デモアプリでできたこと
通常の画⾯操作では登録できない、管理者権限のユーザを作成す
ることができた
2段階認証の仕組みを回避することができた
通常の画⾯操作では実⾏されず、かつ管理者権限のユーザのみが
実⾏可能なqueryを実⾏し、データ取得ができた
82


# Page. 83

![Page Image](https://bcdn.docswell.com/page/2JV3Q4V9EQ.jpg)

GraphQLとは
何がダメだったかを考えてみる
83


# Page. 84

![Page Image](https://bcdn.docswell.com/page/5EG3W1L47L.jpg)

きっかけ
Introspectionが有効化されていて、利⽤者がスキーマ情報を取得できた
84


# Page. 85

![Page Image](https://bcdn.docswell.com/page/4JQ53DYR7P.jpg)

その結果できたこと
通常の画⾯操作では実⾏されないqueryの存在が確認できた
85


# Page. 86

![Page Image](https://bcdn.docswell.com/page/K7491ZWQE1.jpg)

その結果できたこと
通常の画⾯操作では送信されない引数の存在が確認できた
86


# Page. 87

![Page Image](https://bcdn.docswell.com/page/LJ1KGRYL7G.jpg)

他にも実は
「query thread」では「secretmemo」や「author」フィールドから
「email」「admin」フィールドを指定することができた
87


# Page. 88

![Page Image](https://bcdn.docswell.com/page/GJWDK1GQ72.jpg)

他にも実は
TOP画⾯アクセス時に実⾏されるqueryの内容と、取得したデータ
88


# Page. 89

![Page Image](https://bcdn.docswell.com/page/4EZGZPL3J3.jpg)

他にも実は
※Joeアカウント・・・ID・PWが同じアカウント
フィールドを追加することで、通常の画⾯操作では取得できない
情報が取得できた
89


# Page. 90

![Page Image](https://bcdn.docswell.com/page/Y76YZMWZEV.jpg)

GraphQLとは
Introspectionを無効化しておく
90


# Page. 91

![Page Image](https://bcdn.docswell.com/page/G75GWZM974.jpg)

Field suggestion
誤ったフィールド名を指定した際に、親切にフィールド名のサ
ジェストをしてくれる場合は、そこから存在するフィールド名
の特定につながる可能性がある
91


# Page. 92

![Page Image](https://bcdn.docswell.com/page/9J2YQR95JR.jpg)

GraphQLとは
Field suggestionも無効化しておく
92


# Page. 93

![Page Image](https://bcdn.docswell.com/page/DEYGWD46EM.jpg)

GraphQLとは
攻撃に繋げられるような情報を
簡単に与えない
93


# Page. 94

![Page Image](https://bcdn.docswell.com/page/VJNG966178.jpg)

GraphQLとは
スキーマで定義された情報が隠されていても
定義されたquery・mutationの実⾏や
フィールド・引数の追加が
禁⽌されるわけではない
94


# Page. 95

![Page Image](https://bcdn.docswell.com/page/YE9W2LLYE3.jpg)

GraphQLとは
スキーマで定義したquery・mutation
フィールドや引数等の情報は
全てアクセス・利⽤される
可能性があることを前提に考える
95


# Page. 96

![Page Image](https://bcdn.docswell.com/page/GE8N5XXK7D.jpg)

GraphQLとは
フィールド追加によって、
⾒えると困る情報の取得が可能ではないか︖
96


# Page. 97

![Page Image](https://bcdn.docswell.com/page/LELPY88P7R.jpg)

デモアプリでの例
NGなら認可制御を⾏う・不要なら実装からフィールドを取り除くなど
97


# Page. 98

![Page Image](https://bcdn.docswell.com/page/4JM4N6627W.jpg)

GraphQLとは
引数の追加によって、
本来はアプリ操作ではできると困るような
処理が⾏えてしまわないか︖
98


# Page. 99

![Page Image](https://bcdn.docswell.com/page/PJRWDPP579.jpg)

デモアプリでの例
不要なら実装から引数を取り除く
99


# Page. 100

![Page Image](https://bcdn.docswell.com/page/PEXP133X7X.jpg)

DoSに繋がるクエリ
⼤量のエイリアス
フィールドの循環参照
100


# Page. 101

![Page Image](https://bcdn.docswell.com/page/3EKD2YY9JD.jpg)

⼀例として・・・
GraphQLとは
リクエストの中で実⾏するエイリアス数を制限
101


# Page. 102

![Page Image](https://bcdn.docswell.com/page/L73R4999J5.jpg)

⼀例として・・・
GraphQLとは
循環参照を⾏わないスキーマ設計を⾏う
難しい場合はクエリのネストの深さを制限する
102


# Page. 103

![Page Image](https://bcdn.docswell.com/page/87DYQGG87G.jpg)

GraphQLとは
クエリのコスト計算による対策
103


# Page. 104

![Page Image](https://bcdn.docswell.com/page/VJP6L33WE8.jpg)

GraphQLとは
あらかじめ決まったクエリのみ実⾏を許す
「Persisted Query」というものも存在する
104


# Page. 105

![Page Image](https://bcdn.docswell.com/page/2EV3Q4497Q.jpg)

まとめ
• 攻撃に繋げられるような情報を簡単に与えない
• Introspectionを無効化する
• Field suggestionを無効化する
• アプリ操作で実⾏されるクエリ以外にも、スキーマで定義され
ているフィールドや引数等を追加することで、通常のアプリ操
作では取得しない情報の取得や、処理の実⾏につながる可能性
がある
• スキーマで定義したフィールドや引数等の情報は、全てアクセスされ
る可能性があることを前提に、対象のデータが返されても問題ないか、
困るような処理が⾏われないかを確認する
• NGなら認可制御を⾏う、不要なら実装からそのフィールド・引数を取
り除くなど
105


# Page. 106

![Page Image](https://bcdn.docswell.com/page/57G3W114JL.jpg)

まとめ
• 攻撃に繋げられるような情報を簡単に与えない
• Introspectionを無効化する
• Field suggestionを無効化する
106


# Page. 107

![Page Image](https://bcdn.docswell.com/page/4EQ53DDRJP.jpg)

まとめ
• アプリ操作で実⾏されるクエリ以外にも、スキーマで定義され
ているフィールドや引数等を追加することで、通常のアプリ操
作では取得しない情報の取得や、処理の実⾏につながる可能性
がある
• スキーマで定義したフィールドや引数等の情報は、全てアクセスされ
る可能性があることを前提に、対象のデータが返されても問題ないか、
困るような処理が⾏われないかを確認する
• NGなら認可制御を⾏う、不要なら実装からそのフィールド・引数を取
り除くなど
107


# Page. 108

![Page Image](https://bcdn.docswell.com/page/KJ491ZZQ71.jpg)

ああ
ご参加
ご清聴ありがとうございました︕
108


