Callee 커버리지

Noir는 엔드포인트에 best-effort 1-hop handler callee를 붙일 수 있습니다. callee는 라우트 핸들러 본문 안에서 직접 관찰된 함수, 메서드, 프레임워크 호출입니다. AI SAST 도구와 코드 리뷰어가 다음에 확인할 코드를 좁히는 데 사용할 수 있습니다.

plain 출력에서 callee를 보려면 --include callee를 사용하세요:

noir scan . --include callee

JSON, JSONL, YAML, TOML 같은 모델 기반 포맷과 plain 모델 직렬화는 엔드포인트 모델을 통해 callees 필드를 포함합니다. OpenAPI 2.0/3.0은 operation 레벨의 x-noir-callees extension으로, SARIF는 result.properties.noir.callees로, Postman collection은 item description의 사람이 읽을 수 있는 목록으로 callee를 제공합니다. cURL, HTTPie, PowerShell, only-url, only-param 같은 명령/필터 목적 출력은 주 출력 형태를 안정적으로 유지하기 위해 callee를 생략합니다.

pathline은 best-effort 위치 정보입니다. 대부분의 analyzer는 호출 위치를 보고하고, definition resolution을 지원하는 analyzer는 도달 가능한 경우 callee 정의 위치를 보고하며 그렇지 않으면 호출 위치를 유지합니다.

커버리지 매트릭스

아래 표는 Noir가 엔드포인트별 callee 추출을 지원하는 프레임워크를 보여줍니다. 이 표는 Noir의 tech 메타데이터(프레임워크 callee 칩 및 noir list techs와 동일한 소스)에서 자동 생성되므로 analyzer와 항상 동기화됩니다. 여기에 없는 프레임워크도 엔드포인트 탐지는 동작할 수 있지만 callee 출력은 제공되지 않는 것으로 취급하세요.

Language Frameworks with callee coverage
C# ASP.NET Core MVC, ASP.NET Core Minimal API, ASP.NET MVC, Carter, FastEndpoints
C++ Crow, Drogon, cpp-httplib, oat++
Clojure Compojure, Pedestal, Reitit
Crystal Amber, Grip, Kemal, Lucky, Marten
Dart Alfred, Angel3, Dart Frog, GetServer, Serverpod, Shelf
Elixir Bandit, Phoenix, Plug
F# Giraffe
Go Beego, Chi, Echo, Fiber, Gin, GoFrame, Gorilla Mux, Goyave, Hertz, Huma, Iris, PocketBase, fasthttp, go-restful, go-zero, httprouter
Groovy Grails
Haskell Scotty, Servant, Yesod
Java Apache Struts 2, Apache Wicket, Armeria, Dropwizard, JAX-RS, Javalin, Micronaut, Play Framework, Quarkus, Spark Java, Spring, Vert.x
JavaScript AdonisJS, Apollo Server, Astro, Elysia, Express, Fastify, Fresh, Hapi, Hono, Koa, NestJS, Next.js, Nitro, NuxtJS, Remix, Restify, SvelteKit
Kotlin Ktor, Spring, http4k
Lua Lapis, lor
PHP CakePHP, CodeIgniter, Hyperf, Laminas, Laravel, Lumen, Pure, Slim, Symfony, ThinkPHP, Yii2
Perl Catalyst, Dancer2, Mojolicious
Python Bottle, Django, Falcon, FastAPI, Flask, Litestar, Pyramid, Quart, Robyn, Sanic, Starlette, Tornado, aiohttp
Ruby Grape, Hanami, Rails, Roda, Sinatra
Rust Actix Web, Axum, Gotham, Loco, Poem, RWF, Rocket, Salvo, Tide, Warp
Scala Akka HTTP, Play Framework, Scalatra, Tapir, ZIO HTTP, http4s
Swift Hummingbird, Kitura, Vapor
TypeScript NestJS, TanStack Router, tRPC
Zig Jetzig, Tokamak, Zap, httpz

완성도 참고사항

  • Callee는 1-hop만 제공합니다. Noir는 transitive call graph를 만들지 않습니다.
  • Dynamic dispatch, middleware chain, decorator, macro expansion, generated code, reflection은 정적 추출에서 누락될 수 있습니다.
  • Named handler 기반 프레임워크는 동적이거나 inline callback이 많은 프레임워크보다 callee 커버리지가 좋은 편입니다.
  • Definition resolution은 점진적으로 적용되며 현재 analyzer별로 지원됩니다.
  • downstream 도구가 쓰기 쉽도록 callee는 엔드포인트별로 dedup되고 개수가 제한됩니다.
  • renderer나 request accessor 같은 프레임워크 helper는 엔드포인트가 입력과 출력을 어떻게 다루는지 보여주므로 의도적으로 유지합니다.
Esc