---
type: explanation
title: 보안
summary: 키의 보호를 어떻게 조율하는지, 그리고 더 강하게와 더 빠르게 사이에서 어떻게 고르는지.
---

사이트 키의 **보안** 페이지는 챌린지가 얼마나 어려운지, 그리고 어떤 요청이 그것에 닿도록 허용되는지를 정합니다. 기본값은 합리적인 중간입니다; 이 페이지는 언제 그것에서 벗어날지, 그리고 어느 쪽으로 갈지에 관한 것입니다.

## 여기서 시작하세요

대부분의 사이트는 기본값을 그대로 두어야 합니다. 이유가 있을 때 아래 손잡이로 손을 뻗으세요:

- **활발한 남용을 받고 있거나, 폼이 고가치일 때**(가입, 결제, 비밀번호 재설정): 보호를 올리세요. **난이도**를 올리고, **난독화 수준**을 올리고, **자동화 브라우저 차단**을 켜세요. 약간의 방문자 연산과 얼마간의 서버 CPU를 훨씬 더 높은 벽과 맞바꿉니다.
- **속도와 전환이 가장 중요하고, 위험이 낮을 때**(마케팅 페이지의 뉴스레터 박스): 보호를 가볍게 두세요. **난이도**를 낮게, **요청당 챌린지**를 1로 두어, 저렴한 폰에서도 챌린지가 깃털처럼 가볍게.

이 페이지의 나머지는 각 손잡이와 그것을 어느 쪽으로 돌릴지입니다.

## 게임 요구하기

여기서 가장 강한 제어는, 조용한 백그라운드 확인을 통과하는 것만이 아니라, 방문자가 통과하려면 게임을 하도록 요구하는 것입니다. 여기 보안 페이지에서 **검증에 게임 요구**를 켜면, 모든 방문자가 이 키에 등록된 게임 중 하나를 풀어야 합니다. 서버가 각 방문자가 어떤 게임을 받을지 고르니, 건너뛰거나 바꿀 수 없습니다.

키가 쓸 수 있는 게임을 등록하며, 게이트가 자신을 온전히 설명하는 곳도 거기, 키의 [게임과 게임 게이트](/docs/site-keys/games) 페이지입니다. 게임이 최소 하나 등록되기 전에는 게이트를 켤 수 없습니다. 그것을 꺼 두는 것이 덜 안전한 선택입니다: 키는 게임을 하지 않고도 통과될 수 있습니다.

## 미리보기 모드

당신이 아직 통합을 만드는 동안, **미리보기 모드** 는 이 키의 모든 검증을 자동으로 승인하므로, 매번 진짜 챌린지를 풀지 않고도 위젯과 당신의 `/siteverify` 백엔드를 연결할 수 있습니다. 위젯과 요구된 어떤 게임도 방문자가 보는 그대로 계속 표시되고, 판정만 통과로 강제되며, 각 세션은 미리보기로 표시됩니다. 이는 그 키의 봇 보호를 **끄므로**, 출시하기 전에 다시 끄세요. 자세한 내용은 [미리보기 모드](/docs/site-keys/preview-mode).

## Proof of work: 난이도와 요청당 챌린지

Proof of work는 브라우저가 작은 퍼즐을 풀게 해 대규모 남용이 비싸지게 합니다([proof of work](/docs/understanding-caputchin/proof-of-work)를 보세요).

- **난이도**(1에서 8)는 각 퍼즐이 얼마나 어려운지를 정합니다. 높을수록 공격자에게 더 비싸지만, 방문자의 기기에도 더 비싸며, 저사양 폰은 범위의 위쪽에서 그것을 느낍니다. 기본값에서 시작하고, 실제로 남용이 보일 때만 올리세요.
- **요청당 챌린지**(1에서 500)는 여러 풀이를 한 번에 요청해 비용을 곱합니다. 더 쌓을 구체적 이유가 없다면 1로 두세요.

브라우저는 이 퍼즐을 Web Worker에서 푸니, 당신의 페이지 Content-Security-Policy는 워커를 위해 `blob:`을 허용해야 합니다(`worker-src blob:`); 이것은 필수입니다. `script-src`에서 `'wasm-unsafe-eval'`을 허용하면 풀이기가 추가로 빠른 WebAssembly로 돌지만, 그것은 선택입니다: 그것 없이는 풀이기가 같은 Worker 안에서 더 느린 순수 JavaScript 구현으로 물러나며 검증은 여전히 동작합니다. 전체 호스트 페이지 정책은 [게임 샌드박싱](/docs/understanding-caputchin/game-sandboxing#the-csp-you-set-on-your-own-page)을 보세요.

## 계측: 난독화 수준과 자동화 브라우저 차단

계측은 방문자의 브라우저에서 작은 프로그램을 돌려, 스크립트가 아니라 진짜 브라우저가 챌린지를 풀었는지 확인합니다([계측](/docs/understanding-caputchin/instrumentation)을 보세요). 기본으로 켜져 있으며, 진짜 브라우저를 자동화된 것과 구별하는 유일한 계층입니다.

- **계측**은 키별로 **끌** 수 있습니다. 거의 모든 사이트에서 켜 두세요. 당신의 위젯을 임베드하는 페이지가 `'unsafe-eval'`을 허용할 수 없는 Content-Security-Policy를 돌릴 때만 끄세요(계측 프로그램이 그것을 필요로 합니다, 아래 참고). 그것을 끄면 키는 더 이상 자동화 브라우저를 탐지할 수 없으며, proof of work와 모든 필수 게임은 여전히 돌지만, 아래 두 설정은 적용을 멈춥니다.
- **난독화 수준**(1에서 10)은 브라우저 내 프로그램이 역공학하기 얼마나 어려운지입니다. 높을수록 강하지만 서버 CPU를 더 씁니다. 기본값이 대부분의 사이트에 맞습니다; 표적 공격자의 잦은 표적이라면 올리세요.
- **자동화 브라우저 차단**은 탐지된 헤드리스와 WebDriver 클라이언트를 단호히 거부합니다. 정당한 자동화가 당신의 폼에 결코 닿지 않는다면 **켜세요**. 정당한 봇(당신 자신의 모니터링, 파트너 연동, 접근성 도구)을 기대한다면 **꺼 두세요**, 그것들도 차단할 것이기 때문입니다.

### Content-Security-Policy

계측 프로그램은 방문자의 브라우저에서 `eval`을 돌리니, 당신의 위젯을 임베드하는 페이지는 그 `script-src`에서 `'unsafe-eval'`을 허용해야 합니다. 이것은 하나의 단단한 CSP 요건이며 대체가 없습니다: `'unsafe-eval'`이 차단되면, 검증이 시간 초과되고 브라우저 콘솔에 `[cap] Instrumentation failed`가 보입니다. 두 선택이 있습니다: 위젯을 호스팅하는 페이지에서 `'unsafe-eval'`을 허용하거나, **계측**을 꺼서(위) 그 요건을 없애거나. 호스트 페이지의 CSP가 필요로 하는 것의 전체 목록은 [게임 샌드박싱](/docs/understanding-caputchin/game-sandboxing#the-csp-you-set-on-your-own-page)에 있습니다.

## 필수 헤더

모든 요청이 특정 헤더를 지니도록 요구할 수 있습니다. 대부분의 사이트는 이것이 필요 없습니다; 당신 자신의 클라이언트가 늘 게이트로 삼을 수 있는 헤더를 보낼 때, 값싼 추가 필터로 유용합니다.

당신이 요구할 수 **없는** 것은, 요청이 검증에 닿기 전에 Caputchin이 프라이버시를 위해 제거하는 헤더입니다. 그것들은 방문자를 식별하며, Caputchin의 자세는 방문자별 데이터를 수집하지 않는 것이라, 플랫폼 경계에서 그것들을 떨굽니다:

| 제거되는 헤더 | 왜 떨궈지는가 |
|---|---|
| `cf-connecting-ip` | Cloudflare가 설정한 방문자의 IP. 경계를 넘는 일이 없으니, Caputchin은 그것을 저장하지도, 대조하지도 않습니다. |
| `x-forwarded-for` | 프록시를 거쳐 보이는 방문자의 IP. 같은 이유. |
| `x-real-ip` | 상류 프록시에서 온 방문자의 IP. 같은 이유. |
| `user-agent` | 방문자의 브라우저와 기기를 식별하는 방문자의 User-Agent 문자열. |
| `sec-ch-ua*`(모든 Sec-CH-UA 클라이언트 힌트: `sec-ch-ua`, `sec-ch-ua-platform`, `sec-ch-ua-mobile` 등) | User-Agent의 구조화된 형태. 같은 프라이버시 경계. |

이들 중 하나를 요구하면 그것이 결코 도착하지 않으니 모든 요청을 차단하게 되므로, 플랫폼은 당신이 키를 망가뜨리게 두는 대신 그 구성을 거부합니다.

## 속도 제한과 CORS 오리진

- **초당 최대 요청**은 키가 얼마나 빠르게 요청을 받을지 상한을 둡니다. 진짜로 트래픽이 높다면 올리고; 두들겨 맞는 키를 조이려면 낮추세요.
- **CORS 오리진**은 당신의 오리진 허용 목록으로, 퍼즐이 돌기도 전에 서버 측에서 강제됩니다. `localhost`에서 테스트하는 동안에는 비워 두세요; 라이브로 가기 전에, 당신 자신의 사이트만 키를 쓸 수 있도록 진짜 오리진을 더하세요.

## 함께 보기

- 만들고 테스트하는 동안 모든 검증을 자동으로 승인하려면 [미리보기 모드](/docs/site-keys/preview-mode).
- 게임을 등록하고 검증에 하나를 요구하려면 [게임과 게임 게이트](/docs/site-keys/games).
- 키의 나머지는 [사이트 키](/docs/site-keys/overview).
- 당신의 설정이 맞는 트래픽을 멈추는지 보려면 [통계와 세션](/docs/site-keys/statistics).
