
依存関係を認識する**唯一の**GraphQL APIテストツール!
GraphQLerは、適応性に重点を置いてGraphQL APIを動的にテストするために設計された最先端のツールです。テストプロセスを合理化し、GraphQL APIの堅牢な分析を確実にする、さまざまな高度な機能を提供します。GraphQLerは、作成されたオブジェクトとリソースを巧みに管理し、オブジェクト、クエリ、ミューテーションの依存関係を効果的に特定し、APIの制限に基づいてクエリ内のエラーを動的に修正します。GraphQLerは、本番環境グレードのGraphQL APIで数多くのバグを見つけるために使用されてきました!

GraphQLerの使用を開始するには、インストールガイドを参照してください。
❯ python3 main.py --help
usage: main.py [-h] [--compile] [--fuzz] [--run] --path PATH [--auth AUTH] --url URL
options:
-h, --help show this help message and exit
--compile runs on compile mode
--fuzz runs on fuzzing mode
--run run both the compiler and fuzzer (equivalent of running --compile then running --fuzz)
--path PATH directory location for saved files and files to be used from
--auth AUTH authentication token Example: 'Bearer arandompat-abcdefgh'
--url URL remote host URL
以下は、このプログラムを使用してGraphQL APIをテストする手順です。使用法は2つのフェーズ、コンパイルとファジングに分かれています。
使いやすさのために、実行モードと呼ばれる3つ目のモードも含まれています。このモードは、コンパイルモードとファジングモードを1つのコマンドにまとめたものです。
(.env) python main.py --compile --url <URL> --path <SAVE_PATH>
コンパイル後、コンパイル結果を<SAVE_PATH>/compiledで確認できます。さらに、dependency_graph.pngというグラフが生成され、検査できます。コンパイルされた.yamlファイル内のUNKNOWNSは手動でマークできます。ただし、マークしなくてもファジングは実行されますが、依存関係チェーンは使用されません。
(.env) python main.py --fuzz --url <URL> --path <SAVE_PATH>
ファジング中は、GraphQL APIに関連する統計情報と進行中のリクエスト数がコンソールに記録されます。すべてのリクエストのリターンコードは<SAVE_PATH>/stats.txtに書き込まれます。ファジング中のすべてのログは<SAVE_PATH>/logs/fuzzer.logに保存されます。ログファイルには、どのリクエストがどのエンドポイントに送信され、その応答が何であったかが正確に記録されます。これは、さらなる結果分析に使用できます。
コンパイルモードとファジングモードの両方を実行します。
(.env) python main.py --run --url <URL> --path <SAVE_PATH>
constants.pyファイルで変更できる変数もあります。これらはGraphQLerに実装されている特定の機能に対応しており、好みに応じて調整できます。
| 変数名 | 変数の説明 | 変数の型 | デフォルト値 |
|---|
| MAX_LEVENSHTEIN_THRESHOLD | オブジェクトとオブジェクトID間のレーベンシュタイン距離 | Integer | 20 |
| MAX_OBJECT_CYCLES | 同じオブジェクトが同じクエリ/ミューテーション内で具体化される最大回数 | Integer | 3 |
| MAX_OUTUPT_SELECTOR_DEPTH | クエリ/ミューテーションの出力が展開される最大深さ(無限再帰セレクタの場合など) | Integer | 3 |
| USE_OBJECTS_BUCKET | 将来の使用のためにオブジェクトIDを保存するかどうか | Boolean | True |
| USE_DEPENDENCY_GRAPH | 依存関係認識機能を使用するかどうか | Boolean | True |
| MAX_FUZZING_ITERATIONS | ノードに対して実行するファジングペイロードの最大数 | Integer | 5 |
| MAX_TIME | 実行する最大時間 | Integer | 3600 |