
يوم جيد في هذه المقالة ، سوف أخبرك كيف يمكن لمستخدمي الاستضافة العاديين التقاط عناوين IP التي تولد حمولة زائدة على الموقع ومن ثم منعهم باستخدام أدوات الاستضافة ، وسيكون هناك كود php "قليل" ، بضع لقطات.
إدخال البيانات:- تم إنشاء موقع الويب على CMS WordPress
- Hosting Beget (هذا ليس إعلانًا ، لكن لقطات لوحة الإدارة ستكون موفر الاستضافة هذا)
- تم إطلاق موقع WordPress في مكان ما في بداية عام 2000 ويحتوي على عدد كبير من المقالات والمواد.
- PHP الإصدار 7.2
- الفسفور الابيض لديه أحدث نسخة
- لبعض الوقت الآن بدأ الموقع في إنشاء حمل كبير على MySQL وفقًا للاستضافة. كل يوم ، تجاوزت هذه القيمة 120 ٪ من القاعدة لكل حساب
- وفقا لياندكس. يزور الموقع المتري 100 إلى 200 شخص يوميًا
بادئ ذي بدء ، تم القيام به:- يتم مسح قواعد البيانات من القمامة المتراكمة
- تم تعطيل المكونات الإضافية غير الضرورية ، وتتم إزالة مقاطع من التعليمات البرمجية القديمة
في الوقت نفسه ، أود أن ألفت الانتباه إلى خيارات التخزين المؤقت (الإضافات المؤقتة للتخزين المؤقت) ، وقمنا بعمل ملاحظات - لكن معدل التحميل بنسبة 120٪ من موقع واحد لم يتغير ويمكن أن ينمو فقط.كيف بدا الحمل التقريبي على قواعد بيانات الاستضافة
في الجزء العلوي يوجد الموقع المعني ، أسفل المواقع الأخرى التي لها نفس cms ونفس حركة المرور ، ولكن تنشئ حملاً أقل.تحليل- تم إجراء العديد من المحاولات مع خيارات للتخزين المؤقت للبيانات ، وتم إجراء ملاحظات لعدة أسابيع (الاستفادة من الاستضافة خلال هذا الوقت لم أكتب أبداً أنني سيئة للغاية وقطع الاتصال بي)
- كان هناك تحليل والبحث عن الاستعلامات البطيئة ، ثم تم تغيير بنية قاعدة البيانات ونوع الجدول قليلاً
- للتحليل ، تم استخدام AWStats المدمج في المقام الأول (بالمناسبة ، ساعد على حساب عنوان IP الأكثر شرًا من خلال حجم حركة المرور
- المقياس - المقياس يعطي معلومات فقط عن الأشخاص ، وليس عن البوتات
- كانت هناك محاولات لاستخدام المكونات الإضافية لـ WP ، والتي يمكنها تصفية ومنع الزوار حتى حسب بلد الموقع والمجموعات المختلفة
- تبين أن هناك طريقة جذرية تمامًا تتمثل في إغلاق الموقع لمدة يوم باستخدام علامة "نحن في صيانة" - وقد تم ذلك أيضًا باستخدام المكون الإضافي الشهير. في هذه الحالة ، نتوقع انخفاض الحمل ، ولكن ليس إلى قيم يسارية ، نظرًا لأن أيديولوجية WP تعتمد على الخطافات وتبدأ الإضافات في نشاطها عند حدوث نوع من "hook" ، وقبل حدوث "hook" ، يمكن بالفعل إجراء استعلامات لقاعدة البيانات
فكرة- حساب عناوين IP التي تقدم الكثير من الطلبات في فترة قصيرة من الزمن.
- إصلاح عدد الزيارات إلى الموقع
- بناءً على عدد مرات الوصول إلى كتلة الوصول إلى الموقع
- حظر استخدام الإدخال "رفض من" في ملف htaccess
- خيارات أخرى ، مثل iptables وقواعد Nginx دون التفكير ، لأنني أكتب عن الاستضافة
ظهرت فكرة ، لذلك عليك تنفيذها ، كما لو كانت بدونها ...
- نخلق جداول لتراكم البيانات
CREATE TABLE `wp_visiters_bot` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `ip` VARCHAR(300) NULL DEFAULT NULL, `browser` VARCHAR(500) NULL DEFAULT NULL, `cnt` INT(11) NULL DEFAULT NULL, `request` TEXT NULL, `input` TEXT NULL, `data_update` DATETIME NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE INDEX `ip` (`ip`) ) COMMENT=' ' COLLATE='utf8_general_ci' ENGINE=InnoDB AUTO_INCREMENT=1;
CREATE TABLE `wp_visiters_bot_blocked` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `ip` VARCHAR(300) NOT NULL, `data_update` DATETIME NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE INDEX `ip` (`ip`) ) COMMENT=' ' COLLATE='utf8_general_ci' ENGINE=InnoDB AUTO_INCREMENT=59;
CREATE TABLE `wp_visiters_bot_history` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `ip` VARCHAR(300) NULL DEFAULT NULL, `browser` VARCHAR(500) NULL DEFAULT NULL, `cnt` INT(11) NULL DEFAULT NULL, `data_update` DATETIME NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `data_add` DATETIME NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE INDEX `ip` (`ip`) ) COMMENT=' ' COLLATE='utf8_general_ci' ENGINE=InnoDB AUTO_INCREMENT=1;
- قم بإنشاء ملف سنضع فيه الكود. سيتم كتابة التعليمات البرمجية في جدول المرشحين للحظر والاحتفاظ بسجل خاص بالتصحيح.
رمز الملف لتسجيل عناوين IP <?php if (!defined('ABSPATH')) { return; } global $wpdb; function coderun_get_user_ip() { $client_ip = ''; $address_headers = array( 'HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'HTTP_X_FORWARDED', 'HTTP_X_CLUSTER_CLIENT_IP', 'HTTP_FORWARDED_FOR', 'HTTP_FORWARDED', 'REMOTE_ADDR', ); foreach ($address_headers as $header) { if (array_key_exists($header, $_SERVER)) { $address_chain = explode(',', $_SERVER[$header]); $client_ip = trim($address_chain[0]); break; } } if (!$client_ip) { return ''; } if ('0.0.0.0' === $client_ip || '::' === $client_ip || $client_ip == 'unknown') { return ''; } return $client_ip; } $ip = esc_sql(coderun_get_user_ip());
إن جوهر الكود هو الحصول على عنوان IP للزائر وكتابته على الطاولة. إذا كان ip موجودًا بالفعل في الجدول ، فسيتم زيادة حقل cnt (عدد الطلبات إلى الموقع) - الآن الأمر مخيف ... الآن سوف يحرقونني لأفعالي :)
لتسجيل كل مكالمة إلى الموقع ، نقوم بتضمين رمز الملف في ملف WordPress الرئيسي - wp-load.php. نعم ، نقوم بتعديل ملف kernel على وجه التحديد بعد وجود المتغير العام $ wpdb بالفعل
لذلك ، الآن يمكننا أن نرى عدد المرات التي يتم فيها ذكر عنوان IP هذا أو ذاك في طاولتنا ومع فنجان من القهوة ننظر هناك كل 5 دقائق لفهم الصورة

ثم قم ببساطة بنسخ عنوان IP "الضار" ، وافتح ملف htaccess وأضفه إلى نهاية الملف
Order allow,deny Allow from all # start_auto_deny_list Deny from 94.242.55.248 # end_auto_deny_list
كل شيء ، الآن 94.242.55.248 - ليس لديه حق الوصول إلى الموقع ولا يولد حمولة على قاعدة البيانات
لكن في كل مرة ، لا تعد النسخ بأيديك مهمة بارعة ، وبالإضافة إلى ذلك ، تم اعتبار الشفرة مستقلة
أضف ملفًا سيتم تنفيذه بواسطة CRON كل 30 دقيقة:
تعديل رمز الملف. htaccess <?php if (empty($_REQUEST['key'])) { die('Hello'); } require('wp-load.php'); global $wpdb; $limit_cnt = 70;
رمز الملف بسيط للغاية وبدائي وفكرته الرئيسية هي اختيار المرشحين لحظر وإدخال قواعد الحظر في ملف htaccess بين التعليقات.
# start_auto_deny_list و # end_auto_deny_list
الآن يتم حظر الملكية الفكرية "الضارة" من تلقاء نفسها ، وملف .htaccess يبدو مثل هذا:
# BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress Order allow,deny Allow from all # start_auto_deny_list Deny from 94.242.55.248 Deny from 207.46.13.122 Deny from 66.249.64.164 Deny from 54.209.162.70 Deny from 40.77.167.86 Deny from 54.146.43.69 Deny from 207.46.13.168 ....... # end_auto_deny_list
نتيجة لذلك ، بعد بدء هذا الرمز ، يمكنك رؤية النتيجة في لوحة الاستضافة:
ملحوظة: هذه المادة هي حقوق طبع ونشر ، على الرغم من أنني نشرت جزءًا منها على موقعي ، ولكن على Habre تم الحصول على نسخة أكثر توسعًا.