Community코딩 & 개발github.com

secure-webapp

OWASP 기반의 보안 가이드를 제공하여 웹 애플리케이션 개발, 편집, 리뷰 시 안전한 코딩을 지원합니다.

secure-webapp란 무엇인가요?

이 스킬은 OWASP Top 10:2025, ASVS 5.0, Cheat Sheet Series 및 WSTG 자료를 실제 웹 애플리케이션 보안 지침으로 변환합니다. 개발 중에는 자동으로 안전한 코드를 작성하고, 리뷰/감사 시에는 우선순위가 매겨진 취약점 목록을 제공합니다. 다양한 모드(감사, 빠른 점검, 강화, 수정, 설계 리뷰, 보고서 생성 등)를 지원하며, Claude Code, Codex, Gemini CLI 등 여러 에이전트 플랫폼에서 동작합니다. XSS, SQLi, IDOR, CSRF, SSRF, 공급망 위협, LLM/AI 관련 프롬프트 인젝션 및 에이전트 도구 보안 등 20가지 항목을 상시 감시하고 문제 발견 시 구체적인 수정 방법을 제안합니다.

지원 대상✓Claude Code✓Codex CLI~Cursor✓Gemini CLI
npx skills add https://github.com/gabrielereylane/lovable-skills/tree/HEAD/.agents/skills/secure-webapp

Installed? Explore more 코딩 & 개발 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

Secure Web App Coding (보안 웹앱 코딩)

OWASP Top 10:2025, ASVS 5.0, Cheat Sheet Series 및 일부 WSTG 자료를 실용적인 웹앱 보안 지침으로 전환합니다.

기본 (인라인): 조용히 안전한 코드를 작성하고, 근처에서 발견한 가장 영향력이 큰 이슈 하나만 표시합니다. 감사: "review", "audit", "harden", "is this secure?" 또는 사고 후속 조치 시 — assets/audit-checklist.md를 읽고 우선순위가 매겨진 결과를 생성합니다.

모드는 $secure-webapp <mode>로 호출합니다:

  • $secure-webapp audit: 전체 우선순위 리뷰; assets/audit-checklist.md를 읽습니다.
  • $secure-webapp quick-check: 가장 위험한 항목만 점검 — 인가, 인증/세션, 시크릿, 인젝션/XSS, 업로드, SSRF, 토큰. 전체 체크리스트 보고서는 생성하지 않습니다.
  • $secure-webapp harden: 수정이 허용된 곳에 직접 안전한 변경 사항을 적용합니다. 아키텍처를 유지하는 작은 패치를 적용하고, 확인 후 제품 승인이 필요한 사항을 표시합니다.
  • $secure-webapp remediate: 감사→수정 반복 루프; 먼저 assets/remediate-checklist.md를 전체 읽습니다.
  • $secure-webapp design-review: 구현 전 위협 모델링 — 가정, 신뢰 경계, 오용 사례, 필수 통제, 미해결 질문.
  • $secure-webapp report: docs/security-audit-report-YYYY-MM-DD.md에 공식 보고서를 작성합니다. 먼저 assets/report-template.md를 전체 읽고 모든 단계를 따릅니다. 이 세션에서 사전 감사가 필요합니다. 채팅이 아닌 파일에 작성합니다.
  • $secure-webapp update: npx --yes github:hov172/secure-webapp-skill --global을 실행하여 이 설치를 자체 업데이트합니다. 버전을 확인하고 최신 릴리스가 있을 때만 재설치합니다. 플래그: --claude/--codex/--gemini, --check, --force.
  • $secure-webapp maintain: 소스 저장소의 클론에서 스킬 패키지 자체를 업데이트합니다 — scripts/README.md 참조.

작업에 필요한 참조 자료만 로드하세요. 한 번에 모두 로드하지 마세요.

라우팅

작업 내용로드할 파일
신뢰할 수 없는 문자열이 HTML/DOM/SQL/쉘/NoSQL/LDAP/정규식/CSV로 해석됨references/input-handling.md
로그인, 회원가입, 비밀번호, MFA, 재설정, 무차별 대입, 세션, 쿠키, 로그아웃references/auth-and-sessions.md
권한, 역할, 소유권 확인, IDOR, 테넌트 격리references/authorization.md
JWT, API/리프레시 토큰, 서명 및 검증, OAuth/OIDC, PKCE, statereferences/tokens-and-oauth.md
REST/GraphQL/WebSocket 엔드포인트, 속도 제한, 매스 어사인먼트, 응답 형태, 업로드/다운로드, 경로 탐색, 사전 서명된 URLreferences/apis-and-files.md
Secure/HttpOnly/SameSite, CSP, CORS, CSRF, 헤더, iframe, postMessagereferences/frontend-and-headers.md
환경 변수, .env, 키, 시크릿 매니저, 디버그 모드, 기본값references/secrets-and-config.md
암호화, 비밀번호 해싱, 알고리즘, 키 관리, PIIreferences/data-and-crypto.md
종속성, lockfiles, SBOM, CI/CD, GitHub Actions, 서명된 아티팩트references/supply-chain.md
사용자 제어 외부 URL, SSRF, 경쟁 조건, 역직렬화, 프로토타입 오염references/secure-coding.md
로깅, 오류 응답, 스택 트레이스, 감사 추적, Fail-closed, 롤백references/logging-and-errors.md
새 기능 설계, 위협 모델링, 멀티 테넌시, 보안 중심 설계 결정references/insecure-design.md
LLM/AI 기능, 프롬프트 구성, RAG, 에이전트 도구 호출, MCP 서버, 모델 출력 렌더링 또는 실행references/ai-and-llm.md

항시 감시 목록

웹 코드에서 발견 시 하나의 구체적인 수정 방법과 함께 간단히 표시하세요:

  1. 리소스 라우트에 서버 측 인증/소유권 확인 누락. WHERE owner_id = :current_user와 같은 쿼리 수준 스코핑을 선호합니다.
  2. 하드코딩된 시크릿, 자격 증명, JWT 시크릿, API 키 또는 커밋된 .env 파일.
  3. 문자열로 구성된 SQL/NoSQL/쉘 쿼리. 파라미터화된 쿼리, 안전한 빌더 또는 argv API를 사용하세요.
  4. 평문 또는 빠른 해시 비밀번호. argon2id, scrypt 또는 bcrypt를 사용하고, PBKDF2는 필요한 경우에만 사용하세요.
  5. 고정되지 않은 알고리즘, exp/iss/aud 검증 누락, 코드 내 시크릿을 사용한 JWT 검증.
  6. 사용자 콘텐츠와 함께 dangerouslySetInnerHTML, v-html 또는 innerHTML 사용. 텍스트로 렌더링하거나 위생 처리하세요.
  7. 와일드카드 또는 에코된 출처(origin)를 가진 자격 증명 CORS. 엄격한 허용 목록을 사용하세요.
  8. 로그인, 회원가입, 재설정, MFA/OTP 또는 비용이 많이 드는 엔드포인트에 속도 제한 누락.
  9. 자세한 프로덕션 오류, 스택 트레이스, SQL/ORM 세부 정보 또는 디버그 모드가 클라이언트에 노출됨.
  10. 검증되지 않은 next, returnTo 또는 URL 매개변수로 인한 오픈 리다이렉트.
  11. 허용 목록 및 DNS/리다이렉트 후 프라이빗 IP 차단 없이 사용자 제공 URL에서 발생하는 SSRF.
  12. 비밀번호, 토큰, 세션 ID, 시크릿 또는 불필요한 PII를 포함하는 로그.
  13. 클라이언트 전용 보안 통제: 숨겨진 필드, 비활성화된 버튼, 클라이언트 역할 클레임, 프론트엔드 전용 검증.
  14. 크기, 유형, 경로, 저장소 또는 생성된 이름 통제가 없는 파일 업로드.
  15. 인증, 인가, 속도 제한, 기능 플래그 또는 트랜잭션 주변의 Fail-open 예외 경로.
  16. 잔액, 할당량, 결제, 재고, 쿠폰 또는 일회성 토큰 상태 변경의 비원자성.
  17. 모델/LLM 출력이 검사 없이 싱크(sink)에 도달 — innerHTML, 쉘, SQL, 파일 경로, fetch URL 또는 다운스트림 에이전트. 신뢰할 수 없는 입력으로 취급하세요.
  18. 최종 사용자가 아닌 서비스 계정에 대해 인가된 에이전트 도구 호출, 또는 프롬프트 인젝션을 RCE, SQLi, SSRF로 전환하는 일반 run_shell/execute_sql/http_request 도구.
  19. 신뢰할 수 없는 텍스트가 시스템 프롬프트에 연결됨; 모델 컨텍스트에 시크릿 또는 다른 사용자의 데이터 포함.
  20. 고정(pinning) 및 lockfile이 예상되는 위치의 가변(mutable) 종속성 또는 CI 액션 참조 — 이동된 태그는 해당 작업의 시크릿으로 공격자 코드를 실행합니다. 배포 자격 증명, 서명 키 또는 게시 권한을 보유한 작업은 높음(High)으로 평가하세요. OIDC가 존재하는 장기 클라우드 자격 증명도 마찬가지입니다. 모노레포의 모든 워크스페이스를 감사하고, --audit-level이 high보다 약한 경우 플래그를 지정하세요.

동작 방식

  • 기본적으로 긴 설명 없이 안전한 코드를 작성합니다. 필요할 때 보안 관련 선택 사항을 간략히 언급합니다.
  • 앱의 중요도에 맞게 엄격함을 조정합니다. 일회용 프로토타입에 엔터프라이즈급 통제를 강요하지 마세요.
  • 의도적으로 안전하지 않은 코드를 생성하지 마세요. 안전한 대안을 제시하고 제약 조건을 한 문장으로 설명하세요.
  • 새로운 신뢰 경계 기능의 경우 확인할 사항: 신뢰할 수 없는 입력, 인가, 실패 모드, 저장된 데이터, 오용 경로.
  • 감사 시 실제 코드를 검사하고, 필수적인 범위 질문만 하며, 심각도 + 위치 + 증거 + 수정 방법을 우선순위와 함께 보고합니다.
  • 요청받지 않은 한 OWASP 요구 사항 번호를 인용하지 마세요.
  • 침투 테스트를 수행한다고 주장하지 마세요. 이는 코드 및 설계 리뷰입니다.

범위

주류 웹 스택 — Next.js, Express, Django, Flask, FastAPI, Rails, Spring, Laravel, Go 및 이와 유사한 환경. 참조 자료가 다루지 않는 틈새 영역의 경우 추측하지 말고 관련 OWASP 출처를 가리키세요.

에이전트에 구애받지 않음: Claude Code, Codex, Gemini CLI 및 스킬을 로드하거나 AGENTS.md/GEMINI.md를 읽는 모든 도구에서 작동합니다. 이 파일이 특정 도구를 명명하는 경우, 사용자 환경의 동등한 도구를 사용하세요.

관련 스킬