يتحكم مفتاح CaptchaAI API في الوصول إلى رصيدك. المفتاح المسرب يعني الاستخدام غير المصرح به واستنزاف الأموال. يغطي هذا الدليل القائمة البيضاء لعناوين IP والتخزين الآمن والتحكم في الوصول.
التهديدات الرئيسية لواجهة برمجة التطبيقات
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
تخزين المفتاح الآمن
أبدا مفاتيح الرمز الثابت
# 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
# .env (add to .gitignore!)
CAPTCHAAI_API_KEY=your_api_key_here
.gitignore
# Always ignore .env files
.env
.env.local
.env.production
التكوين القائم على البيئة
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}")
دوران المفتاح
قم بتدوير مفاتيح API بشكل دوري:
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()
طلب التحقق من الصحة
التحقق من صحة الطلبات قبل إرسالها لمنع التعرض غير المقصود للمفتاح:
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}")
التسجيل دون تعريض المفاتيح
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 Secrets
بالنسبة لعمليات النشر في حاويات:
# 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 الأمن
GitHub Actions
# .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
لا تقم مطلقًا بتسجيل السر أو تكراره في إخراج CI.
استكشاف الأخطاء وإصلاحها
| المشكلة | السبب | الإجراء |
|---|---|---|
ERROR_WRONG_USER_KEY |
المفتاح غير صحيح أو منتهي الصلاحية | التحقق من المفتاح من لوحة معلومات CaptchaAI |
| استنزاف غير متوقع للرصيد | تم تسريب المفتاح أو مشاركته | قم بتدوير المفتاح على الفور، للوصول إلى التدقيق |
| يعمل المفتاح محليًا ولكن ليس في CI | لم يتم تعيين متغير البيئة | أضف إلى أسرار CI/CD |
| مفتاح في تاريخ جيت | ملف .env الملتزم | قم بتدوير المفتاح، وأضف .env إلى .gitignore، واستخدم git filter-branch |
قائمة التحقق الأمنية
| ممارسة | الحالة |
|---|---|
| مفتاح API في متغير البيئة | ✅ |
| تمت إضافة .env إلى .gitignore | ✅ |
| لا توجد مفاتيح في التعليمات البرمجية المصدر | ✅ |
| تم تنقيح المفاتيح في السجلات | ✅ |
| يستخدم CI/CD مدير الأسرار | ✅ |
| جدول دوران المفاتيح | ✅ |
| مراقبة الرصيد نشطة | ✅ |
الأسئلة الشائعة
ماذا لو تم تسريب مفتاح API الخاص بي؟
قم بإنشاء مفتاح جديد على الفور من لوحة معلومات CaptchaAI. قم بتحديث كافة التطبيقات باستخدام المفتاح القديم. التحقق من رصيدك للاستخدام غير المصرح به.
هل يمكنني تقييد مفتاح API بواسطة عنوان IP؟
تحقق من لوحة معلومات CaptchaAI الخاصة بك للتعرف على إعدادات تقييد IP. إذا كان ذلك متاحًا، قم بإدراج عناوين IP الخاصة بخادمك فقط في القائمة البيضاء لمنع الاستخدام غير المصرح به.
هل يجب علي استخدام مفاتيح مختلفة للتطوير والإنتاج؟
نعم. استخدم مفاتيح منفصلة للتطوير والتدريج والإنتاج. وهذا يحد من نصف قطر الانفجار في حالة تسرب مفتاح التطوير.
أدلة ذات صلة
- مرجع رموز أخطاء CaptchaAI: الدليل الكامل والإصلاحات
- حدود الطلب المتزامن CaptchaAI: التشخيص والإصلاحات
- حماية استثمارك -قم بتأمين مفتاح CaptchaAI API الخاص بكاليوم.*