مفاتيح Hardcoding API في الكود المصدري تعني أن أي شخص لديه حق الوصول إلى المستودع - أو أي شخص يجد الكود الخاص بك في مستودع عام - لديه مفتاحك. تحافظ متغيرات البيئة على بيانات الاعتماد خارج التعليمات البرمجية والتحكم في الإصدار والسجلات.
ملف .env (التطوير المحلي)
قم بإنشاء ملف .env في جذر مشروعك:
CAPTCHAAI_API_KEY=your_actual_api_key_here
أضفه إلى .gitignore على الفور:
# .gitignore
.env
.env.local
.env.production
بايثون (Python دوتنف)
pip install python-dotenv
import os
from dotenv import load_dotenv
load_dotenv()
API_KEY = os.environ["CAPTCHAAI_API_KEY"]
# Use in API calls
import requests
resp = requests.post("https://ocr.captchaai.com/in.php", data={
"key": API_KEY,
"method": "userrecaptcha",
"googlekey": "6Le-SITEKEY",
"pageurl": "https://example.com",
"json": "1",
})
print(resp.json())
JavaScript (دوتينف)
npm install dotenv
require('dotenv').config();
const API_KEY = process.env.CAPTCHAAI_API_KEY;
if (!API_KEY) {
console.error('CAPTCHAAI_API_KEY not set');
process.exit(1);
}
// Use in API calls
const axios = require('axios');
const resp = await axios.post('https://ocr.captchaai.com/in.php', null, {
params: {
key: API_KEY,
method: 'userrecaptcha',
googlekey: '6Le-SITEKEY',
pageurl: 'https://example.com',
json: 1,
},
});
console.log(resp.data);
متغيرات بيئة النظام
قم بتعيين المتغيرات على مستوى نظام التشغيل بدلاً من استخدام ملفات .env:
لينكس / ماك
export CAPTCHAAI_API_KEY="your_actual_api_key_here"
# Persist across sessions — add to ~/.bashrc or ~/.zshrc
echo 'export CAPTCHAAI_API_KEY="your_actual_api_key_here"' >> ~/.bashrc
ويندوز (باورشيل)
$env:CAPTCHAAI_API_KEY = "your_actual_api_key_here"
# Persist permanently
[System.Environment]::SetEnvironmentVariable("CAPTCHAAI_API_KEY", "your_actual_api_key_here", "User")
عامل ميناء
متغير البيئة في تشغيل عامل الإرساء
docker run -e CAPTCHAAI_API_KEY="your_key" my-scraper
Docker Compose
# docker-compose.yml
services:
scraper:
image: my-scraper
environment:
- CAPTCHAAI_API_KEY=${CAPTCHAAI_API_KEY}
يشير ${CAPTCHAAI_API_KEY} إلى متغير بيئة المضيف - لا يظهر المفتاح مطلقًا في ملف الإنشاء.
Docker Secrets (سرب)
echo "your_actual_api_key_here" | docker secret create captchaai_key -
# docker-compose.yml (Swarm mode)
services:
scraper:
image: my-scraper
secrets:
- captchaai_key
secrets:
captchaai_key:
external: true
اقرأ في الكود:
with open("/run/secrets/captchaai_key") as f:
API_KEY = f.read().strip()
خطوط الأنابيب CI/CD
GitHub Actions
# .github/workflows/scrape.yml
jobs:
scrape:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: python scraper.py
env:
CAPTCHAAI_API_KEY: ${{ secrets.CAPTCHAAI_API_KEY }}
أضف السر في الإعدادات ← الأسرار والمتغيرات ← الإجراءات ← سر المستودع الجديد .
جيتلاب سي
# .gitlab-ci.yml
scrape:
script:
- python scraper.py
variables:
CAPTCHAAI_API_KEY: $CAPTCHAAI_API_KEY
أضف المتغير في **الإعدادات ← CI/CD ← المتغيرات ** مع تمكين خيار "ملثم".
التحقق من صحة عند بدء التشغيل
تحقق دائمًا من وجود المفتاح وعمله قبل تشغيل خط الأنابيب الخاص بك:
import os
import sys
import requests
API_KEY = os.environ.get("CAPTCHAAI_API_KEY")
if not API_KEY:
print("ERROR: CAPTCHAAI_API_KEY environment variable not set")
sys.exit(1)
# Verify key works
resp = requests.get("https://ocr.captchaai.com/res.php", params={
"key": API_KEY, "action": "getbalance", "json": "1"
}).json()
if resp["status"] != 1:
print(f"ERROR: Invalid API key — {resp['request']}")
sys.exit(1)
print(f"API key valid — balance: ${float(resp['request']):.2f}")
الأخطاء الشائعة
| خطأ | خطر | إصلاح |
|---|---|---|
إلزام .env بـ Git |
تم الكشف عن المفتاح في تاريخ الريبو | أضف .env إلى .gitignore قبل الالتزام الأول |
| طباعة مفتاح API في السجلات | المفتاح مرئي في مجمعات السجل | لا تقم أبدًا بتسجيل المفاتيح الكاملة - قم بإخفائها أو حذفها |
| الترميز الثابت في Dockerfile | مفتاح مخبوز في طبقات الصورة | استخدم ENV في وقت التشغيل، وليس في مراحل الإنشاء |
| مشاركة المفاتيح عبر chat/email | تم اعتراض المفتاح أو تسريبه | استخدم مدير الأسرار أو شارك عبر قناة آمنة |
الأسئلة الشائعة
هل يجب علي تشفير ملف .env؟
بالنسبة للتنمية المحلية، فإن .gitignore كافٍ. للإنتاج، استخدم مديرًا سريًا سحابيًا (AWS Secrets Manager، وGoogle Secret Manager، وAzure Key Vault) بدلاً من ملفات .env.
ماذا لو كان مفتاحي ملتزمًا بالفعل بـ Git؟
قم بتدوير المفتاح على الفور في لوحة معلومات CaptchaAI. يظل المفتاح القديم في سجل Git قابلاً للوصول حتى بعد حذف الملف.
هل يمكنني استخدام مفاتيح متعددة في ملف .env واحد؟
نعم. استخدم قيمًا مفصولة بفواصل أو مفاتيح مرقمة:
CAPTCHAAI_KEYS=key1,key2,key3
keys = os.environ["CAPTCHAAI_KEYS"].split(",")
قم بتأمين تكامل CaptchaAI الخاص بك من اليوم الأول
احصل على مفتاح API الخاص بك علىcaptchaai.com.