
☸A primeira ferramenta de teste de API GraphQL com consciência de dependências!
A única ferramenta de teste de API GraphQL com reconhecimento de dependências!
GraphQLer é uma ferramenta de ponta projetada para testar dinamicamente APIs GraphQL com foco em adaptabilidade. Ela oferece uma gama de recursos sofisticados que simplificam o processo de teste e garantem uma análise robusta das APIs GraphQL. O GraphQLer gerencia com proficiência objetos e recursos criados, identifica efetivamente dependências em objetos, consultas e mutações, e corrige dinamicamente erros em consultas com base nas restrições da API. O GraphQLer foi usado para encontrar muitos bugs em APIs GraphQL de nível de produção!

Para começar a usar o GraphQLer, consulte o guia de instalação.
❯ 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
Abaixo estão os passos de como você pode usar este programa para testar sua API GraphQL. O uso é dividido em 2 fases, compilação e fuzzing.
Um terceiro modo também está incluído para facilidade de uso, chamado modo run. Este modo combina os modos de compilação e fuzzing em um único comando.
(.env) python main.py --compile --url <URL> --path <SAVE_PATH>
Após a compilação, você pode visualizar os resultados compilados em <SAVE_PATH>/compiled. Além disso, um grafo chamado dependency_graph.png será gerado para inspeção. Quaisquer UNKNOWNS nos arquivos .yaml compilados podem ser marcados manualmente; no entanto, se não forem marcados, o fuzzer ainda os executará, mas sem usar uma cadeia de dependências.
(.env) python main.py --fuzz --url <URL> --path <SAVE_PATH>
Durante o fuzzing, estatísticas relacionadas à API GraphQL e contagens de requisições em andamento são registradas no console. Quaisquer códigos de retorno de requisição são escritos em <SAVE_PATH>/stats.txt. Todos os logs durante o fuzzing são mantidos em <SAVE_PATH>/logs/fuzzer.log. O arquivo de log informará exatamente quais requisições são enviadas para quais endpoints e qual foi a resposta. Isso pode ser usado para análises adicionais dos resultados.
Executa tanto o modo de compilação quanto o modo de fuzzing.
(.env) python main.py --run --url <URL> --path <SAVE_PATH>
Existem também variáveis que podem ser modificadas no arquivo constants.py. Elas correspondem a funcionalidades específicas implementadas no GraphQLer e podem ser ajustadas conforme sua preferência.
| Nome da Variável | Descrição da Variável | Tipo | Padrão |
|---|
| MAX_LEVENSHTEIN_THRESHOLD | A distância de Levenshtein entre objetos e IDs de objetos | Integer | 20 |
| MAX_OBJECT_CYCLES | Número máximo de vezes que o mesmo objeto deve ser materializado na mesma consulta/mutação | Integer | 3 |
| MAX_OUTUPT_SELECTOR_DEPTH | Profundidade máxima que a saída da consulta/mutação deve ser expandida (como no caso de seletores infinitamente recursivos) | Integer | 3 |
| USE_OBJECTS_BUCKET | Se deve ou não armazenar IDs de objetos para uso futuro | Boolean | True |
| USE_DEPENDENCY_GRAPH | Se deve ou não usar o recurso de reconhecimento de dependências | Boolean | True |
| MAX_FUZZING_ITERATIONS | Número máximo de payloads de fuzzing para executar em um nó | Integer | 5 |
| MAX_TIME | O tempo máximo de execução | Integer | 3600 |