
☸Le tout premier outil de test d'API GraphQL tenant compte des dépendances !
Le seul outil de test d'API GraphQL conscient des dépendances !
GraphQLer est un outil de pointe conçu pour tester dynamiquement les API GraphQL avec un accent sur l'adaptabilité. Il offre une gamme de fonctionnalités sophistiquées qui rationalisent le processus de test et garantissent une analyse robuste des API GraphQL. GraphQLer gère avec compétence les objets et ressources créés, identifie efficacement les dépendances entre objets, requêtes et mutations, et corrige dynamiquement les erreurs dans les requêtes en fonction des restrictions de l'API. GraphQLer a été utilisé pour trouver de nombreux bogues dans des API GraphQL de niveau production !

Pour commencer à utiliser GraphQLer, consultez le guide d'installation.
❯ 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
Voici les étapes pour utiliser ce programme afin de tester votre API GraphQL. L'utilisation est divisée en deux phases : la compilation et le fuzzing.
Un troisième mode est également inclus pour plus de simplicité, appelé mode exécution. Ce mode combine les modes compilation et fuzzing en une seule commande.
(.env) python main.py --compile --url <URL> --path <SAVE_PATH>
Après la compilation, vous pouvez visualiser les résultats compilés dans <SAVE_PATH>/compiled. De plus, un graphe nommé dependency_graph.png sera généré pour inspection. Tous les INCONNUS dans les fichiers .yaml compilés peuvent être marqués manuellement ; toutefois, s'ils ne sont pas marqués, le fuzzer les exécutera quand même, mais sans utiliser de chaîne de dépendances.
(.env) python main.py --fuzz --url <URL> --path <SAVE_PATH>
Pendant le fuzzing, les statistiques relatives à l'API GraphQL et les compteurs de requêtes en cours sont affichés dans la console. Tous les codes de retour des requêtes sont écrits dans <SAVE_PATH>/stats.txt. Tous les logs du fuzzing sont conservés dans <SAVE_PATH>/logs/fuzzer.log. Le fichier de log vous indiquera exactement quelles requêtes sont envoyées à quels endpoints et quelle a été la réponse. Cela peut être utilisé pour une analyse plus approfondie des résultats.
Exécute à la fois le mode Compilation et le mode Fuzzing.
(.env) python main.py --run --url <URL> --path <SAVE_PATH>
Il existe également des variables qui peuvent être modifiées dans le fichier constants.py. Elles correspondent à des fonctionnalités spécifiques implémentées dans GraphQLer et peuvent être ajustées selon vos préférences.
| Nom de la variable | Description de la variable | Type de variable | Valeur par défaut |
|---|
| MAX_LEVENSHTEIN_THRESHOLD | Distance de Levenshtein entre les objets et les identifiants d'objets | Entier | 20 |
| MAX_OBJECT_CYCLES | Nombre maximal de fois que le même objet doit être matérialisé dans la même requête/mutation | Entier | 3 |
| MAX_OUTUPT_SELECTOR_DEPTH | Profondeur maximale à laquelle la sortie de la requête/mutation doit être développée (par exemple, dans le cas de sélecteurs récursifs infinis) | Entier | 3 |
| USE_OBJECTS_BUCKET | Indique s'il faut stocker les identifiants d'objets pour une utilisation future | Booléen | True |
| USE_DEPENDENCY_GRAPH | Indique s'il faut utiliser la fonctionnalité de conscience des dépendances | Booléen | True |
| MAX_FUZZING_ITERATIONS | Nombre maximal de charges utiles de fuzzing à exécuter sur un nœud | Entier | 5 |
| MAX_TIME | Durée maximale d'exécution | Entier | 3600 |