دروس API

القائمة البيضاء لـ CaptchaAI IP وأمان مفتاح API

يتحكم مفتاح 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 الخاصة بخادمك فقط في القائمة البيضاء لمنع الاستخدام غير المصرح به.

هل يجب علي استخدام مفاتيح مختلفة للتطوير والإنتاج؟

نعم. استخدم مفاتيح منفصلة للتطوير والتدريج والإنتاج. وهذا يحد من نصف قطر الانفجار في حالة تسرب مفتاح التطوير.


أدلة ذات صلة


التعليقات غير مفعّلة لهذا المقال.