Meerkit
Meerkit
HomeDocsComponentsAPI
GitHub

Getting Started

5
IntroductionInstallationProject StructureThemingDeployment

CLI

6
CLI Overviewinit & setupstart, stop & openstatus, check, env & logsdbadd, test & update

Core Concepts

5
AuthenticationRoles & PermissionsData ModelLogin LockoutSecurity

Guides

3
Protect a pageAdd a roleCall your own API

Components

24

사용자 화면12

Login FormSignup FormEmail VerificationTerms AgreementGoogle LoginPassword ResetProfile & PasswordNicknameAuth DialogProfile ImageUser AvatarUser Menu

관리자 화면6

Member TableMember DirectoryMember AI UsageMember AI Usage HistoryRole ManagerRole Select

공통5

Address FieldFile DropzoneLoadingDateRoute Guards

AI Components

4
AI Prompt InputThinking IndicatorAPI Key InputVoice

API

6
OverviewHealthAuthUsers · 내 정보Users · 관리자LLM

Reference

2
Hooks & StateFAQ

Security

킷이 맡는 보안과 내 서비스가 직접 챙겨야 할 보안 체크리스트입니다.

인증 킷은 보안의 일부만 대신해 줍니다. 아래 표는 킷이 맡는 부분과, 내 서비스를 운영하기 전에 직접 확인해야 하는 부분을 나눈 것입니다.

백엔드는 아직 구현 전이라 서버 쪽 항목은 설계 기준(예정)입니다. 구현되는 대로 이 표를 실제 동작에 맞춰 갱신합니다.

Who is responsible

항목킷이 하는 일내가 해야 할 일
비밀번호 저장서버가 Argon2 같은 해시로만 저장하도록 설계 (원문 저장 안 함)해시 알고리즘·비용 설정을 운영 환경에서 점검
액세스 토큰메모리에만 보관. localStorage에 저장하지 않음토큰 수명을 서비스 성격에 맞게 조정
리프레시 토큰httpOnly 쿠키로 전달 (자바스크립트에서 읽을 수 없음)운영에서 Secure, SameSite 옵션 확인, HTTPS 사용
권한 검사화면 가드(RequireAuth, RequireRole)와 서버 검증 구조 제공내 API마다 서버에서 역할을 반드시 다시 검사
입력 검증폼에서 형식·길이를 먼저 검사서버에서 같은 규칙으로 다시 검증
가입 시 역할화면에서 역할을 고르지 않음. 서버가 기본 역할 부여기본 역할이 최소 권한(예: VIEWER)인지 확인
로그인 잠금브라우저에서 n회 실패 시 m분 잠금, 새로고침해도 유지 (안내용)서버에서 같은 규칙으로 차단하고 429 + Retry-After 응답
비밀번호 재설정메일 링크 화면과 안내 문구 제공토큰 해시 저장, 짧은 만료, 단일 사용, 메일 발송
요청 횟수 제한포함되지 않음로그인·가입·재설정 메일 재발송에 레이트 리밋을 추가
이메일 인증인증번호 받기·확인 화면, 재전송 대기(안내용)증표를 서버가 검증하고, 인증번호는 해시 저장·짧은 만료·시도 횟수 제한
파일 첨부형식·크기·개수 사전 검사 (편의용)서버가 실제 내용·크기를 다시 검사하고 안전한 이름으로 저장
권한 변경확인 창과 위험 변경 경고MASTER만 허용, 마지막 MASTER 보호, 변경 기록
약관 동의 증빙필수 약관 미동의 시 가입 차단 (화면)서버도 필수 약관을 검증하고 동의 시각을 저장
감사 로그포함되지 않음역할 변경, 탈퇴 처리 같은 관리 작업의 기록이 필요하면 추가
HTTPS·CORS같은 도메인 프록시(/api)로 CORS 부담을 줄임운영에서 HTTPS 강제, 허용 출처 최소화

Browser side

  • React는 기본적으로 출력값을 이스케이프합니다. dangerouslySetInnerHTML은 쓰지 마세요.
  • 액세스 토큰을 로그, URL, 쿼리 문자열에 남기지 마세요.
  • 화면에서 버튼을 숨기는 것은 사용자 편의입니다. 숨겼다고 접근이 막힌 것이 아닙니다.

Server side (planned)

  • 모든 보호 API는 요청의 토큰에서 사용자를 확인하고, 역할이 허용되는지 검사합니다.
  • 사용자 정보를 돌려줄 때 password_hash를 절대 포함하지 않습니다.
  • 일반 사용자가 자신의 역할을 바꾸거나 다른 사용자의 데이터를 읽지 못하게 합니다.
  • 계정 삭제는 바로 지우지 않고 deactivated_at을 기록해 막고, 보관 기간 뒤 개인정보만 지웁니다(deleted_at).

Before going live

  1. 시드 관리자 계정의 비밀번호를 바꾸거나 계정을 삭제했는지
  2. JWT 비밀키가 운영용으로 새로 생성되었고 저장소에 없는지
  3. .env가 커밋되지 않았는지
  4. 운영 환경에서 HTTPS와 쿠키 Secure 옵션이 켜져 있는지
  5. 내 모든 API에 서버 측 권한 검사가 있는지
  6. 로그인 잠금과 요청 횟수 제한이 서버에도 있는지 (브라우저 잠금만으로는 부족)
  7. 비밀번호 재설정 토큰이 해시로 저장되고 만료·단일 사용인지
  8. 샘플 약관(/terms, /privacy)을 실제 약관으로 교체했는지
  9. 개발용 안내(/docs 라우트)를 끄거나 별도 주소로 옮겼는지
Login LockoutProtect a page
© Meerkit. All rights reserved.GitHub