
☸Das erste abhängigkeitsbewusste GraphQL-API-Testwerkzeug!
Das einzige abhängigkeitsbewusste GraphQL-API-Testtool!
GraphQLer ist ein hochmodernes Tool, das GraphQL-APIs dynamisch testet, mit einem Fokus auf Anpassungsfähigkeit. Es bietet eine Reihe ausgefeilter Funktionen, die den Testprozess optimieren und eine robuste Analyse von GraphQL-APIs gewährleisten. GraphQLer verwaltet erstellte Objekte und Ressourcen effizient, erkennt Abhängigkeiten von Objekten, Abfragen und Mutationen zuverlässig und korrigiert Fehler in Abfragen dynamisch basierend auf den API-Einschränkungen. GraphQLer wurde bereits verwendet, um viele Fehler in produktionsreifen GraphQL-APIs zu finden!

Um mit GraphQLer zu beginnen, lesen Sie die Installationsanleitung.
❯ 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
Im Folgenden finden Sie die Schritte, wie Sie dieses Programm zum Testen Ihrer GraphQL-API verwenden können. Die Verwendung ist in zwei Phasen unterteilt: Kompilierung und Fuzzing.
Ein dritter Modus ist ebenfalls zur einfacheren Nutzung enthalten, der Run-Modus. Dieser Modus kombiniert den Kompilierungs- und den Fuzzing-Modus in einem einzigen Befehl.
(.env) python main.py --compile --url <URL> --path <SAVE_PATH>
Nach der Kompilierung können Sie die kompilierten Ergebnisse in <SAVE_PATH>/compiled einsehen. Zusätzlich wird ein Graph namens dependency_graph.png zur Ansicht erstellt. Alle UNKNOWNS in den kompilierten .yaml-Dateien können manuell markiert werden; wenn sie nicht markiert werden, führt der Fuzzer sie trotzdem aus, jedoch ohne eine Abhängigkeitskette zu verwenden.
(.env) python main.py --fuzz --url <URL> --path <SAVE_PATH>
Während des Fuzzings werden Statistiken zur GraphQL-API und etwaige laufende Anfragenanzahlen in der Konsole protokolliert. Rückgabecodes von Anfragen werden in <SAVE_PATH>/stats.txt geschrieben. Alle Protokolle während des Fuzzings werden in <SAVE_PATH>/logs/fuzzer.log gespeichert. Die Protokolldatei gibt genau an, welche Anfragen an welche Endpunkte gesendet wurden und wie die Antwort war. Dies kann zur weiteren Ergebnisanalyse verwendet werden.
Führt sowohl den Kompilierungs- als auch den Fuzzing-Modus aus.
(.env) python main.py --run --url <URL> --path <SAVE_PATH>
Es gibt auch Variablen, die in der Datei constants.py geändert werden können. Diese entsprechen bestimmten in GraphQLer implementierten Funktionen und können nach Ihren Wünschen angepasst werden.
| Variable Name | Variable Description | Variable Type | Default |
|---|
| MAX_LEVENSHTEIN_THRESHOLD | Der Levenshtein-Abstand zwischen Objekten und Objekt-IDs | Integer | 20 |
| MAX_OBJECT_CYCLES | Maximale Anzahl, wie oft dasselbe Objekt in derselben Abfrage/Mutation materialisiert werden soll | Integer | 3 |
| MAX_OUTUPT_SELECTOR_DEPTH | Maximale Tiefe, bis zu der die Ausgabe der Abfrage/Mutation erweitert werden soll (z. B. bei unendlich rekursiven Selektoren) | Integer | 3 |
| USE_OBJECTS_BUCKET | Ob Objekt-IDs für die zukünftige Verwendung gespeichert werden sollen oder nicht | Boolean | True |
| USE_DEPENDENCY_GRAPH | Ob die abhängigkeitsbewusste Funktion verwendet werden soll oder nicht | Boolean | True |
| MAX_FUZZING_ITERATIONS | Maximale Anzahl von Fuzzing-Payloads, die auf einem Knoten ausgeführt werden sollen | Integer | 5 |
| MAX_TIME | Die maximale Ausführungszeit | Integer | 3600 |