آموزش غیرفعال سازی json rest api در wordpress
در ورژن های بالای 4.4 وردپرس، امکان ای به نام REST API در هسته وردپرس گنجانده شده که قبلا بصورت یک پلاگین جدا قابل نصب بود. این قابلیت یکی از امکانات جذاب وردپرس است که به ما اجاده میدهد سیستم یا نرم افزار هایی با قابلیت اتصال راحت به وردپرس بنویسیم. مثلا شما اگر قصد ایجاد یک برنامه اندروید برای سایت خود دارید، بدون شک این قابلیت بسیار برای شما کاربردی خواهد بود.
اما اکثرا مردم، شاید نیازی به این قابلیت نداشته باشند و فعال بودن آن باعث مشکلاتی مانند حملات DDOS روی سایت یا فشار بیش از حد به سرور بخاطر حجوم ربات های مختلف در سطح نت، شود.
REST API چیست؟
حال احتمالا برخی از شما مدیران بپرسید که اصلا REST API و چه استفاده ای داراست و چرا بعضا از وب مستران میخواهند آن را حذف کنند ؟
REST یک API تحت وب است که با استفاده از ان شما میتوانید دستورات خودتان را در قالب های معمولی HTML ارسال کنید و در ازای آن، جواب های را دریافت کنید! شما با استفاده از REST API میتوانید که در قالب ریکوئست های GET به راحتی داده ها مورد نظر را از وردپرس دریافت نمائید. یکی از مزیت های آن، قابلیت پیاده سازی اپلیکیشن های موبایل و یا ساخت وب اپلیکیشن را با استفاده از وردپرس بسیار راحت میکند. از عیوب آن میتوان بهحملات DDos (حملات تکذیب سرور و ایجاد بار اضافه پردازش) اشاره کرد که ممکن است باعث شود حملات بیشتری برای شما اتفاق می افتد که البته این اتفاقات نادر میباشد.
اگر شما نمیدانید REST API یا wp-json چیست، پس احتمالا به آن نیازی ندارید! پس بهتر از هر چه سریعتر آن را غیرفعال کنید
در این مطلب، دو روش برای غیرفعال سازی Json rest api در وردپرس آموزش میدهیم. روش اول با استفاده از کد در فایل functions.php در پوشه قالب، میباشد و روش دوم، استفاده از پلاگین یا افزونه است. اگر شما تمایلی به درگیری با کد های قالب و php ندارید، پس پیشنهاد من به شما روش دوم است.
اطلاعات Rest api و آدرس دسترسی، در لینک زیر قرار دارد (بجای YouSite.com، آدرس سایت خود را جایگزین کنید و سپس در مرورگر وارد کنید):
http://YouSite.com/wp-json
وقتی صفحه بالا را باز کنید، با انبوهی از کد های json روبرو خواهید شد!
روش اول – غیرفعال سازی کامل Rest api:
در این روش شما بصورت کلی این قابلیت را میتوانید غیرفعال کنید.
1- فایل functions.php قالب را باز کنید (ابتدا سعی کنید از آن یک نسخه بکاپ یا پشتیبان در کامپیوتر ذخیره کنید تا اگر مشکلی ایجاد شد، براحتی بتوانید به قبل برگردید)
2- اگر شما از وردپرس نسخه 4.7 و قبل تر استفاده میکنید، کد زیر را در ابتدای فایل و بعد از تگ <?php قرار دهید:
// Filters for WP-API version 1.x add_filter( 'json_enabled', '__return_false' ); add_filter( 'json_jsonp_enabled', '__return_false' ); // Filters for WP-API version 2.x add_filter( 'rest_enabled', '__return_false' ); add_filter( 'rest_jsonp_enabled', '__return_false' );
اما اگر شما از نسخه وردپرس بروز شده و 4.7 به بعد استفاده میکنید، کد زیر را در ابتدای فایل و بعد از تگ <?php، قرار بدید:
add_filter(‘rest_authentication_errors’, function ()
{
$error_message = esc_html__(
‘DRA: Only authenticated users can access the REST API.’,
‘disable-json-api’
);
return new WP_Error(‘rest_cannot_access’, $error_message, array(
‘status’ => rest_authorization_required_code()
));
});
3- تمام! فقط کافی است آدرس wp-json را باز کنید تا از غیرفعال شدن آن اطمینان حاصل نمایید. (چند خط بالاتر لینک و نحوه دسترسی گذاشته شده است)
روش دوم – غیرفعال کردن Rest api تنها برای کاربران ناشناس!
روش دوم، کمی متفاوت تر میباشد. در این روش ما از پلاگین استفاده خواهیم کرد. پلاگین فوق، این قابلیت را بصورت کامل برای همه، غیرفعال نمیکند و فقط برای کاربران ناشناس یا مهمان این قابلیت، غیرفعال خواهد شد. آدرس wp-json، فقط برای مدیر قابل مشاهده است و برای دیگر کاربران ای که در وردپرس وارد نشده اند، قابل دسترسی نیست
1- وارد قسمت مدیریت وردپرس شوید و سپس وارد مسیر “افزونه ها > افزودن” شوید.
2- در قسمت باکس جستجو، نام “Disable REST API” را وارد کنید و سپس جستجو نمایید
3- سپس پلاگین زیر را نصب کنید:
لینک پلاگین در مخزن رسمی وردپرس:
https://wordpress.org/plugins/disable-json-api
4- سپس پلاگین را فعال کنید.
5- تمام! حال برای بررسی کارکرد صحیح، آدرس wp-json در سایت خود را باز کنید (توجه کنید در صورتی که وارد وردپرس شده اید، این صفحه برای شما قابل مشاهده است. لذا ابتدا از وردپرس خارج شوید و سپس لینک فوق را باز کنید)
اگر شما در صفحه فوق، متنی مثل زیر میبینید:
rest_authentication_errors
پس یعنی به درستی مراحل را طی کرده اید.
همچنین در ادامه توصیه میکنم کد زیر را در فایل functions.php قالب، قرار بدید تا لینک wp-json از تگ head قالب و http link header حذف بشه:
remove_action('wp_head', 'rest_output_link_wp_head', 10); remove_action('template_redirect', 'rest_output_link_header', 11, 0);
پی نوشت – مهم : قابلیت wp-json به خودی خود، قابلیت خوبی است، اما نه در کشور ما ایران! شاید شما بپرسید چرا؟ جواب این است که در ایران ربات و سایت های خبرخوان، به وفور یافت میشود. احتمالا شما از آن دست کسانی هستید که فید سایت خود را بسته اید یا از روش هایی برای جلوگیری از دسترسی این نوع ربات ها به سایت خود استفاده میکنید! خبر بد برای شما این است که یکی از مزیت های این قابلیت، دسترسی به مطالب سایت هست!
بطور مثال با استفاده از لینک زیر، ربات به کل مطالب شما دسترسی خواهد داشت:
http://YouSite/wp-json/wp/V2/posts
و خبر بد تر اینکه ربات به تک تک پست های شما هم دسترسی خواهد داشت! آن هم بصورت کامل! بطور مثال با لینک زیر، مطلب شما بصورت کامل و در قالب json نمایان خواهد شد:
http://YouSite/wp-json/wp/V2/posts/1
(در بالا عدد 1، آیدی مطلب میباشد! )
توصیه من، غیرفعال کردن هر چه سریعتر این قابلیت در صورت بلا استفاده بودن است. اگر شما از rest api استفاده میکنید و به آن احتیاج دارید، حدالامکان آدرس آن را از wp-json تغییر دهید تا برای ربات های سودجو و اسپمر، غیرقابل سوء استفاده شود.
دیدگاهتان را بنویسید