محدود کردن دسترسی به REST API برای کاربران مهمان در وردپرس (Restrict REST API)
با فیلتر `rest_authentication_errors`، کاربرانی که لاگین نکردهاند را با خطای ۴۰۱ یا WP_Error مسدود کنید.
مشخصات فنی و شناسنامه کد (Code Information)
بازبینی: 1405/06/29<?php
/**
* محدودسازی دسترسی به REST API تنها برای کاربران وارد شده به سایت
*/
function bisco_restrict_rest_api_to_logged_in_users( $access ) {
// در صورت وجود خطای قبلی، همان خطا بازگردانده شود
if ( is_wp_error( $access ) ) {
return $access;
}
// اگر کاربر وارد نشده بود، دسترسی مسدود گردد
if ( ! is_user_logged_in() ) {
return new WP_Error(
'rest_cannot_access',
'دسترسی به رابط برنامهنویسی تنها برای کاربران احراز هویت شده مجاز است.',
array( 'status' => rest_authorization_required_code() )
);
}
return $access;
}
add_filter( 'rest_authentication_errors', 'bisco_restrict_rest_api_to_logged_in_users' );
کد را کجا قرار دهیم؟ (Placement Guide)
کد را در functions.php قرار دهید.
این کد چگونه کار میکند؟ (How it Works)
هسته وردپرس در زمان راهاندازی هر درخواست REST این فیلتر را اعتبارسنجی میکند؛ اگر کاربر کوکی یا توکن معتبر نداشته باشد، پاسخ خطای HTTP 401 Unauthorized برگردانده میشود.
چه زمانی از این کد استفاده کنیم؟ (Use Cases)
در وبسایتهای شرکتی، خبری و وبلاگی که اپلیکیشن موبایل عمومی وابسته به متدهای عمومی REST ندارند.
چه زمانی نباید از این کد استفاده کنیم؟ (Anti-patterns)
در سایتهای با فرانتانت هدلس (Headless WP با Next.js) یا سایتهایی که از فرمهای ایجکس مبتنی بر REST عمومی استفاده میکنند.
پیشنیازهای اجرا
وردپرس ۴.۷ به بالا.
نحوه تست و اطمینان از عملکرد
در حالت ناشناس مرورگر آدرس https://site.com/wp-json/wp/v2/users را باز کنید؛ باید خطای ۴۰۱ و پیام منع دسترسی نمایش داده شود.
نحوه بازگردانی سریع (Rollback)
فیلتر را حذف کنید.
خطاهای رایج و راهحل رفع
قفل کردن اشتباهی پیشخوان ادمین (این کد چون شرط is_user_logged_in دارد، به محض ورود ادمین دسترسی ویرایشگر گوتنبرگ بدون باگ کار میکند).
ملاحظات و نکات امنیتی
جلوگیری کامل از حملات Enumeration نامهای کاربری و اسکنرهای نفوذ.
تاثیر بر سرعت و پرفورمنس
کاهش مصرف منابع ناشی از رباتهای کاوشگر اندپوینتهای json.