GraphQLで `ayed loaded()`を使用する場合、通常、関連するデータまたは関連付けを条件付きでロードする方法(ORMベースのGraphQLリゾルバーなど)である場合、いくつかの一般的なセキュリティの落とし穴が発生する可能性があります。これらの落とし穴は、主により広範なGraphQLセキュリティの問題に関連していますが、「when loaded()」が追加のネストされたデータまたは関連するデータを取得し、複雑さとリスクの増加を伴うため、特に関連性があります。
common loaded() `in graphqlを備えた一般的なセキュリティ落とし穴
** 1。一貫性のないまたは欠落の認可チェック
`reloaded()`最初のリゾルバーが実行された後、しばしばネストされたデータまたは関連データのロードをトリガーします。認証ロジックがすべてのリゾルバーまたはデータの読み込みポイント( `ayed loaded()`によってトリガーされるものを含む)で一貫して適用されない場合、不正ユーザーは機密データにアクセスできる場合があります。これは、同じデータへの一部のパスが保護されている一般的な問題ですが、他のパス( `when loaded()`を介したものなど)はそうではなく、攻撃者がアクセスコントロールをバイパスできるようにします[4] [6]。許可は、クエリレベルとすべてのネストされたリゾルバーまたはデータローダーの両方で実施する必要があります。
** 2。サービスの拒否につながる過剰フェッチと複雑なクエリ(DOS)
`ayedloaded()`を使用すると、大量の関連データを取得する深くネストされたクエリを引き起こす可能性があります。攻撃者は、過度のデータの読み込みと処理を引き起こすクエリを作成し、リソースの疲労とDOSを引き起こすクエリを作成することでこれを悪用できます。 GraphQLの単一のクエリで複数の関連するオブジェクトを取得する機能により、リソースの使用量を予測するのが難しくなり、 `Loaded()`が追加のデータを条件付きでロードすることでこれを悪化させることができます[4] [5]。緩和には、クエリの深さの制限、複雑さのスコアリング、レートの制限が含まれます。
** 3。不適切なフィールド選択による機密データの露出
`reloaded()`フィールドが公開されているフィールドを慎重に制御せずに関連データをロードすると、GraphQL応答でパスワード、トークン、またはプライベートユーザーの詳細などの機密情報が誤って返される場合があります[5]。承認チェックが欠落している場合、またはエラーメッセージが機密情報を漏らした場合、このリスクは高まります。開発者は、ネストされたデータがロードされている場合でも、機密フィールドが決して露出しないことを確認する必要があります。
** 4。不適切な入力検証による注入攻撃
`whenloaded()`が動的引数またはフィルターで使用される場合、不適切な入力検証は、基礎となるデータフェッチが適切にパラメーター化されていない場合、GraphQLクエリインジェクションやSQLインジェクションなどのインジェクションの脆弱性につながる可能性があります[6]。攻撃者は、ロジックを取得するデータを操作する悪意のあるクエリまたはコマンドを注入する場合があります。適切な入力検証とパラメーター化されたクエリの使用が不可欠です。
** 5。速度制限とブルートフォースの保護をバイパスします
`ayed loaded()`は単一のクエリ内で複数のネストされたデータフェッチを引き起こす可能性があるため、攻撃者はこれを悪用して従来のレートの制限をバイパスできます。たとえば、多くのデータフェッチまたは突然変異をトリガーする単一の複雑なクエリを送信する場合があり、リケストごとの制限をトリガーすることなくブルートフォースまたは列挙攻撃を効果的に実行します[4] [7]。レート制限戦略は、クエリの複雑さとネストされた操作を考慮する必要があります。
** 6。スキーマの内省とツーリングによる攻撃面の増加
`ayedloaded()`の使用は、多くの場合、複数のネストされた関係を持つ複雑なスキーマを反映しています。攻撃者は、GraphQLの内省とGraphIQLなどのツールを使用して、これらの関係を発見し、「ロードされたときに()」を悪用するクエリを作成することができます[1] [8]。生産における内省を無効にするか、認定ユーザーに制限することで、このリスクを減らすことができます。
### まとめ
GraphQlで `aydoloded()`を使用する場合の主なセキュリティの落とし穴は、次のことを展開します。
- ネストされたすべてのデータ読み込みパスで一貫した承認を実施しなかった。
- DOSを引き起こす過度に複雑または深いクエリを許可します。
- ネストされたフィールドを介して機密データを公開します。
- 注入攻撃につながる入力検証が不十分です。
- 複雑なネストされたクエリによるレート制限をバイパスします。
- スキーマの内省とツーリングによる暴露の増加。
緩和には、すべてのリゾルバーでの厳密な承認チェック、クエリの複雑さと深さの制限、厳格な入力検証、慎重なスキーマ設計、生産の内省の無効化、GraphQLâのクエリ構造に合わせた包括的なレートの制限[3] [5] [6] [8]が含まれます。
引用:
[1] https://portswigger.net/web-security/graphql
[2] https://www.imperva.com/blog/graphql-vulnerability-common-atcacks/
[3] https://tyk.io/blog/graphql-security-7-common-vulnerabilitivitions-and-how-to-mitigate-the-risks/
[4] https://www.brightsec.com/blog/graphql-security/
[5] https://blog.convisoappsec.com/en/security-in-graphql/
[6] https://wundergraph.com/blog/the_complete_graphql_security_guide_fixing_the_13_ast_common_graphql_vulnerablities_to_make_your_api_production_ready
[7] https://beaglesecurity.com/blog/article/graphql-attacks-vulnerability.html
[8] https://www.fastly.com/blog/exploring-the-security-implications-of-graphql