1. rule.py 실행 execute_scan()에서 먼저 rule.py를 subprocess로 돌립니다. 여기서 시그니처 기반 점검을 하고, 지금은 기본적으로 sqlmap 보조 점검도 같이 켜집니다.
  2. HTTP 증거 수집 그 다음 ExternalEvidenceCollector가 대상 URL에 직접 요청을 보내서 헤더, 본문, 특정 엔드포인트 응답, 폼, 인증 관련 흔적 같은 관찰 가능한 evidence를 모읍니다.
  3. GPT 분석 GPTVulnerabilityAnalyzer가 evidence로 1차 판단을 만들고, 다시 최종 판단을 만듭니다. 이후 rule.py 결과를 GPT 결과에 합치고, CHECK_CATALOG 기준으로 빠진 항목도 채워서 최종 결과 JSON을 완성합니다.
  4. 결과 저장 최종 결과는 JSON으로 저장되고, make_excel_file.py를 다시 subprocess로 실행해서 엑셀 파일로 만듭니다. 엑셀의 findings 시트는 vuln_name 컬럼을 쓰고, URL은 host/query 없이 path만 저장되게 되어 있습니다.
  5. API 응답 FastAPI POST /scan은 이 전체 흐름을 실행합니다. 기본 동작은 엑셀 파일 다운로드 응답이고, download: false를 보내면 JSON 결과를 반환합니다.

<aside> 🔥

/scan 요청 -> rule.py 시그니처 점검 -> HTTP evidence 수집 -> GPT 분석 -> 결과 merge/normalize -> JSON 저장 -> 엑셀 생성 -> 파일 또는 JSON 응답

</aside>

<aside> 🔥

python scanner.py --target http://15.164.60.79 --tomcat-port 8080 --rule-sqlmap

</aside>

인코딩 오류가 나면 아래 코드 실행

<aside> 🔥

PYTHONUTF8=1 python scanner.py --target http://15.164.60.79 --tomcat-port 8080 --rule-sqlmap

</aside>