メインコンテンツへスキップ
安全なアプリケーションを構築することは、ユーザーと X プラットフォームの双方を保護するうえで重要です。このガイドでは、X API 開発者にとって不可欠なセキュリティ対策について説明します。

コア要件

TLS が必須

すべての API リクエストは HTTPS を使用する必要があります。平文の HTTP は拒否されます。

認証情報のセキュリティ

API キーやトークンをクライアントサイドのコード、ログ、リポジトリで決して公開しないでください。

認証情報の保護

API key やトークンはあなたの App への「鍵」です。次の点に注意して安全に管理してください:
1

環境変数を使用する

認証情報はコード内ではなく環境変数に保存します。
export X_API_KEY="your-api-key"
export X_API_SECRET="your-api-secret"
2

シークレットを絶対にコミットしない

認証情報ファイルを .gitignore に追加します。git-secrets のようなツールを使って、誤ってコミットしてしまうことを防ぎます。
3

定期的にローテーションする

キーは定期的に、また侵害が疑われる場合には直ちに再発行します。
4

最小限の権限にとどめる

App が実際に必要とする OAuth スコープのみをリクエストします。

認証情報が漏えいした場合

  1. 開発者コンソールただちに再生成する
  2. 古いトークンを失効させる — 再生成により古い認証情報は自動的に無効化される
  3. 利用状況を監査する — 不正な API アクティビティがないか確認する
  4. アプリを更新する — すべての環境に新しい認証情報をデプロイする

アプリケーションのセキュリティ

入力検証

ユーザーからの入力を決して信用しないでください。使用する前に、すべてのデータを必ず検証し、サニタイズしてください。
# 悪い例 - インジェクション攻撃に対して脆弱
query = f"from:{user_input}"

# 良い例 - 最初に入力を検証
import re
if re.match(r'^[a-zA-Z0-9_]{1,15}$', user_input):
    query = f"from:{user_input}"

出力のエンコード

XSS を防ぐために、HTML に出力する前に X API のデータをエスケープしてください。
// 悪い例 - XSSに対して脆弱
element.innerHTML = tweet.text;

// 良い例 - HTMLをエスケープ
element.textContent = tweet.text;

防ぐべき代表的な脆弱性

脆弱性対策
XSSレンダリング前に、ユーザーが生成したコンテンツをすべてエスケープする
CSRFフォームで CSRF 対策用トークンを使用し、OAuth の state パラメータを検証する
SQL Injectionパラメータ化されたクエリを使用し、ユーザー入力を決して連結しない
Open redirectsコールバック URL を許可リストと照合して検証する

OAuth セキュリティ

state パラメータ

CSRF を防ぐため、OAuth フローでは常に state パラメータを使用してください。
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攻撃の可能性

トークンの保存

トークンの種類保存先の推奨
Access tokens暗号化されたデータベースまたはセキュアなボルト
Refresh tokens追加のアクセス制御を施した暗号化されたデータベース
Bearer tokens環境変数またはセキュアな設定

セキュアな開発プラクティス

セキュリティ監査

定期的にセキュリティレビューとペネトレーションテストを実施してください。

依存関係のスキャン

依存関係を常に最新の状態に保ってください。脆弱なパッケージを検出するツールを使用してください。

ロギング

セキュリティイベントはログに記録しますが、認証情報や機密データは決してログに残さないでください。

モニタリング

異常な API 利用パターンに対するアラートを設定してください。

セキュリティ上の問題の報告

Xに影響するセキュリティ脆弱性を発見した場合:
48時間以内に報告してください。 X Developer Platform のユーザーは、セキュリティインシデントが疑われた時点から48時間以内に X に通知しなければなりません。

X Bug Bounty

HackerOne を通じて、X のシステムにおける脆弱性を報告してください。

Your app incident

X データを利用する自分の App が侵害された場合も、同じ窓口から報告してください。

コンプライアンスチェックリスト

  • すべての API リクエストで TLS/HTTPS を使用している
  • 認証情報が安全に保管されている (コードやログ内に含めない)
  • ユーザートークンが保存時に暗号化されている
  • すべてのユーザー入力データに対して入力検証を実施している
  • XSS を防止するための出力エンコードを行っている
  • OAuth フローで CSRF 対策を実装している
  • セキュリティログが有効化されている (機密データは含めない)
  • インシデント対応計画が文書化されている
  • 依存関係が定期的に更新されている
  • 必要最小限の OAuth スコープのみを要求している

リソース

認証ガイド

OAuth を正しく実装してください。

App の権限

必要最小限の権限のみを設定してください。