کلید API هوش مصنوعی باید فقط روی سرور باشد. مرورگر بازدیدکننده هیچوقت نباید آن را ببیند. ساختار درست این است: مرورگر به سرور شما درخواست میدهد، سرور شما (که کلید را دارد) با سرویس هوش مصنوعی حرف میزند و جواب را برمیگرداند. هر کلیدی که در فایل جاوااسکریپت سایت باشد، ظرف چند ساعت پیدا و مصرف میشود.
درست و غلط
| غلط | درست |
|---|---|
| مرورگر ← سرویس هوش مصنوعی (کلید در JS) | مرورگر ← سرور شما ← سرویس هوش مصنوعی |
| کلید در مخزن Git | کلید در متغیر محیطی یا فایل تنظیمات بیرون از وب |
| یک کلید برای همهی پروژهها | کلید جدا برای هر پروژه |
| بدون سقف مصرف | سقف ماهانه و هشدار |
کجا نگه داریم؟
هاست Node.js
در متغیرهای محیطی اپلیکیشن. در کد: process.env.AI_API_KEY.
PHP روی هاست لینوکس
در یک فایل تنظیمات بیرون از public_html، مثلاً /home/USER/config/keys.php، و در کد آن را include کنید. فایلی که بیرون از پوشهی وب است با آدرس اینترنتی قابل باز شدن نیست.
وردپرس
در wp-config.php:
define( 'MY_AI_API_KEY', '...' );
این بهتر از ذخیره در تنظیمات افزونه است، چون در دیتابیس و خروجیهای آن نمیآید. (دسترسی فایل wp-config را محدود نگه دارید.)
نقطهی اتصال خودتان را هم محافظت کنید
وقتی سرور شما واسطه میشود، هر کسی میتواند به همان آدرس درخواست بفرستد و به خرج شما از مدل استفاده کند. پس:
- محدودیت نرخ برای هر آیپی و هر کاربر.
- سقف طول ورودی و سقف طول جواب.
- فقط برای کاربر واردشده، اگر ممکن است.
- توکن ضد جعل درخواست (در وردپرس: nonce).
- دستور سیستمی ثابت روی سرور؛ مرورگر فقط پیام کاربر را بفرستد، نه کل دستور را.
در حساب سرویس هوش مصنوعی
- سقف هزینهی ماهانه بگذارید.
- هشدار مصرف را فعال کنید.
- برای محیط آزمایشی و اصلی کلید جدا بسازید.
- دسترسی کلید را به حداقل لازم محدود کنید.
اگر کلید لو رفت
- همان لحظه در پنل سرویس باطلش کنید و کلید تازه بسازید.
- کلید جدید را فقط در جای امن بگذارید.
- اگر در Git بوده، پاک کردن از آخرین نسخه کافی نیست؛ در تاریخچه میماند. کلید باطلشده بیخطر است، پس باطل کردن مهمتر از پاک کردن است.
- گزارش مصرف را ببینید.
جاهایی که کلید ناخواسته نشت میکند
- فایل env. که در public_html آپلود شده.
- بکاپی که در پوشهی عمومی سایت مانده. (خطر بکاپ در پوشهی عمومی)
- اسکرینشات و تیکت پشتیبانی.
- چسباندن کد در یک چت هوش مصنوعی دیگر. (چه چیزی را ندهیم)
- متغیرهای
NEXT_PUBLIC_وVITE_که به مرورگر میروند.
سوالهای رایج
کلید را در کد رمزگذاری یا مبهم کنم؟
بیفایده است؛ مرورگر باید بتواند بازش کند، پس دیگران هم میتوانند.
از سرور به سرویس وصل نمیشود.
دسترسی سرور به آن آدرس را با یک درخواست ساده امتحان کنید.