
Engagement Manager는 공격적 보안 인게이지먼트를 추적하기 위한 웹 애플리케이션입니다. Next.js, Prisma, PostgreSQL로 구축된 현대적인 UI를 갖추고 있습니다.
Engagement Manager는 공격적 보안 인게이지먼트를 추적하기 위한 웹 애플리케이션입니다. Next.js, Prisma, PostgreSQL로 구축된 현대적인 UI를 갖추고 있습니다. 이 앱에는 캘린더, 인게이지먼트, 클라이언트, 연락처, 파인딩, 운영자가 포함됩니다.

| 스캐너/내보내기 제품군 | 허용되는 내보내기 |
|---|---|
| Burp Suite | Issues XML, 비활성 내부 스키마 DTD 포함 |
| Nessus / Tenable | Nessus v2 XML (.nessus) |
| Nmap | XML; 열린 포트와 해당 스크립트 출력은 추론된 취약점이 아닌 정보성 관찰 내용이 됨 |
| OpenVAS / Greenbone | 네이티브 XML 보고서 또는 GMP get_reports_response |
| OWASP ZAP | 사이트 및 경고가 포함된 전통적인 JSON 보고서 |
| Nuclei | JSON Lines (-jsonl) |
| Qualys | 스캔 결과 XML (SCAN/IP 구조), 별도의 호스트 탐지 API 형식이 아님 |
| Semgrep / CodeQL 및 기타 SARIF 생성기 | SARIF JSON runs, rules 및 results |
내보내기는 가져오기당 2 MB 및 500개 파인딩으로 제한되며, 사용자별 미리보기 및 확인 속도 제한이 있습니다. 애플리케이션은 수동 생성, 템플릿 및 스캐너 가져오기를 통틀어 총 최대 10,000개의 파인딩과 단일 인게이지먼트당 500개를 허용합니다. 전역 Findings 목록은 페이지당 100개 행을 로드하며, 인게이지먼트/보고서 파인딩 쿼리는 동일한 인게이지먼트당 제한으로 제한됩니다. 알 수 없는 레이아웃은 성공적인 가져오기로 조용히 처리되지 않고 눈에 띄게 실패합니다. 스캐너 심각도는 제안 사항입니다: 승인 전에 해당 컨텍스트를 검토하십시오. 참조된 URL, HTML 및 포함된 원격 이미지는 가져오거나 실행하지 않습니다.
보고서는 1–100개의 파인딩, 최대 100개의 증거 이미지(각 5 MB, 총 입력 20 MB), 500페이지 및 25 MB 출력을 허용합니다. 발행은 인게이지먼트당 50개 버전 및 애플리케이션 전체에서 발행된 PDF 총 1 GB로 제한됩니다. 미리보기 및 발행에는 사용자별 속도 제한이 있으며, 애플리케이션 프로세스당 한 번에 하나의 PDF 렌더만 허용됩니다. 파인딩은 최대 1000개의 리비전과 500개의 댓글을 보유하며, 한도에 도달하면 기록을 덮어쓰지 않고 실패합니다. DejaVu 폰트와 해당 재배포 라이선스는 assets/fonts에 포함되어 있으며, 배포 시 이러한 자산을 유지해야 합니다(Next 출력 추적에 포함됨).
Next.js Server Actions는 증거 업로드를 위해 단일 25mb 본문 크기 제한(next.config.ts에서 설정)을 공유합니다. 로그인은 인증 또는 데이터베이스 작업 전에 4 KB 스트리밍 제한이 있는 전용 동일 출처 URL 인코딩 경로를 사용합니다.
이는 새로운 클라이언트별 테넌시 모델이 아닌 기존의 공유 인증 워크스페이스를 유지합니다. 모든 새 페이지, 액션 및 PDF 다운로드는 현재 데이터베이스 기반 세션을 확인합니다. 초안은 소유자로 범위가 지정되며, 검토, 템플릿 승인 및 발행 권한은 서버 측에서 강제됩니다. 기밀 PDF 응답은 private/no-store입니다. 최종 PDF는 명시적 보고서 필드 허용 목록만 포함하며, 비공개 초안, 검토 댓글 또는 관련 없는 인게이지먼트는 절대 포함하지 않습니다.
구현은 OWASP Top 10:2025 체크리스트를 사용합니다: 접근 검사(A01), 비공개 응답 및 기존 CSP/CSRF 제어(A02), 고정된 종속성 및 CI(A03), 기존 세션/시크릿 보호와 보고서 무결성 검사(A04/A08), 비활성 Markdown/XML 및 매개변수화된 데이터베이스 접근(A05), 제한된 처리 및 독립적 검토(A06), 라이브 세션 검사(A07), 콘텐츠 없는 감사 이벤트(A09), 실패 시 정리를 포함한 트랜잭션 변경(A10). 다이제스트는 우발적 손상을 감지하며, 디지털 서명이나 데이터베이스 관리자로부터의 보호가 아닙니다. 이는 규정 준수 인증이 아닙니다. 프로덕션에는 여전히 HTTPS, 보호된 데이터베이스/백업 스토리지 및 감사 출력의 운영 모니터링이 필요합니다.
이 업그레이드를 배포하기 전에 일반 애플리케이션 백업을 수행하고 npm run db:migrate로 추가적인 20260904221808_reporting_workflow 및 20260906194500_add_revocable_sessions 마이그레이션을 적용한 다음, Prisma Client를 재생성하고 다시 빌드하십시오. 기존 파인딩은 버전 1의 Draft로 시작하며, 기존 브라우저 쿠키는 서버 기반 세션 ID를 받기 위해 다시 로그인해야 합니다. 기존 데이터베이스를 초기화하지 마십시오. 백업에는 기존 전체 데이터베이스 내보내기를 통해 새 테이블과 발행된 PDF가 포함됩니다.
npm test npm run lint npx tsc --noEmit --noUnusedLocals --noUnusedParameters npm run build npm audit
`npm test`는 개별 TypeScript 테스트 케이스가 실제로 실행되도록 `tsx`와 함께 Node의 비격리 테스트 모드를 사용하며, 단순히 파일 하위 프로세스 성공만 보고하지 않습니다. CI에서 명시적인 어서션 총계를 계속 확인할 수 있도록 유지하세요.
데이터베이스 및 브라우저 회귀 테스트에는 마이그레이션이 적용된 **`reporting_tests`라는 전용 로컬 데이터베이스**가 필요합니다. 이 테스트들은 자체 픽스처 행을 생성하고 삭제하므로, 절대 애플리케이션 데이터베이스를 가리키지 마세요. `REPORTING_TEST_DATABASE_URL`을 해당 테스트 데이터베이스로 설정한 후 다음을 실행하세요:```bash
DATABASE_URL="$REPORTING_TEST_DATABASE_URL" npx prisma migrate deploy
npm run test:reporting
npx playwright install chromium
npm run test:browser
브라우저 스위트는 테스트 전용 세션 시크릿을 사용하여 포트 3317에서 자체 루프백 개발 서버를 시작하며, 기존 서버를 재사용하는 것을 거부합니다. 원한다면 설치된 Chromium 실행 파일로 REPORTING_TEST_BROWSER를 설정하십시오. 이 스위트는 초안 프라이버시, 충돌하는 편집, 증거 업로드, 독립적 검토, PDF 권한/불변성, JavaScript 없이 템플릿 생성, 선택적 중복 제거 가져오기를 테스트합니다. 통합 테스트는 실제 트랜잭션 충돌과 롤백을 실행합니다. 이 스위트는 원격 LAN, Safari 또는 프로덕션 배포 검증을 대체하지 않습니다.
이 애플리케이션은 Ubuntu에서 실행되도록 설계되었으며, 다음을 필요로 합니다:```bash sudo apt update && sudo apt install -y nodejs npm postgresql postgresql-client postgresql-contrib zip
`postgresql-client`는 `pg_dump`, `pg_restore`, `psql`을 제공하며, `zip`은 백업 아카이브를 생성합니다. 복원 추출은 애플리케이션에서 엄격한 항목 및 크기 검증을 통해 처리됩니다.
패키지를 설치한다고 해서 항상 PostgreSQL이 실행 중인 상태로 남는 것은 아닙니다. 역할을 생성하거나 앱을 시작하기 전에 서비스를 시작하고 활성화하십시오:```bash
sudo systemctl enable --now postgresql
sudo systemctl status postgresql --no-pager
앱이 나중에 Can't reach database server at 127.0.0.1:5432 오류로 실패하면 sudo systemctl start postgresql을 실행하고 pg_isready -h 127.0.0.1 -p 5432로 확인하세요.
앱은 Node.js ^22.12.0 또는 >=24.0.0이 필요합니다(package.json의 engines 참조). OS 패키지가 더 오래된 경우, setup.sh를 실행하기 전에 서명을 검증한 신뢰할 수 있는 패키지 소스에서 지원되는 릴리스를 설치하세요.