Rulebook

Claude Rules 관리

문서맵
  • component-design
  • entities-api
  • entities-layer
  • entities-model
  • error-handling
  • features-layer
  • fsd-architecture
  • react-hooks
    1
  • security
  • server-components
  • shared-layer
  • tailwind-css
  • tanstack-query
  • testing
  • views-layer
  • widget-layer
  • changelog
  • development-workflow
  • documentation
  • git-commit
  • marketing-seo
  • marketing-ux
  • naming-convention
  • security
  • typescript-standards
  • ux-copy-and-tone
  • api-design
  • database
  • nest
  • security
  • supabase
  • README
전체 룰 다운로드
common/security
activev12026. 4. 12.

description: "공통 보안 패턴 - 환경변수 관리, 스팸 방어, 민감 데이터 노출 방지" globs:

  • "**/.env*"
  • "**/*.ts"
  • "**/*.tsx"

Security — 공통

프론트·백엔드 모두에 적용되는 보안 원칙.

환경변수 관리

분류

접두사 / 위치용도노출 범위
NEXT_PUBLIC_*브라우저에 노출해도 되는 값클라이언트 + 서버
접두사 없음서버 전용 시크릿서버만
  • API key, 토큰, DB URL, webhook URL 등은 절대 NEXT_PUBLIC_ 접두사 불가
  • 프론트에서 필요한 값이 시크릿이면, 서버 측에서 처리 후 안전한 데이터만 내려준다

.env 파일 관리

  • .env.example: 모든 변수의 키 + 설명 주석. 값은 비움 (예시 URL 가능)
  • .env: 로컬 개발용. 반드시 .gitignore 에 포함
  • .env.production: 프로덕션 값은 호스팅 플랫폼의 환경변수 관리에서 설정. 파일로 커밋 금지

새 환경변수 추가 시 체크리스트

  1. .env.example 에 키 + 주석 추가
  2. 서비스에서 미설정 시 동작 정의 (경고 로그 + 기능 비활성화 or throw)
  3. 프로덕션 배포 시 값 설정 확인

스팸 방어

공개 폼 제출에는 가벼운 스팸 방어를 적용한다.

Honeypot 패턴

사용자에게 보이지 않는 hidden input 을 추가. 봇이 자동으로 채우면 서버가 감지해서 성공한 척 응답 (봇에게 실패를 알리지 않음).

  • 프론트: <input type="text" tabIndex={-1} autoComplete="off" aria-hidden="true" className="hidden" />
  • 백엔드: 값이 비어있지 않으면 스팸으로 간주, { ok: true } 반환

입력 새니타이징

  • 외부 서비스(Discord, Slack 등)로 forward 하는 텍스트에서 @everyone, @here 멘션 무력화
  • 사용자 입력을 그대로 HTML 에 렌더링하지 않음 (React 기본 이스케이프 활용)
  • URL, HTML 태그 등 위험 패턴은 서비스 레이어에서 필터링

민감 데이터 노출 방지

  • 에러 응답에 스택 트레이스, DB 쿼리, 내부 경로 노출 금지
  • 프로덕션 에러 메시지는 사용자에게 보여줄 수 있는 수준으로만
  • 로그에 비밀번호, 토큰 값 자체를 찍지 않음 (존재 여부만 표시)
  • Git 에 시크릿 커밋 방지: .env, credentials.json, *.pem 등 .gitignore 확인

피드백 0

아직 피드백이 없어요. 첫 번째로 의견을 남겨보세요!

목차

환경변수 관리분류.env 파일 관리새 환경변수 추가 시 체크리스트스팸 방어Honeypot 패턴입력 새니타이징민감 데이터 노출 방지