
☸La primera herramienta de prueba de API GraphQL consciente de dependencias.
¡La única herramienta de prueba de API GraphQL con conciencia de dependencias!
GraphQLer es una herramienta de vanguardia diseñada para probar dinámicamente APIs GraphQL con un enfoque en la adaptabilidad. Ofrece una gama de características sofisticadas que agilizan el proceso de prueba y garantizan un análisis robusto de las APIs GraphQL. GraphQLer gestiona con habilidad los objetos y recursos creados, identifica eficazmente las dependencias en objetos, consultas y mutaciones, y corrige dinámicamente los errores dentro de las consultas basándose en las restricciones de la API. ¡GraphQLer se ha utilizado para encontrar muchos errores en APIs GraphQL de nivel de producción!

Para comenzar a usar GraphQLer, consulta la guía de instalación.
❯ 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
A continuación se muestran los pasos sobre cómo puedes usar este programa para probar tu API GraphQL. El uso se divide en 2 fases: compilación y fuzzing.
También se incluye un tercer modo para facilitar su uso, llamado modo ejecución (run). Este modo combina tanto la compilación como el fuzzing en un solo comando.
(.env) python main.py --compile --url <URL> --path <RUTA_GUARDADO>
Después de compilar, puedes ver los resultados compilados en <RUTA_GUARDADO>/compiled. Además, se habrá generado un gráfico llamado dependency_graph.png para su inspección. Los DESCONOCIDOS (UNKNOWNS) en los archivos .yaml compilados se pueden marcar manualmente; sin embargo, si no se marcan, el fuzzer igual los ejecutará, pero sin usar una cadena de dependencias.
(.env) python main.py --fuzz --url <URL> --path <RUTA_GUARDADO>
Mientras se realiza el fuzzing, se registran en la consola las estadísticas relacionadas con la API GraphQL y cualquier conteo de solicitudes en curso. Los códigos de retorno de cualquier solicitud se escriben en <RUTA_GUARDADO>/stats.txt. Todos los registros durante el fuzzing se guardan en <RUTA_GUARDADO>/logs/fuzzer.log. El archivo de registro te indicará exactamente qué solicitudes se envían a qué endpoints y cuál fue la respuesta. Esto se puede utilizar para un análisis posterior de los resultados.
Ejecuta tanto el modo de compilación como el de fuzzing.
(.env) python main.py --run --url <URL> --path <RUTA_GUARDADO>
También hay variables que se pueden modificar en el archivo constants.py. Estas corresponden a características específicas implementadas en GraphQLer y se pueden ajustar a tu gusto.
| Nombre de la variable | Descripción de la variable | Tipo de variable | Valor por defecto |
|---|---|---|---|
| MAX_LEVENSHTEIN_THRESHOLD | La distancia de Levenshtein entre objetos y IDs de objetos | Entero | 20 |
| MAX_OBJECT_CYCLES | Número máximo de veces que el mismo objeto debe ser materializado en la misma consulta/mutación | Entero | 3 |
| MAX_OUTUPT_SELECTOR_DEPTH | Profundidad máxima a la que se debe expandir la salida de la consulta/mutación (como en el caso de selectores recursivos infinitos) | Entero | 3 |
| USE_OBJECTS_BUCKET | Si se deben almacenar IDs de objetos para uso futuro | Booleano | True |
| USE_DEPENDENCY_GRAPH | Si se debe utilizar la función de conciencia de dependencias | Booleano | True |
| MAX_FUZZING_ITERATIONS | Número máximo de cargas de fuzzing a ejecutar en un nodo | Entero | 5 |
| MAX_TIME | El tiempo máximo de ejecución | Entero | 3600 |