
☸최초의 종속성 인식 GraphQL API 테스트 도구!
유일무이한 의존성 인식 GraphQL API 테스트 도구!
GraphQLer은 적응성에 중점을 두고 GraphQL API를 동적으로 테스트하도록 설계된 최첨단 도구입니다. 테스트 프로세스를 간소화하고 GraphQL API의 강력한 분석을 보장하는 다양한 정교한 기능을 제공합니다. GraphQLer은 생성된 객체와 리소스를 능숙하게 관리하고, 객체, 쿼리, 뮤테이션 간의 의존성을 효과적으로 식별하며, API의 제한 사항에 따라 쿼리 내 오류를 동적으로 수정합니다. GraphQLer은 프로덕션 등급 GraphQL API에서 많은 버그를 발견하는 데 사용되었습니다!

GraphQLer 사용을 시작하려면 설치 가이드를 확인하세요.
❯ 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
아래는 이 프로그램을 사용하여 GraphQL API를 테스트하는 방법에 대한 단계입니다. 사용법은 컴파일과 퍼징의 두 단계로 나뉩니다.
사용 편의성을 위해 실행 모드라는 세 번째 모드도 포함되어 있습니다. 이 모드는 컴파일 모드와 퍼징 모드를 하나의 명령어로 결합합니다.
(.env) python main.py --compile --url <URL> --path <SAVE_PATH>
컴파일 후 <SAVE_PATH>/compiled에서 컴파일된 결과를 볼 수 있습니다. 또한 검사를 위해 dependency_graph.png라는 그래프가 생성됩니다. 컴파일된 .yaml 파일의 UNKNOWNS는 수동으로 표시할 수 있습니다. 표시하지 않더라도 퍼저는 여전히 실행하지만 의존성 체인을 사용하지 않습니다.
(.env) python main.py --fuzz --url <URL> --path <SAVE_PATH>
퍼징하는 동안 GraphQL API 관련 통계와 진행 중인 요청 수가 콘솔에 기록됩니다. 모든 요청 반환 코드는 <SAVE_PATH>/stats.txt에 기록됩니다. 퍼징 중 모든 로그는 <SAVE_PATH>/logs/fuzzer.log에 저장됩니다. 로그 파일은 어떤 요청이 어떤 엔드포인트로 전송되었는지와 응답이 무엇인지 정확히 알려줍니다. 이는 추가 결과 분석에 사용될 수 있습니다.
컴파일 모드와 퍼징 모드를 모두 실행합니다.
(.env) python main.py --run --url <URL> --path <SAVE_PATH>
constants.py 파일에서 수정할 수 있는 변수도 있습니다. 이는 GraphQLer에 구현된 특정 기능에 해당하며, 사용자 취향에 맞게 조정할 수 있습니다.
| 변수명 | 변수 설명 | 변수 유형 | 기본값 |
|---|
| MAX_LEVENSHTEIN_THRESHOLD | 객체와 객체 ID 사이의 레벤슈타인 거리 | Integer | 20 |
| MAX_OBJECT_CYCLES | 동일한 객체가 동일한 쿼리/뮤테이션에서 구체화되는 최대 횟수 | Integer | 3 |
| MAX_OUTUPT_SELECTOR_DEPTH | 쿼리/뮤테이션 출력이 확장되는 최대 깊이(예: 무한 재귀 선택자의 경우) | Integer | 3 |
| USE_OBJECTS_BUCKET | 나중에 사용하기 위해 객체 ID를 저장할지 여부 | Boolean | True |
| USE_DEPENDENCY_GRAPH | 의존성 인식 기능을 사용할지 여부 | Boolean | True |
| MAX_FUZZING_ITERATIONS | 노드에서 실행할 최대 퍼징 페이로드 수 | Integer | 5 |
| MAX_TIME | 최대 실행 시간 | Integer | 3600 |