--- title: 빠른 시작 --- # 빠른 시작 이 가이드는 5분 안에 CaptchaLa CAPTCHA를 통합할 수 있도록 도와줍니다. ::: tip 30초 만에 실제 동작 확인 [demo-v1.captcha.la](https://demo-v1.captcha.la) — 순수 HTML + PHP, MIT 라이선스, 모든 페이지 view-source 가능. - [popup.html](https://demo-v1.captcha.la/popup.html) — 팝업 모드 - [float.html](https://demo-v1.captcha.la/float.html) — 플로팅 - [bind.html](https://demo-v1.captcha.la/bind.html) — 버튼 바인딩 - [inline.html](https://demo-v1.captcha.la/inline.html) — 인라인 임베드 - [server-token.html](https://demo-v1.captcha.la/server-token.html) — 서버 발급 토큰 (재전송 방지) ::: ## 1. 계정 만들기 대시보드에서 무료 계정을 등록합니다 [지금 가입하기 →](https://dash.captcha.la/register) ## 2. 애플리케이션 만들기 대시보드에서 앱을 만들고 App Key를 받습니다 ## 3. SDK 설치 원하는 설치 방식을 선택합니다 ```html ``` ```bash # or via npm npm install captchala ``` ## 4. CAPTCHA 초기화 페이지에서 CAPTCHA 컴포넌트를 초기화합니다 ```html ``` ## 5. 서버 검증 서버에서 토큰을 검증합니다 ```bash POST https://apiv1.captcha.la/v1/validate X-App-Key: YOUR_APP_KEY X-App-Secret: YOUR_APP_SECRET Content-Type: application/json { "pass_token": "" } ``` ```json { "code": 0, "data": { "valid": true, "action": "login", "challenge_id": "ch_xxx", "uid": null, "risk_score": 12 } } ``` ::: warning Always check `data.valid === true` **and** `data.action` matches the scene you expected. Pass tokens are single-use; the same `pt_xxx` cannot be validated twice. ::: ## 서버 발급 Token 모드 (프로덕션 권장) {#server-token} 민감한 동작(로그인, 회원가입, 결제)에는 서버 발급 token 플로우를 권장합니다. 백엔드가 먼저 짧은 수명의 server_token 을 요청하고, 브라우저가 이 token으로 CAPTCHA를 초기화합니다. 이렇게 하면 app_key 유출로 인한 남용을 막을 수 있습니다. ### 사용 시점 - 권장: 회원가입, 로그인, 비밀번호 재설정, 결제, 포인트 교환, 그리고 공격자가 스크립트화할 수 있는 모든 엔드포인트. - 선택 사항: 편의성이 더 중요한 공개 폼, 검색창, 저가치 상호작용. ### 1. 백엔드에서 server_token 발급 자체 서버에서 X-App-Key 와 X-App-Secret 헤더를 사용해 /v1/server/challenge/issue 를 호출하세요. 이 헤더를 브라우저에 노출해서는 안 됩니다. ```bash # Server-side only — never call this from a browser curl -X POST https://apiv1.captcha.la/v1/server/challenge/issue \ -H "X-App-Key: YOUR_APP_KEY" \ -H "X-App-Secret: YOUR_APP_SECRET" \ -d "action=login&ttl=300&max_uses=1&bind_ip=1.2.3.4" # → { "code": 0, "data": { "server_token": "sct_...", "expires_in": 300 } } ``` ### 2. 프런트엔드가 server_token 으로 CaptchaLa 렌더링 CaptchaLa 컴포넌트에 token을 전달하세요. SDK는 challenge 초기화 시 인증 초기화 으로 이를 전달합니다. ```js // Browser fetches the token from YOUR backend, not from CaptchaLa directly const { serverToken } = await fetch('/api/captcha/issue').then(r => r.json()); Captchala.init({ appKey: 'YOUR_APP_KEY', serverToken, // single-use, short-lived product: 'popup', action: 'login', }) .appendTo('#captcha-container') .onSuccess(res => submitForm(res.token)); ``` ### 보안 참고 - app_secret 을 프런트엔드 코드, 모바일 앱, 공개 저장소에 두지 마세요. 반드시 서버 측에만 보관해야 합니다. - 대시보드에서 "서버 발급 challenge token 요구"를 활성화하면 server_token 없이 시도된 모든 challenge를 거부할 수 있습니다. - ttl 은 짧게 유지하고(기본 300초, 최대 900초), token 유출 영향을 줄이기 위해 max_uses=1 을 권장합니다. ## 다음 단계 - [Web SDK](./web-sdk) - [API 레퍼런스](./api-reference)