
☸Il primo strumento di test per API GraphQL con consapevolezza delle dipendenze!
L'**unico** strumento di test per API GraphQL con consapevolezza delle dipendenze!
GraphQLer è uno strumento all'avanguardia progettato per testare dinamicamente le API GraphQL con un focus sull'adattabilità. Offre una gamma di funzionalità sofisticate che semplificano il processo di test e garantiscono un'analisi robusta delle API GraphQL. GraphQLer gestisce proficientemente oggetti e risorse creati, identifica efficacemente le dipendenze su oggetti, query e mutazioni e corregge dinamicamente gli errori all'interno delle query in base alle restrizioni dell'API. GraphQLer è stato utilizzato per trovare molti bug nelle API GraphQL di livello produttivo!

Per iniziare a usare GraphQLer, consulta la guida all'installazione.
❯ 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
Di seguito sono riportati i passaggi su come utilizzare questo programma per testare la tua API GraphQL. L'utilizzo è suddiviso in 2 fasi: compilazione e fuzzing.
Una terza modalità è inclusa per facilità d'uso, chiamata run. Questa modalità combina la modalità di compilazione e quella di fuzzing in un unico comando.
(.env) python main.py --compile --url <URL> --path <SAVE_PATH>
Dopo la compilazione, puoi visualizzare i risultati compilati in <SAVE_PATH>/compiled. Inoltre, sarà stato generato un grafo chiamato dependency_graph.png per l'ispezione. Eventuali UNKNOWNS nei file .yaml compilati possono essere marcati manualmente; tuttavia, se non marcati, il fuzzer li eseguirà comunque ma senza utilizzare una catena di dipendenze.
(.env) python main.py --fuzz --url <URL> --path <SAVE_PATH>
Durante il fuzzing, le statistiche relative all'API GraphQL e i conteggi delle richieste in corso vengono registrati nella console. I codici di ritorno delle richieste vengono scritti in <SAVE_PATH>/stats.txt. Tutti i log durante il fuzzing sono conservati in <SAVE_PATH>/logs/fuzzer.log. Il file di log ti dirà esattamente quali richieste sono inviate a quali endpoint e qual è stata la risposta. Questo può essere utilizzato per un'ulteriore analisi dei risultati.
Esegue sia la modalità di compilazione che quella di fuzzing
(.env) python main.py --run --url <URL> --path <SAVE_PATH>
Ci sono anche variabili che possono essere modificate nel file constants.py. Queste corrispondono a funzionalità specifiche implementate in GraphQLer e possono essere regolate a piacere.
| Nome Variabile | Descrizione Variabile | Tipo Variabile | Predefinito |
|---|
| MAX_LEVENSHTEIN_THRESHOLD | La distanza di Levenshtein tra oggetti e ID degli oggetti | Integer | 20 |
| MAX_OBJECT_CYCLES | Numero massimo di volte in cui lo stesso oggetto dovrebbe essere materializzato nella stessa query/mutazione | Integer | 3 |
| MAX_OUTUPT_SELECTOR_DEPTH | Profondità massima con cui l'output della query/mutazione deve essere espanso (come nel caso di selettori infinitamente ricorsivi) | Integer | 3 |
| USE_OBJECTS_BUCKET | Indica se memorizzare o meno gli ID degli oggetti per uso futuro | Boolean | True |
| USE_DEPENDENCY_GRAPH | Indica se utilizzare o meno la funzionalità di consapevolezza delle dipendenze | Boolean | True |
| MAX_FUZZING_ITERATIONS | Numero massimo di payload di fuzzing da eseguire su un nodo | Integer | 5 |
| MAX_TIME | Il tempo massimo di esecuzione | Integer | 3600 |