API Eğitimleri

CaptchaAI IP Beyaz Listesine Alma ve API Anahtar Güvenliği

CaptchaAI API anahtarınız bakiyenize erişimi kontrol eder. Sızan bir anahtar, yetkisiz kullanım ve fonların boşaltılması anlamına gelir. Bu kılavuzda IP beyaz listesi, güvenli depolama ve erişim kontrolü ele alınmaktadır.


API Anahtar Tehditleri

Exposed API key:
  ├── Leaked in Git repository
  ├── Hardcoded in client-side code
  ├── Shared in documentation
  └── Visible in logs

Impact:
  ├── Balance drained by unauthorized users
  ├── Usage spikes from abuse
  └── Key disabled by service provider

Güvenli Anahtar Depolama

Asla Anahtarları Sabit Kodlama

# BAD — key in source code
API_KEY = "abc123def456"  # DO NOT DO THIS

# GOOD — environment variable
import os
API_KEY = os.environ["CAPTCHAAI_API_KEY"]

# GOOD — .env file (not committed to Git)
from dotenv import load_dotenv
load_dotenv()
API_KEY = os.environ["CAPTCHAAI_API_KEY"]

.env Dosyası

# .env (add to .gitignore!)
CAPTCHAAI_API_KEY=your_api_key_here

.gitignore

# Always ignore .env files
.env
.env.local
.env.production

Ortam Tabanlı Yapılandırma

import os


class CaptchaConfig:
    """Load CaptchaAI config from environment."""

    def __init__(self):
        self.api_key = os.environ.get("CAPTCHAAI_API_KEY")
        if not self.api_key:
            raise EnvironmentError(
                "CAPTCHAAI_API_KEY not set. "
                "Set it in your environment or .env file."
            )
        self.base_url = os.environ.get(
            "CAPTCHAAI_URL", "https://ocr.captchaai.com"
        )

    def validate(self):
        """Verify the API key works."""
        import requests
        resp = requests.get(f"{self.base_url}/res.php", params={
            "key": self.api_key,
            "action": "getbalance",
            "json": 1,
        }, timeout=10)
        data = resp.json()
        if data.get("status") != 1:
            raise RuntimeError(f"Invalid API key: {data.get('request')}")
        return float(data["request"])


# Usage
config = CaptchaConfig()
balance = config.validate()
print(f"Key valid, balance: ${balance:.2f}")

Anahtar Döndürme

API anahtarlarını periyodik olarak döndürün:

import os
import datetime


class KeyManager:
    """Manage API key rotation."""

    def __init__(self):
        self.primary_key = os.environ.get("CAPTCHAAI_API_KEY")
        self.secondary_key = os.environ.get("CAPTCHAAI_API_KEY_BACKUP")
        self.active_key = self.primary_key

    def get_key(self):
        return self.active_key

    def rotate(self):
        """Switch to secondary key."""
        if self.secondary_key:
            self.active_key = self.secondary_key
            print("Rotated to secondary key")
        else:
            print("No secondary key configured")

    def test_key(self, key):
        """Verify a key is valid."""
        import requests
        resp = requests.get("https://ocr.captchaai.com/res.php", params={
            "key": key, "action": "getbalance", "json": 1,
        }, timeout=10)
        return resp.json().get("status") == 1


# Usage
keys = KeyManager()

# If primary fails, rotate to secondary
if not keys.test_key(keys.get_key()):
    keys.rotate()

Doğrulama İste

Anahtarın yanlışlıkla açığa çıkmasını önlemek için istekleri göndermeden önce doğrulayın:

import requests
import logging

logger = logging.getLogger(__name__)


class SecureSolver:
    """Solver with security best practices."""

    def __init__(self, api_key):
        self.api_key = api_key
        self.base = "https://ocr.captchaai.com"

    def solve(self, method, **params):
        # Validate inputs
        self._validate_params(method, params)

        data = {"key": self.api_key, "method": method, "json": 1}
        data.update(params)

        # Log without exposing key
        logger.info(
            "Submitting %s solve for %s",
            method, params.get("pageurl", "unknown"),
        )

        resp = requests.post(
            f"{self.base}/in.php", data=data, timeout=30,
        )
        return resp.json()

    def _validate_params(self, method, params):
        """Prevent common security mistakes."""
        # Ensure pageurl is a valid URL
        pageurl = params.get("pageurl", "")
        if pageurl and not pageurl.startswith(("http://", "https://")):
            raise ValueError(f"Invalid pageurl: {pageurl}")

        # Ensure method is valid
        valid_methods = {
            "userrecaptcha", "turnstile", "geetest",
            "base64", "post", "bls", "cloudflare_challenge",
        }
        if method not in valid_methods:
            raise ValueError(f"Unknown method: {method}")

Anahtarları Göstermeden Günlük Kaydı

import logging
import re

logger = logging.getLogger(__name__)


class SafeFormatter(logging.Formatter):
    """Redact API keys from log messages."""

    KEY_PATTERN = re.compile(r'[a-f0-9]{32}', re.IGNORECASE)

    def format(self, record):
        msg = super().format(record)
        return self.KEY_PATTERN.sub("[REDACTED]", msg)


# Configure safe logging
handler = logging.StreamHandler()
handler.setFormatter(SafeFormatter("%(levelname)s: %(message)s"))
logger.addHandler(handler)
logger.setLevel(logging.INFO)

# Key is automatically redacted in logs
logger.info(f"Using key: abc123def456ghi789jkl012mno345pq")
# Output: INFO: Using key: [REDACTED]

Docker'ın Sırları

Container mimarisine alınmış dağıtımlar için:

# Dockerfile — DO NOT embed keys here
FROM python:3.11-slim
WORKDIR /app
COPY . .
RUN pip install requests
CMD ["python", "solver.py"]
# docker-compose.yml
services:
  solver:
    build: .
    environment:

      - CAPTCHAAI_API_KEY=${CAPTCHAAI_API_KEY}
    # Or use Docker secrets:
    secrets:

      - captchaai_key

secrets:
  captchaai_key:
    file: ./secrets/captchaai_key.txt

CI/CD Güvenliği

GitHub Eylemleri

# .github/workflows/test.yml
jobs:
  test:
    runs-on: ubuntu-latest
    steps:

      - uses: actions/checkout@v4
      - name: Run tests
        env:
          CAPTCHAAI_API_KEY: ${{ secrets.CAPTCHAAI_API_KEY }}
        run: python test_solver.py

Gizli bilgiyi asla CI çıkışına kaydetmeyin veya yankılamayın.


Sorun giderme

Sorun Sebep Düzeltme
ERROR_WRONG_USER_KEY Anahtar yanlış veya süresi dolmuş CaptchaAI kontrol panelinden anahtarı doğrulayın
Beklenmedik denge kaybı Anahtar sızdırıldı veya paylaşıldı Anahtarı hemen döndürün, erişimi denetleyin
Anahtar yerel olarak çalışıyor ancak CI'da çalışmıyor Ortam değişkeni ayarlanmadı CI/CD sırlarına ekle
Git geçmişini girin Taahhüt edilen .env dosyası Anahtarı döndürün, .gitignore'a .env'yi ekleyin, git filter-branch'yi kullanın

Güvenlik Kontrol Listesi

Alıştırma Durum
Ortam değişkenindeki API anahtarı â˜
.env, .gitignore'a eklendi â˜
Kaynak kodunda anahtar yok â˜
Günlüklerdeki anahtarlar düzenlendi â˜
CI/CD sır yöneticisini kullanıyor â˜
Anahtar rotasyon programı â˜
Bakiye izleme aktif â˜

SSS

API anahtarım sızdırılırsa ne olur?

CaptchaAI kontrol panelinden hemen yeni bir anahtar oluşturun. Eski anahtarı kullanarak tüm uygulamaları güncelleyin. Yetkisiz kullanıma karşı bakiyenizi kontrol edin.

API anahtarını IP adresine göre kısıtlayabilir miyim?

IP kısıtlama ayarları için CaptchaAI kontrol panelinizi kontrol edin. Yetkisiz kullanımı önlemek için mümkünse yalnızca sunucu IP'lerinizi beyaz listeye ekleyin.

Geliştirme ve üretim için farklı anahtarlar mı kullanmalıyım?

Evet. Geliştirme, hazırlama ve üretim için ayrı anahtarlar kullanın. Bu, bir geliştirme anahtarının sızdırılması durumunda patlama yarıçapını sınırlar.


İlgili Kılavuzlar


Yatırımınızı koruyun —CaptchaAI API anahtarınızı güvence altına alınBugün.

Bu makale için yorumlar devre dışı bırakılmıştır.