Awesome Free LLM APIs IR

جلوگیری از افشای API Key؛ راهنمای امنیت کلید در پروژه‌های LLM

راهنمای عملی جلوگیری از افشای API Key در پروژه‌های هوش مصنوعی؛ همراه با مدیریت متغیرهای محیطی، بررسی Git، امنیت سرور و بهترین شیوه‌ها.

آخرین بازبینی: 2026-08-05

پاسخ سریع: API Key مثل رمز عبور حساب شماست. اگر در GitHub، لاگ سرور یا کد منبع منتشر شود، هر کسی می‌تواند از سهمیه شما سوءاستفاده کند. API Key باید فقط در متغیرهای محیطی ذخیره شود، هرگز در کد قرار نگیرد و قبل از commit بررسی شود.

آخرین داده‌های تاریخ‌دار سرویس‌ها در کاتالوگ رایگان LLM قرار دارد.

چرا افشای API Key خطرناک است؟

  • مصرف سهمیه: شخص دیگری از سهمیه رایگان شما استفاده می‌کند
  • هزینه: اگر حساب پولی داشته باشید، ممکن است هزینه‌های بالایی ایجاد شود
  • سوءاستفاده: API Key ممکن است برای اهداف نامناسب استفاده شود
  • مسدودیت: Provider ممکن است حساب را به دلیل الگوی غیرعادی مسدود کند

رایج‌ترین راه‌های افشای API Key

۱. قرار دادن در کد منبع

# ❌ اشتباه
api_key = "YOUR_API_KEY_HERE"

# ✅ درست
import os
api_key = os.environ["API_KEY"]

۲. ارسال به GitHub بدون بررسی

  • .env فایلی است که API Key را نگه می‌دارد
  • .gitignore باید .env را شامل شود
  • قبل از commit، git diff را بررسی کنید

۳. لاگ سرور

  • API Key ممکن است در لاگ‌های HTTP Header ذخیره شود
  • لاگ‌ها ممکن است به دیگران قابل دسترسی باشند
  • از لاگ‌کردن Header Authorization خودداری کنید

۴. متغیرهای محیطی در Docker

  • docker inspect ممکن است متغیرهای محیطی را نشان دهد
  • از Docker Secrets یا Volume برای فایل‌های حساس استفاده کنید

بهترین شیوه‌ها

۱. ذخیره در متغیرهای محیطی

# فایل .env (هرگز commit نشود)
API_KEY=YOUR_API_KEY_HERE
MODEL_NAME=llama-3.1-8b
BASE_URL=https://api.groq.com/openai/v1
# خواندن از متغیرهای محیطی
import os
api_key = os.environ.get("API_KEY")
if not api_key:
    raise ValueError("API_KEY is not set")

۲. بررسی .gitignore

مطمئن شوید این خطوط در .gitignore وجود دارند:

.env
.env.local
.env.*.local

۳. بررسی قبل از commit

# بررسی آیا .env در staging هست
git status

# بررسی آیا API Key در کد هست
grep -r "sk-" --include="*.py" --include="*.js" .
grep -r "API_KEY" --include="*.py" --include="*.js" .

۴. استفاده از Secret Manager

برای پروژه‌های تیمی یا Production:

  • AWS Secrets Manager
  • Google Secret Manager
  • HashiCorp Vault
  • GitHub Actions Secrets

۵. چرخش منظم کلید

  • هر چند ماه، API Key جدید بسازید
  • کلید قدسی را از Provider حذف کنید
  • اپلیکیشن‌ها را با کلید جدید به‌روز کنید

نکات ویژه برای پروژه‌های LLM

OpenAI-compatible API

# ✅ درست: از متغیر محیطی
import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["API_KEY"],
    base_url=os.environ.get("BASE_URL", "https://api.groq.com/openai/v1")
)

چند Provider

اگر از چند Provider استفاده می‌کنید، هر کلید را در متغیر جداگانه ذخیره کنید:

GROQ_API_KEY=...
TOGETHER_API_KEY=...
FIREWORKS_API_KEY=...

پروژه‌های دانشجویی

  • از API Key شخصی استفاده نکنید
  • از Free Tier استفاده کنید
  • API Key را در گروه به اشتراک نگذارید

محدودسازی نرخ درخواست و جلوگیری از مصرف بیش از حد

محدودسازی نرخ درخواست اقدامی حیاتی هنگام استفاده از APIهای LLM است. این کار هم بودجه شما و هم رابطه شما با Provider را محافظت می‌کند. اکثر Providerها سهمیه را در سطح حساب اعمال می‌کنند و عبور از آن باعث خطای HTTP 429 یا موقتی شدن حساب می‌شود.

پیاده‌سازی Rate Limiting در سمت کلاینت

از الگوریتم‌های Token Bucket یا Sliding Window استفاده کنید. در Node.js با Express، از middleware مانند express-rate-limit استفاده کنید. تنظیمات windowMs و max را بر اساس محدودیت‌های واقعی Provider تنظیم کنید. مثلاً اگر Groq اجازه 30 درخواست در دقیقه می‌دهد، سقف کلاینت را روی 25 تنظیم کنید تا فضای کافی باقی بماند.

صف‌بندی درخواست‌ها در سمت سرور

برای برنامه‌هایی که کاربران متعددی را سرویس می‌دهند، یک صف درخواست پیاده‌سازی کنید تا درخواست‌های API را در طول زمان توزیع کند. این کار مانع از مصرف کل سهمیه توسط یک کاربر می‌شود و مدل هزینه قابل پیش‌بینی‌تری فراهم می‌کند.

پیکربندی CORS و مبدأهای مجاز

پیکربندی CORS اغلب هنگام افشا کردن endpoints APIهای LLM نادیده گرفته می‌شود. اگر سرویس پروکسی یا wrapper شما درخواست‌های مرورگر را می‌پذیرد، تنظیمات CORS نادرست می‌تواند کلیدهای API شما را در معرض وب‌سایت‌های مخرب قرار دهد.

محدود کردن مبدأها

CORS را طوری پیکربندی کنید که فقط از مبدأهای شناخته‌شده درخواست بپذیرد. هرگز در پروداکشن از Access-Control-Allow-Origin: * استفاده نکنید وقتی endpoint شما نیاز به احراز هویت دارد. در عوض، یک لیست سفید صریح از مبدأهای مجاز نگهداری کنید.

شناسایی و چرخش کلیدهای نشت‌یافته

حتی با بهترین اقدامات پیشگیرانه، ممکن است کلیدهای API از طریق فایل‌های لاگ، پیام‌های خطا یا ماشین‌های توسعه آلوده فاش شوند. داشتن یک برنامه شناسایی و واکنش ضروری است.

GitHub Secret Scanning

GitHub Secret Scanning را برای مخزن‌های خود فعال کنید. وقتی فعال باشد، GitHub به‌طور خودکار pushها را برای فرمت‌های رمز شناخته‌شده اسکن می‌کند. وقتی تطابقی شناسایی شود، GitHub هم شما و هم صادرکننده کلید را مطلع می‌کند.

نظارت خودکار بر کلیدها

نظارت بر الگوهای غیرعادی استفاده API راه‌اندازی کنید. اکثر Providerها داشبوردهایی برای حجم درخواست‌ها، نرخ خطاها و توزیع جغرافیایی ارائه می‌دهند. هشدارهایی برای افزایش ناگهانی استفاده ایجاد کنید.

نقشه راه چرخش کلید

یک فرآیند مستند شده برای چرخش کلید نگهداری کنید. نقشه راه باید شامل نحوه تولید کلید جدید، استقرار آن در همه سرویس‌ها، تأیید عملکرد کلید جدید و حذف کلید قدیمی باشد.

نحوه ثبت‌نام

برای شروع استفاده از API Key به‌صورت امن:

  1. از کاتالوگ رایگان LLM یک Provider انتخاب کنید
  2. در وب‌سایت رسمی Provider ثبت‌نام کنید
  3. به بخش API Keys در داشبورد بروید
  4. یک کلید جدید با نام توصیفی بسازید (مثلاً "پروژه-آزمایشی")
  5. کلید را فوراً کپی کنید — اکثر Providerها فقط یک بار آن را نمایش می‌دهند
  6. آن را در فایل .env یا Secret Manager سیستم ذخیره کنید
  7. هرگز کلید را در چت، ایمیل یا مخزن‌های عمومی به اشتراک نگذارید

اولین درخواست API

پس از ذخیره امن کلید، آن را با یک درخواست ساده تست کنید:

curl -s https://api.groq.com/openai/v1/chat/completions \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "llama-3.1-8b-instant",
    "messages": [{"role": "user", "content": "سلام"}],
    "max_tokens": 10
  }'

اگر پاسخ شامل "choices" باشد، کلید شما کار می‌کند. اگر خطای 401 دریافت کردید، تنظیمات متغیر محیطی را بررسی کنید.

خطاهای رایج و رفع آنها

خطاعلتراه‌حل
401 Unauthorizedکلید نامعتبر یا منقضی شدهکلید را در داشبورد Provider مجدداً بسازید
429 Too Many RequestsRate Limit فعال شدهExponential Backoff اضافه کنید
فرمت نامعتبر API keyکلید دارای فاصله یا پیشوند اشتباهکلید را با دقت مجدداً کپی کنید
کلید در محیط یافت نشدمتغیر محیطی لود نشدهاز dotenv در پایتون استفاده کنید
خطای CORS در مرورگرکلید در کد فرانت‌اند قرار داردکلید را به بک‌اند منتقل کنید

چه زمانی از این ارائه‌دهنده استفاده نکنیم

  • دستگاه‌های مشترک: هرگز API Key را در کامپیوترهای عمومی ذخیره نکنید
  • شبکه‌های نامطمئن: بدون HTTPS درخواست API ارسال نکنید
  • مخزن‌های عمومی: هرگز کلیدهای واقعی را commit نکنید
  • برنامه‌های سمت کلاینت: کلیدها در JavaScript مرورگر همیشه قابل مشاهده هستند
  • محیط‌های تیمی بدون Secret Manager: فایل‌های .env مشترک خطر افشای کلید ایجاد می‌کنند

منابع رسمی بررسی‌شده

وضعیت ایران و نکات ویژه برای کاربران

  • برخی Providerها ممکن است دسترسی API را بر اساس منطقه جغرافیایی ثبت کنند؛ سیاست حریم‌خصوصی Provider را بررسی کنید
  • از VPN یا پروکسی با احتیاط استفاده کنید — برخی Providerها IPهای VPN را مسدود می‌کنند
  • شماره تلفن ایرانی ممکن است برای ثبت‌نام در همه پلتفرم‌ها پذیرفته نشود
  • Providerهایی را در نظر بگیرید که نیاز به کارت بانکی ندارند تا از افشای اطلاعات مالی جلوگیری شود
  • استفاده API خود را به‌طور منظم پایش کنید — افزایش‌های غیرعادی ممکن است نشان‌دهنده کلید به خطر افتاده باشد

جمع‌بندی

امنیت API Key یک مسئولیت مستمر است. قبل از هر commit، کد را بررسی کنید. از متغیرهای محیطی استفاده کنید. کلیدها را منظم چرخش دهید.

برای بررسی وضعیت امنیت و دسترسی Providerها، کاتالوگ رایگان LLM را مشاهده کنید. فایل‌های منبع و گزارش مشکلات در مخزن GitHub در دسترس هستند.

راهنماهای مرتبط

  • [راهنمای تست امن API از ایران](secure-api-testing-iran.md) — نمونه درخواست‌ها و نکات شبکه
  • [محدودیت نرخ درخواست و خطای 429](llm-api-rate-limit-429.md) — مدیریت Rate Limit
  • [رفع خطاهای 401 و 403 و Model Not Found](fix-llm-api-401-403-model-not-found.md) — عیب‌یابی کلید و مدل