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.