
کلید API هوش مصنوعی در وردپرس باید در سمت سرور نگهداری و فقط برای درخواست مجاز استفاده شود. قراردادن آن در جاوااسکریپت قالب، HTML صفحه یا فایل workflow قابل اشتراک، کلید را در اختیار دریافتکننده آن فایل قرار میدهد. محل ذخیره مهم است، اما مجوز مصرف کلید و سقف هزینه نیز بخشی از همان طراحیاند.
در این راهنما یک مسیر قابل استفاده برای اتصال وردپرس به API هوش مصنوعی پاستا میسازیم. سپس جای Secrets API را توضیح میدهیم که در WordPress 7.2 Beta 1 اضافه شده است. وضعیت نسخه در بررسی ۲۲ اکتبر ۲۰۲۶ بتاست؛ برای استفاده از این قابلیت، فروشگاه زنده را صرفاً به نسخه آزمایشی ارتقا ندهید.
مسیر درست درخواست از مرورگر تا مدل
مرورگر درخواست کاربر را به endpoint سایت میفرستد. سایت هویت و مجوز را بررسی میکند، محدودیت مصرف را اعمال میکند و سپس با کلید نگهداریشده در سرور به مدل درخواست میدهد. پاسخ لازم به مرورگر برمیگردد. در این مسیر، کاربر نباید بتواند مدل دلخواه، سقف نامحدود خروجی یا مقصد URL دلخواه را از بیرون تعیین کند.
فشردهسازی فایل، پنهانکردن کلید در یک متغیر با نام مبهم یا قراردادن آن در یک data attribute محافظت ایجاد نمیکند. درخواست شبکه مرورگر و کد دریافتشده قابل مشاهدهاند. همین قاعده برای کلیدی که به تنظیمات عمومی REST API یا خروجی صفحه مدیریت نشت میکند برقرار است؛ فقط «دیدهنشدن در صفحه عادی» معیار کافی نیست.
محل ذخیره را بر اساس شرایط سایت انتخاب کنید
| روش | کاربرد مناسب | نکته عملی |
|---|---|---|
| متغیر محیطی سرور | کلید تحت مدیریت استقرار یا میزبان | دسترسی فرایند PHP و روش تغییر تنظیم باید مشخص باشد |
| تنظیم سرور در wp-config.php | نصبهایی که متغیر محیطی مناسب ندارند | فایل، نسخه پشتیبان و دسترسی آن باید محافظت شوند |
| Secrets API | یکپارچهسازی سازگار با نسخه پشتیبان API | رمزگذاری داده ذخیرهشده و مدیریت خطا را بررسی کنید |
| سرویس واسط اختصاصی | کنترل مرکزی کلید و مصرف چند اتصال | خود واسط به احراز هویت و مجوز درخواست نیاز دارد |
متغیر محیطی برای همه سرویسهای PHP بهصورت خودکار قابل خواندن نیست. تنظیم PHP-FPM، نوع هاست و روش استقرار اثر دارند. پس از قرار دادن تنظیم، فقط وجود مقدار را با یک بررسی محدود تأیید کنید؛ کلید را برای آزمایش چاپ نکنید. اگر روش ثابتی از میزبان دریافت میکنید، همان روش را در دستورالعمل عملیاتی سایت ثبت کنید.
نگهداری مستقیم در فایل تنظیم، مدیریت نسخه پشتیبان را هم وارد مسئله میکند. فایل حاوی کلید را در مخزن عمومی، فایل ZIP قابل دانلود یا تیکت پشتیبانی قرار ندهید. بکاپی که هم دیتابیس و هم فایل تنظیم را دارد، میتواند اطلاعات بیشتری از یک خروجی دیتابیس مستقل در خود داشته باشد. محدوده دسترسی به بکاپ باید متناسب با محتوای واقعی آن باشد.
Secrets API در WordPress 7.2 چه چیزی اضافه کرده است؟
اعلام رسمی WordPress 7.2 Beta 1 این قابلیت را برای مدیریت داده محرمانه معرفی میکند. در تغییر ثبتشده هسته، رمزگذاری مقدار ذخیرهشده و امکان جایگزینی محل نگهداری توضیح داده شدهاند. تاریخ انتشار نهایی با انتشار بتا فرق دارد؛ نسخه فعلی سایت را قبل از استفاده بررسی کنید.
رمزگذاری داده در محل ذخیره کمک میکند یک خروجی مستقل دیتابیس، بهسادگی همان کلید خام را نشان ندهد. اما اگر برنامه یا افزونهای مجوز اجرای PHP در همان سایت دارد، مسئله دیگری مطرح است: ممکن است بتواند کلید را در زمان استفاده بخواند. بنابراین نصب افزونه نامطمئن با رمزگذاری دیتابیس بیخطر نمیشود.
در معرفی فعلی، صفحه مدیریت و ابزارهای جانبی را با خود API یکی نگیرید. وجود تابع هسته الزاماً بهمعنی وجود یک فرم آماده برای همه نصبها نیست. برای یک افزونه، باید مشخص باشد کلید را چه کسی وارد میکند، کجا ذخیره میشود و کدام نقش اجازه تغییر آن را دارد. نامگذاری فضای کلید نیز برای جلوگیری از تداخل است، نه ایجاد جداسازی امنیتی بین افزونهها.
سه حالت دریافت کلید را با هم یکی نکنید
قرارداد فعلی تابع دریافت Secrets API میان وجود مقدار، نبودن مقدار و خطای دریافت فرق میگذارد. در حالت موفق، شیء WP_Secret برمیگردد و مقدار از مسیر مشخص آن خوانده میشود. خطای رمزگشایی یا ذخیرهساز را مثل «کلید تنظیم نشده» مدیریت نکنید؛ این تفاوت برای تشخیص خرابی و جلوگیری از انتخاب مسیر اشتباه مهم است.
نمونه زیر هسته خواندن کلید در یک افزونه آموزشی است. متغیر محیطی بر Secrets API اولویت دارد. اگر تنظیم محیطی وجود داشته ولی خالی باشد، خطا میدهد تا تنظیم خراب با مسیر دیگری پنهان نشود. این تابع کلید را به مرورگر ارسال نمیکند و endpoint عمومی یا فرم ذخیره کلید نمیسازد. برای نسخههای قدیمی، روش محیطی قابل استفاده است.
function paasta_demo_api_key() {
$env = getenv('PAASTA_API_KEY');
if (false !== $env) {
return is_string($env) && '' !== trim($env)
? trim($env)
: new WP_Error('paasta_key_empty', 'API key is empty');
}
if (!function_exists('wp_get_secret')) {
return new WP_Error('paasta_key_missing', 'Configure the server API key');
}
$secret = wp_get_secret('paasta-ai/api-key');
if (is_wp_error($secret)) {
return $secret;
}
if (!($secret instanceof WP_Secret)) {
return new WP_Error('paasta_key_missing', 'API key is not configured');
}
$key = $secret->reveal();
if (is_wp_error($key)) {
return $key;
}
return is_string($key) && '' !== trim($key)
? trim($key)
: new WP_Error('paasta_key_empty', 'API key is empty');
}
روش reveal و قرارداد بازگشت آن در کلاس WP_Secret مشخص شده است. کد را با نسخه هدف آزمایش کنید و نتیجه خطا را قبل از ساخت هدر بررسی کنید. تبدیل مستقیم یک شیء محرمانه به رشته، روش مطمئن دریافت مقدار برای درخواست مدل نیست. مقدار خواندهشده را نیز در گزارش خطا یا پاسخ API قرار ندهید.