설정
계정 → 웹훅을 열고 HTTPS 엔드포인트를 만든 후 일회성 whsec_ 시크릿을 수신기에 저장하세요. 웹훅은 유료 플랜에서 사용할 수 있습니다.
- 계정 → 웹훅에서 엔드포인트를 만드세요.
- FixWeb이 해당 엔드포인트로 보낼 이벤트를 선택하세요.
- 시크릿을 즉시 복사하세요. 한 번만 표시되며 나중에는 교체만 할 수 있습니다.
이벤트
시작 이벤트 표면은 팀이 일반적으로 CI, 알림 또는 티켓 관리에 연결하는 순간을 다룹니다:
scan.completed— 스캔이 completed로 전환될 때 발생합니다. 페이로드: 스캔 ID, 대상, 모드, 심각도 버킷별 수, 보고서 링크.scan.failed— 최종 실패 알림입니다. 페이로드: 스캔 ID, 실패한 단계, 오류 및 보고서 링크.finding.created— 치명적 또는 높은 심각도의 발견 사항마다 생성됩니다. 이벤트 폭주를 피하기 위해 낮은 심각도는 기본적으로 scan.completed에 합쳐집니다.monitor.alert.fired: 실시간 웹사이트 모니터링이 변경을 감지하면 발생합니다. 현재 플랜에서는 실시간 모니터링을 사용할 수 없습니다.schedule.run.queued— 스케줄러가 재스캔을 대기열에 넣을 때 발생합니다. CI 오케스트레이션에 유용합니다.
페이로드 형식
모든 전송은 동일한 봉투를 사용합니다: <code>id</code>, <code>type</code>, <code>created_at</code> 및 이벤트별 <code>data</code>.
{
"id": "8f1c4e2a-8c3a-4b6f-9c0d-9b1e8f3c2a4d",
"type": "scan.completed",
"created_at": "2026-05-15T10:20:30.000Z",
"data": {
"scan": {
"id": "8f1c4e2a-8c3a-4b6f-9c0d-9b1e8f3c2a4d",
"target_hostname": "staging.example.com",
"mode": "passive",
"status": "completed",
"findings_count": { "critical": 0, "high": 1, "medium": 2, "low": 3, "info": 4 },
"report_url": "https://fixweb.app/dashboard/scans/8f1c4e2a-..."
}
}
}서명
FixWeb은 HMAC-SHA-256으로 정확한 원시 JSON 본문에 서명합니다. 이벤트 데이터를 파싱하거나 신뢰하기 전에 서명을 확인하세요. 헤더:
fixweb-signature: t=<timestamp>,v1=<hex hmac>fixweb-event: scan.completedfixweb-delivery: <uuid>(멱등 키)
import { createHmac, timingSafeEqual } from "node:crypto";
function verify(rawBody: string, header: string, secret: string) {
const parts = Object.fromEntries(header.split(",").map((p) => p.split("=")));
const signed = `${parts.t}.${rawBody}`;
const expected = createHmac("sha256", secret).update(signed).digest("hex");
const received = Buffer.from(parts.v1 ?? "", "hex");
const calculated = Buffer.from(expected, "hex");
return received.length === calculated.length && timingSafeEqual(received, calculated);
}재시도
2xx가 아닌 응답, 시간 초과, DNS 오류 또는 SSRF 안전 차단은 약 24시간 동안 지수 백오프로 재시도됩니다. 계정 → 웹훅의 전송 행에는 응답 상태, 짧은 응답 발췌, 시도 횟수 및 데드 레터 상태가 표시됩니다.
