فهرست مقاله
کاملاً غیرفعال کنید وردپرس بخش جلویی (front-end) دارای یک تابع جستجوی بومی است تا از شلوغ شدن پایگاه داده در اثر اسکن جلوگیری کند.
پایگاه داده به این دلیل از کار نمیافتد که وبسایت شما محتوای زیادی دارد، بلکه به این دلیل است که شما هنوز از آن جستجوی بومی وردپرس که به طرز مسخرهای ناکارآمد است استفاده میکنید.
بسیاری از صاحبان وبسایت یک واقعیت را نادیده میگیرند: رابط کاربری... ?s= پارامترهای جستجو مورد علاقه هکرها و اسکنرها هستند.
اگر کسی مدام به رابط جستجو درخواست ارسال کند، پایگاه داده شما مجبور به اجرای هزاران پرسوجوی بیمعنی خواهد شد.
نتیجه چه شد؟ مصرف CPU به شدت افزایش یافت، مصرف حافظه به شدت بالا رفت و وبسایت از کار افتاد.
این اغراق نیست، بلکه یک تجربه واقعی و دردناک از سایتهای بیشماری است.
چرا جستجوی بومی وردپرس را غیرفعال کنیم؟
تابع جستجوی داخلی وردپرس اساساً یک کوئری LIKE تمام متن در پایگاه داده است.
این پرسوجو بهشدت ناکارآمد است، بهخصوص وقتی تعداد مقالات از ۱۰۰۰۰ بیشتر شود؛ یک جستجو ممکن است بیش از ۰.۵ ثانیه طول بکشد.
اگر کسی از یک خزنده وب یا اسکریپت حمله برای ارسال دهها درخواست جستجو در ثانیه استفاده کند، پایگاه داده شما فوراً دچار مشکل خواهد شد.
طبق مستندات رسمی وردپرس، جستجوی بومی هیچ مکانیزم حفاظتی ندارد و کاملاً در معرض دید کاربران است. این بدان معناست که مهاجمان میتوانند بدون ورود به سیستم، از این نقطه ورود سوءاستفاده کنند.

راه حل جایگزین: به یک موتور جستجوی هوشمندتر متصل شوید
بسیاری از وبسایتهای حرفهای دیگر به جستجوی بومی وردپرس متکی نیستند.
برای مثال، دسترسی جستجوی برنامهنویسی گوگل یا Algolia چنین سرویسهای جستجوی شخص ثالثی نه تنها سریع هستند، بلکه نتایج دقیقتری نیز ارائه میدهند.
مهمتر از همه، این سرویسها پایگاه داده شما را از کار نمیاندازند زیرا همه پرس و جوها به صورت خارجی انجام میشوند.
بنابراین اگر وبسایت شماموقعیت یابیاگر سایت شما یک ابزار، یک وبلاگ یا حتی سایتی است که از قبل به جستجوی خارجی متکی است، دلیلی برای ادامه استفاده از قابلیت جستجوی داخلی وردپرس وجود ندارد.
غیرفعال کردن کامل پیادهسازی کد جستجوی front-end وردپرس
مستقیمترین راه، تمرکز روی موضوع است. functions.php کد زیر را به فایل اضافه کنید:
// 禁用 WordPress 前台搜索功能,防止被扫描拖垮数据库
function disable_wp_search( $query, $error = true ) {
if ( is_search() && !is_admin() ) {
$query->is_search = false;
$query->query_vars['s'] = false;
$query->query['s'] = false;
if ( $error == true ) {
// 直接返回 404 页面,不走任何数据库查询
$query->set_404();
status_header( 404 );
nocache_headers();
}
}
}
add_action( 'parse_query', 'disable_wp_search' );
add_filter( 'get_search_form', '__return_empty_string' );
منطق این کد بسیار ساده است:
- به محض اینکه یک درخواست جستجوی پیشزمینه شناسایی شود، کوئریهای پایگاه داده بلافاصله مسدود میشوند.
- بازگشت به صفحه ۴۰۴، نقطه ورود را کاملاً مسدود میکند.
- همزمان، فرم جستجو نیز حذف شد تا از اقدامات تصادفی کاربران جلوگیری شود.
مزیت این روش این است که حتی اگر یک مهاجم درخواستهای متعددی ارسال کند... ?s=xxxهیچ کوئری از پایگاه داده اجرا نخواهد شد.
یک پیادهسازی زیباتر: استفاده از Fluent Snippets
اگر نمیخواهید مستقیماً فایلهای قالب را تغییر دهید، میتوانید از ... استفاده کنید. قطعه کدهای روان افزونه
این افزونه به شما امکان میدهد قطعه کدهایی را مستقیماً در پسزمینه اضافه کنید و اثرات و تغییرات را مشاهده کنید. functions.php همونه، اما امنتره.
پس از فعالسازی، میتوانید به راحتی تمام کدهای سفارشی خود را مدیریت کنید بدون اینکه نگران بازنویسی آنها توسط بهروزرسانیهای قالب باشید.
نتایج واقعی: فشار پایگاه داده به شدت کاهش یافت.
در پیکربندیِ پردازنده دو هستهای + رم ۴ گیگابایتی در VPS، وقتی جستجوی بومی ۵۰ درخواست در ثانیه انجام میداد، میزان استفاده از CPU پایگاه داده به ۹۵٪ افزایش یافت.
پس از غیرفعال کردن جستجو، همان درخواست مستقیماً خطای ۴۰۴ را برگرداند و بارگذاری پایگاه داده تقریباً صفر شد.
به همین دلیل است که بسیاری از کارشناسان امنیتی اکیداً توصیه میکنند در صورت عدم نیاز، جستجوی بومی وردپرس را فوراً غیرفعال کنید.
محققان امنیتی به صراحت در وبلاگ رسمی Sucuri اظهار داشتند:
جستجوی بومی وردپرس یکی از سادهترین نقاط ورود برای سوءاستفاده است؛ مهاجمان میتوانند با ارسال درخواستهای جستجوی مکرر، حملات انکار سرویس را ایجاد کنند.
همین جمله برای توضیح مشکل کافی است.
در پایان: ایمنی یک انتخاب نیست، بلکه یک درس اجباری است.
امنیت وبسایت فقط یک امتیاز نیست، بلکه مسئلهی مرگ و زندگی است.
غیرفعال کردن جستجوی پیشفرض وردپرس ممکن است کار کوچکی به نظر برسد، اما میتواند از شلوغ شدن پایگاه داده شما جلوگیری کند.
در این عصرِ انباشت اطلاعات، خرد واقعی در افزودن ویژگیها نیست، بلکه در کنار گذاشتن قاطعانهی ویژگیهایی است که ناکارآمد یا خطرناک هستند.
به یاد داشته باشید: ایمنی هزینه نیست، بلکه یک ارزش است.
اگر هنوز مردد هستید، این را از خود بپرسید: آیا ترجیح میدهید پایگاه دادهتان در میان خندهی مهاجمان از کار بیفتد، یا ترجیح میدهید کنترل اوضاع را به دست بگیرید؟
وبلاگ امید چن ویلیانگ ( https://www.chenweiliang.com/ مقاله «غیرفعال کردن کامل تابع جستجوی بومی در وردپرس برای جلوگیری از اسکن برنامههای مخرب و انتقال اطلاعات به پایگاه داده» که در اینجا به اشتراک گذاشته شده است، ممکن است برای شما مفید باشد.
به اشتراک گذاری لینک این مقاله خوش آمدید:https://www.chenweiliang.com/cwl-34192.html
