Khóa API CaptchaAI kiểm soát quyền truy cập vào số dư của bạn. Khóa bị rò rỉ có nghĩa là việc sử dụng trái phép và cạn kiệt tiền. Hướng dẫn này bao gồm danh sách IP trắng, lưu trữ an toàn và kiểm soát truy cập.
Các mối đe dọa chính API
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
Lưu trữ khóa an toàn
Không bao giờ khóa mã cứng
# 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"]
Tệp .env
# .env (add to .gitignore!)
CAPTCHAAI_API_KEY=your_api_key_here
.gitignore
# Always ignore .env files
.env
.env.local
.env.production
Cấu hình dựa trên môi trường
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}")
Xoay phím
Xoay khóa API định kỳ:
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()
Yêu cầu xác thực
Xác thực các yêu cầu trước khi gửi để ngăn chặn việc vô tình làm lộ khóa:
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}")
Ghi nhật ký mà không để lộ chìa khóa
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]
Bí mật Docker
Đối với việc triển khai trong container:
# 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 Bảo mật
Hành động GitHub
# .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
Không bao giờ ghi lại hoặc lặp lại bí mật trong đầu ra CI.
Khắc phục sự cố
| Vấn đề | Nguyên nhân | Cách xử lý |
|---|---|---|
ERROR_WRONG_USER_KEY |
Khóa không chính xác hoặc đã hết hạn | Xác minh khóa từ bảng điều khiển CaptchaAI |
| Mất cân bằng bất ngờ | Chìa khóa bị rò rỉ hoặc chia sẻ | Xoay chìa khóa ngay lập tức, kiểm tra quyền truy cập |
| Khóa hoạt động cục bộ nhưng không hoạt động trong CI | Biến môi trường chưa được đặt | Thêm vào bí mật CI/CD |
| Chìa khóa trong lịch sử Git | Tệp .env đã cam kết | Xoay phím, thêm .env vào .gitignore, sử dụng git filter-branch |
Danh sách kiểm tra bảo mật
| Thực hành | Trạng thái |
|---|---|
| Khóa API trong biến môi trường | ☠|
| .env đã được thêm vào .gitignore | ☠|
| Không có khóa trong mã nguồn | ☠|
| Các khóa được sắp xếp lại trong nhật ký | ☠|
| CI/CD sử dụng trình quản lý bí mật | ☠|
| Lịch trình luân chuyển chìa khóa | ☠|
| Giám sát số dư đang hoạt động | ☠|
Câu hỏi thường gặp
Điều gì xảy ra nếu khóa API của tôi bị rò rỉ?
Tạo khóa mới ngay lập tức từ bảng điều khiển CaptchaAI. Cập nhật tất cả các ứng dụng bằng key cũ. Kiểm tra số dư của bạn để phát hiện việc sử dụng trái phép.
Tôi có thể hạn chế khóa API theo địa chỉ IP không?
Kiểm tra bảng điều khiển CaptchaAI của bạn để biết cài đặt hạn chế IP. Nếu có, chỉ đưa IP máy chủ của bạn vào danh sách trắng để ngăn chặn việc sử dụng trái phép.
Tôi có nên sử dụng các khóa khác nhau để phát triển và sản xuất không?
Vâng. Sử dụng các khóa riêng biệt cho nhà phát triển, dàn dựng và sản xuất. Điều này giới hạn bán kính vụ nổ nếu khóa dev bị rò rỉ.
Hướng dẫn liên quan
Bảo vệ khoản đầu tư của bạn —bảo mật khóa API CaptchaAI của bạnHôm nay.