> ## Documentation Index
> Fetch the complete documentation index at: https://generaltranslation.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# 보안

> X API 개발자를 위한 보안 모범 사례

보안이 뛰어난 애플리케이션을 구축하면 사용자와 X 플랫폼 모두를 보호할 수 있습니다. 이 가이드는 X API 개발자를 위한 핵심 보안 모범 사례를 다룹니다.

***

<div id="core-requirements">
  ## 핵심 요구 사항
</div>

<CardGroup cols={2}>
  <Card title="TLS 필수" icon="lock">
    모든 API 요청은 HTTPS를 사용해야 합니다. 암호화되지 않은 일반 HTTP는 허용되지 않습니다.
  </Card>

  <Card title="자격 증명 보안" icon="key">
    API 키나 토큰을 클라이언트 측 코드, 로그 또는 리포지토리에 절대 노출하지 마세요.
  </Card>
</CardGroup>

***

<div id="protecting-credentials">
  ## 자격 증명 보호
</div>

API 키와 토큰은 앱의 열쇠와 같습니다. 다음과 같이 안전하게 보호하세요:

<Steps>
  <Step title="환경 변수 사용">
    자격 증명은 코드에 직접 작성하지 말고 환경 변수에 저장하세요.

    ```bash theme={null}
    export X_API_KEY="your-api-key"
    export X_API_SECRET="your-api-secret"
    ```
  </Step>

  <Step title="비밀 정보를 커밋하지 않기">
    자격 증명 파일을 `.gitignore`에 추가하세요. `git-secrets`와 같은 도구를 사용해 실수로 커밋되는 일을 방지하세요.
  </Step>

  <Step title="정기적으로 교체">
    키를 주기적으로 재발급하고, 유출이 의심되면 즉시 교체하세요.
  </Step>

  <Step title="최소 권한 사용">
    앱이 실제로 필요로 하는 OAuth 스코프만 요청하세요.
  </Step>
</Steps>

<div id="if-credentials-are-compromised">
  ### 자격 증명이 유출된 경우
</div>

1. [개발자 콘솔](https://console.x.com)에서 **즉시 재발급**합니다.
2. **이전 토큰을 폐기**합니다 — 재발급하면 이전 자격 증명은 자동으로 무효화됩니다.
3. **사용 내역을 점검**합니다 — 무단 API 활동이 있었는지 확인합니다.
4. **앱을 업데이트**합니다 — 모든 환경에 새 자격 증명을 배포합니다.

***

<div id="application-security">
  ## 애플리케이션 보안
</div>

<div id="input-validation">
  ### 입력 검증
</div>

사용자 입력값을 절대 신뢰하지 마세요. 데이터를 사용하기 전에 항상 검증하고 정제하세요:

```python theme={null}
# Bad - vulnerable to injection
query = f"from:{user_input}"

# Good - validate input first
import re
if re.match(r'^[a-zA-Z0-9_]{1,15}$', user_input):
    query = f"from:{user_input}"
```

<div id="output-encoding">
  ### 출력 인코딩
</div>

XSS를 방지하기 위해 HTML에 출력하기 전에 X API 데이터를 이스케이프 처리하세요:

```javascript theme={null}
// 나쁨 - XSS에 취약
element.innerHTML = tweet.text;

// 좋음 - HTML 이스케이프
element.textContent = tweet.text;
```

<div id="common-vulnerabilities-to-prevent">
  ### 예방해야 할 일반적인 취약점
</div>

| 취약점 (Vulnerability) | 예방 방법 (Prevention)                          |
| :------------------ | :------------------------------------------ |
| **XSS**             | 렌더링 전에 사용자가 생성한 모든 콘텐츠를 이스케이프 처리하세요         |
| **CSRF**            | 폼에 CSRF 방지 토큰을 사용하고 OAuth state 매개변수를 검증하세요 |
| **SQL Injection**   | 매개변수화된 쿼리를 사용하고, 사용자 입력을 문자열로 결합하지 마세요      |
| **Open redirects**  | 콜백 URL이 허용 목록에 있는지 검증하세요                    |

***

<div id="oauth-security">
  ## OAuth 보안
</div>

<div id="state-parameter">
  ### State 매개변수
</div>

CSRF를 방지하기 위해 OAuth 플로우에서는 항상 `state` 매개변수를 사용해야 합니다.

```python theme={null}
import secrets

# 인증 전 state 생성
state = secrets.token_urlsafe(32)
session['oauth_state'] = state

# 콜백 후 state 확인
if request.args.get('state') != session.get('oauth_state'):
    abort(403)  # State 불일치 - CSRF 공격 가능성
```

<div id="token-storage">
  ### 토큰 저장
</div>

| 토큰 유형                         | 저장 권장 사항                   |
| :---------------------------- | :------------------------- |
| **액세스 토큰 (Access tokens)**    | 암호화된 데이터베이스 또는 보안 금고       |
| **리프레시 토큰 (Refresh tokens)**  | 추가 액세스 제어가 적용된 암호화된 데이터베이스 |
| **Bearer 토큰 (Bearer tokens)** | 환경 변수 또는 보안 설정             |

***

<div id="secure-development-practices">
  ## 보안 개발 모범 사례
</div>

<CardGroup cols={2}>
  <Card title="보안 감사" icon="magnifying-glass">
    정기적으로 보안 검토와 침투 테스트를 수행하세요.
  </Card>

  <Card title="종속성 스캔" icon="box">
    종속성을 최신 상태로 유지하세요. 취약한 패키지를 탐지하는 도구를 사용하세요.
  </Card>

  <Card title="로깅" icon="file-lines">
    보안 이벤트는 로깅하되, 인증 정보나 민감한 데이터는 절대 로그에 남기지 마세요.
  </Card>

  <Card title="모니터링" icon="chart-line">
    비정상적인 API 사용 패턴에 대한 알림을 설정하세요.
  </Card>
</CardGroup>

***

<div id="reporting-security-issues">
  ## 보안 문제 신고
</div>

X에 영향을 미치는 보안 취약점을 발견한 경우:

<Warning>
  **48시간 이내에 신고하세요.** X Developer Platform 사용자는 보안 사고가 의심된 시점으로부터 48시간을 넘기지 않고 X에 통지해야 합니다.
</Warning>

<CardGroup cols={2}>
  <Card title="X Bug Bounty" icon="bug" href="https://hackerone.com/twitter">
    HackerOne을 통해 X 시스템의 취약점을 신고하세요.
  </Card>

  <Card title="Your app incident" icon="triangle-exclamation" href="https://hackerone.com/twitter">
    X 데이터를 사용하는 앱이 침해된 경우, 동일한 채널을 통해 신고하세요.
  </Card>
</CardGroup>

***

<div id="compliance-checklist">
  ## 컴플라이언스 체크리스트
</div>

<Accordion title="X API 개발자를 위한 보안 요구 사항">
  * [ ] 모든 API 요청에 TLS/HTTPS 사용
  * [ ] 인증 정보를 안전하게 저장 (코드나 로그에 저장하지 않음)
  * [ ] 사용자 토큰을 저장 시 암호화
  * [ ] 사용자 제공 데이터에 대한 입력 검증 수행
  * [ ] XSS 방지를 위한 출력 인코딩 적용
  * [ ] OAuth 플로우에 대한 CSRF 방지 적용
  * [ ] 보안 로깅 활성화 (민감한 데이터 제외)
  * [ ] 사고 대응 계획 문서화
  * [ ] 의존성 정기적으로 업데이트
  * [ ] 최소한의 OAuth 스코프만 요청
</Accordion>

***

<div id="resources">
  ## 리소스
</div>

<CardGroup cols={2}>
  <Card title="인증 가이드" icon="key" href="/ko/resources/fundamentals/authentication/overview">
    OAuth를 올바르게 구현하세요.
  </Card>

  <Card title="App 권한" icon="shield-check" href="/ko/resources/fundamentals/developer-apps#app-permissions">
    필요한 최소 권한만 설정하세요.
  </Card>
</CardGroup>
