خطوات هامة من أجل حماية موقعك من الاختراق عن طريق حقن SQL – وردبريس
WordPress SQL Injections هي طريقة اختراق شائعة. غالبًا ما تُستخدم لإدراج البرامج الضارة والروابط غير المرغوب فيها على موقع الويب الخاص بك. عندما يتعلق الأمر بحماية موقع WordPress الخاص بك ، فهذا تهديد يجب أن تكون مستعدًا له! من المهم للغاية أن يكون لديك خطة أمان جيدة في WordPress . في هذا المنشور ، سأشرح بمزيد من التفصيل ماهية حقن SQL وكيف يمكنك تقليل حدوثه على موقع الويب الخاص بك.
ما هو حقن SQL ؟
يمكن للقراصنة الدخول إلى WordPress بعدة طرق ، فإن حقن SQL يعطينا فكرة عن كيفية تحقيق هذا الاختراق أو أين يتم استهدافه ليكون أكثر دقة.
أمان قاعدة بيانات WordPress
يعتمد WordPress على PHP وقاعدة بيانات MySQL للعمل. يتم تخزين الكثير من بيانات موقع الويب الخاص بك في قاعدة بيانات MySQL ويتم استدعاؤها عند زيارة الأشخاص لموقعك. يستخدم كود PHP لاستدعاء الإدخالات في قاعدة البيانات.
كيف يقوم الأشخاص أو الروبوتات باختراق قاعدة بيانات WordPress ؟
باختصار ، يمكن أن يحدث إدخال SQL في أي مكان لديك فيه عنصر نموذج على موقعك. يمكن أن تكون هذه:
- نماذج الاتصال
- نماذج الاشتراك
- نماذج تسجيل الدخول
- أشرطة البحث والعديد من حقول الإدخال الأخرى.
حتى أصغر نقاط الضعف يمكن أن تترك قاعدة بياناتك مفتوحة على مصراعيها لهجوم SQL! يبحث المتسللون بشكل أساسي عن المواقع التي بها نقاط ضعف ، وعندما يجدون واحدة ، كل ما عليهم فعله هو استخدام أمر SQL ضار بدلاً من إدخال نموذج صالح وهذا كل شيء!
فكر في نموذج الاتصال الخاص بك ، على سبيل المثال. إذا كان لديك حقل رقم هاتف جهة اتصال ، فكل ما تريد أن يضعه الأشخاص هناك هو أرقام ، ولا أحرف أو أحرف أخرى. إذا لم تقم بإعداد حقل النموذج الخاص بك بشكل صحيح أو أن قالبك أو المكون الإضافي الخاص بك قد أهمل ذلك ، فيمكن للمتسلل وضع أي شيء يحلو له في هذا المجال ، بما في ذلك التعليمات البرمجية الضارة!
أنواع حقن SQL
يوجد بشكل عام نوعان رئيسيان من حقن SQL أو بشكل أكثر دقة سببان رئيسيان لاستخدام المهاجمين لحقن SQL.
للحصول على معلومات حساسة – Classic SQLI
يقوم هذا النوع من حقن SQL بإرجاع معلومات حساسة إلى متصفح المتسلل. سوف يستخدمون النماذج الموجودة على موقعك للاستعلام عن قاعدة البيانات. ثم يكشف هذا عن معلومات حول هيكل قاعدة البيانات الخاصة بك ومحتواها. يمكنهم بعد ذلك استخدام هذه المعلومات لشن هجوم على موقع الويب الخاص بك.
لتنفيذ إجراءات قاعدة البيانات – Blind SQLI
كما يوحي الاسم ، لا يتطلع الحقن الأعمى إلى إرجاع أي بيانات على هذا النحو ، فهو يتطلع إلى تنفيذ إجراءات قاعدة البيانات مثل حذف الجداول أو تغييرها أو إضافتها.
قد تجد أنك كنت ضحية لإحدى إدخالات WordPress SQL أو كليهما ، ربما قاموا بحذف جدول wp_users ، لذا لا يمكنك الآن الوصول إلى مسؤول موقع الويب الخاص بك . قد يكونوا قد جمعوا معلومات حساسة حول قاعدة البيانات الخاصة بك وأضافوا تعليمات برمجية ضارة وبرامج ضارة وروابط غير مرغوب فيها وعمليات إعادة توجيه ونوافذ منبثقة إلى موقعك.
لماذا لا يمنع WordPress هذا كمعيار؟
يعد WordPress كمنصة آمنًا جدًا في الواقع ، ويتعاملون مع هذا النوع من الأمان على محمل الجد. تحديثات الأمان وإصلاح الأخطاء في WordPress طوال الوقت. يعمل WordPress بالفعل على تشغيل حوالي 34 ٪ من الإنترنت الآن ، مما يعني أنه هدف كبير للمتسللين الذين قالوا إن WordPress يقوم بعمل ممتاز في الحفاظ على أمان برامجه.
غالبًا ما تكون نقطة الضعف هي السمات والإضافات ، وهذا هو السبب في أن خطة الأمان والصيانة الصارمة لـ WordPress ضرورية. يتم التخلي عن المكونات الإضافية والسمات ، أو أن المؤلفين ليسوا واعين للأمان ولا يقومون بتصحيح الثغرات بسرعة كبيرة. خذ المكون الإضافي RichReviews الذي تمت إزالته في الوقت الحالي من مستودع WordPress لعدم أمانه. تم الإبلاغ عن هذا بواسطة Wordfence وكان عرضة لبعض الوقت. المشكلة الخاصة بهذا البرنامج المساعد هي أنه مفتوح لـ XSS عبر تحديث خيارات البرنامج المساعد غير المصادق. يستغل المتسللون هذا لإدخال كود إعلان خاطئ في المواقع. لذا ، كما ترى ، فإن ضمان أمان موقعك وتحديثه دائمًا أمر مهم للغاية.
هذا ما يستغلّه المتسللون غالبًا. هذا هو السبب في أننا سنخبر الجميع دائمًا أن يكون لديهم أولاً أقل عدد ممكن من السمات والمكونات الإضافية ونبقيها محدثة في جميع الأوقات. إذا لم يعد أحد السمات أو المكون الإضافي مدعومًا أو لم يتم تحديثه لبعض الوقت ، فإننا نقترح البحث عن بديل.
أسرع 10 قوالب وردبريس – تحسين سرعة الصفحة و تحسين محركات البحث لعام 2021
كيفية منع حقن SQL
قبل أن نذهب إلى أبعد من ذلك ، يرجى التأكد من عمل نسخة احتياطية من قاعدة البيانات وملفات الموقع. من المهم جدًا أن يكون لديك نسخة صالحة للعمل من موقعك قبل إجراء أي تغييرات ، لذلك في حالة تعطل موقعك أو حدوث خطأ ما ، يمكنك استعادته بسهولة.
استخدم المكونات الإضافية والسمات الموثوقة
كما ذكرنا أعلاه ، هناك العديد من الطرق التي يمكن للمتسللين الدخول إليها ، لذا من الأفضل ضمان تغطية جميع القواعد. استخدم فقط مؤلفي الإضافات والقوالب الموثوق بهم ، ولا تستخدم أبدًا المكونات الإضافية أو السمات الفارغة أو المقرصنة!
تأكد من أن أجهزتك آمنة
تأكد من أن الكمبيوتر الذي تستخدمه للوصول إلى موقعك آمن أيضًا باستخدام آخر التحديثات وبرامج مكافحة الفيروسات.
تأكد من أن إعداد الاستضافة الخاص بك آمن
في كثير من الأحيان يتجاهل الناس أمن استضافتهم. يذهب معظمهم إلى مضيفين مشتركين رخيصين مع القليل من الاهتمام بأمان WordPress الخاص بك. بغض النظر عما تفعله في مكان آخر على موقع الويب الخاص بك ، إذا كانت الاستضافة و / أو الخادم الخاصين بك غير آمنين ، فأنت تضيع وقتك.
احتفظ بحقول إدخال النموذج إلى الحد الأدنى والإعداد الصحيح
تعد حقول النموذج والمدخلات نقطة الوصول الرئيسية لإدخال SQL ، لذا استخدم فقط ما تحتاجه وتأكد من إعدادها بشكل صحيح. إذا كان أحد الحقول لا يتطلب سوى رقم هاتف ، فقم بالسماح لهذا الحقل فقط بقبول الأرقام.
استخدم البرنامج المساعد للأمان الجيد و WAF
من الضروري استخدام جدار حماية تطبيق ويب جيد (WAF) ومكوِّن إضافي لمراقبة الأمان. غالبًا ما تنبهك هذه المشكلات إلى المشكلات حتى تتمكن من العمل على إصلاحها أو حظرها قبل حدوث أي شيء رئيسي. نوصي باستخدام Wordfence أو Sucuri ولكن هناك الكثير من البرامج الأخرى.
استخدم قواعد htaccess للحماية من حقن SQL في WordPress
إذا كنت تستخدم خادم Apache ، فيمكنك استخدام ملف .htaccess لمنع بعض محاولات إدخال SQL. لن يضمن ذلك 100٪ أنك لن تتعرض للهجوم أبدًا ، ولكنه قد يكون مفيدًا في تقليل عمليات حقن SQL.
أدناه قمنا بإنشاء قائمة بأفضل قواعد htaccess لتقوية موقع WordPress الخاص بك.
قواعد الوصول للحماية من حقن SQL في WordPress وتقوية WordPress و حماية موقعك من الاختراق
1. إعادة توجيه جميع Http إلى Https
إذا كان لديك شهادة SSL ، فقد ترغب في إعادة توجيه كل حركة المرور غير الآمنة (HTTP) إلى https. يمكنك القيام بذلك عن طريق إضافة الكود أدناه داخل ملف .htaccess في جذر تثبيت WordPress الخاص بك. إذا لم يكن لديك هذا الملف في الجذر ، يمكنك إنشاء واحد ثم نسخ هذا الرمز ولصقه في الملف. بمجرد الانتهاء من ذلك ، احفظه وقم بتحميله على جذر موقع الويب الخاص بك.
#Redirect http to https
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
2. حظر الروبوتات السيئة
هناك بعض الروبوتات المعروفة بأنها سيئة ويجب حظرها ببساطة. انسخ هذا الرمز إلى ملف htaccess الخاص بجذر مواقع الويب.
#Block bad hackers
SetEnvIfNoCase User-Agent "^libwww-perl*" block_bad_bots
Deny from env=block_bad_bots
3. تعطيل استعراض الدليل
إذا لم تقم بحظر تصفح الدليل ، فيمكن للمتسللين ببساطة إدخال عنوان URL مثل yourwebsite.com/wp-includes/ والاطلاع على جميع ملفات ومعلومات مواقعك. هذه مخاطرة أمنية كبيرة ويجب عليك إيقاف تشغيلها على الفور. يمكنك القيام بذلك عن طريق إضافة الكود التالي إلى ملف htaccess الخاص بالجذور.
# Disable directory browsing
Options All -Indexes
بمجرد إضافتة فإن الأشخاص الذين يحاولون الوصول إلى عناوين URL هذه سوف يتلقون رسالة مثل الرسالة أدناه.
4. رفض الوصول إلى الملفات
بالنظر إلى أننا نجري كل هذه التغييرات على ملف .htaccess ، فمن المنطقي فقط أن نحظر الوصول إليه حتى لا يتمكن أحد من رؤية القواعد التي وضعناها هناك! بالإضافة إلى ذلك ، يجب علينا قفل بعض الملفات الأخرى مثل ملف wp-config الذي يحتوي على جميع معلومات تسجيل الدخول إلى قاعدة البيانات الخاصة بك!
قم بذلك عن طريق إضافة ما يلي إلى ملف htaccess الخاص بجذر مواقعك. سيؤدي هذا إلى منع الوصول إلى أي ملف .htaccess في أي مكان في موقعك وهو أمر مستحسن.
# Deny access to all .htaccess files
<files ~ "^.*\.([Hh][Tt][Aa])">
order allow,deny
deny from all
satisfy all
</files>
# Deny access to readme.html
<files readme.html>
Order allow,deny
Deny from all
</files>
# Deny access to license.txt
<files license.txt>
Order allow,deny
Deny from all
</files>
# Deny access to wp-config.php file
<files wp-config.php>
order allow,deny
deny from all
</files>
# Deny access to error_log
<files error_log>
Order allow,deny
Deny from all
</files>
5. حظر الوصول إلى مجلد وملفات wp
يعد مجلد wp-include جزءًا مهمًا من برنامج WordPress ويحتوي على غالبية ملفات موقعك. هذا كل ما يحمله هذا المجلد. لا تدخل التحميلات والمكونات الإضافية والسمات الخاصة بك إلى هناك ، لذا لا يحتاج أحد حقًا الوصول إلى مجلد wp-include ، ولا حتى أنت! استخدم الكود أدناه في ملف htaccess الخاص بجذور موقع الويب الخاص بك لمنع الوصول إلى مجلد وملفات wp-include.
# Deny access to wp-includes folder and files
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^wp-admin/includes/ - [F,L]
RewriteRule !^wp-includes/ - [S=3]
RewriteRule ^wp-includes/[^/]+\.php$ - [F,L]
RewriteRule ^wp-includes/js/tinymce/langs/.+\.php - [F,L]
RewriteRule ^wp-includes/theme-compat/ - [F,L]
</IfModule>
6. حظر البرمجة النصية عبر المواقع (XSS)
يحظر مقتطف الشفرة هذا بعض هجمات XSS الشائعة ، وبشكل أساسي حقن البرامج النصية ومحاولات تعديل المتغيرات. استخدم الكود أدناه في ملف htaccess الخاص بجذور موقع الويب الخاص بك لمنع هجمات XSS الشائعة.
# Blocks some XSS attacks
<IfModule mod_rewrite.c>
RewriteCond %{QUERY_STRING} (\|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
RewriteRule .* index.php [F,L]
</IfModule>
7. تقييد الوصول المباشر إلى البرنامج المساعد وملفات PHP
بشكل عام ، لا يوجد سبب يجعل أي شخص بحاجة إلى الوصول المباشر إلى البرنامج المساعد وملفات السمات. يقوم هذا المقتطف بتعطيل الاستدعاءات المباشرة لملفات السمات والمكونات الإضافية. ما عليك سوى إضافة هذا إلى ملف htaccess الخاص بجذور موقع الويب.
# Restricts access to PHP files from plugin and theme directories
RewriteCond %{REQUEST_URI} !^/wp-content/plugins/file/to/exclude\.php
RewriteCond %{REQUEST_URI} !^/wp-content/plugins/directory/to/exclude/
RewriteRule wp-content/plugins/(.*\.php)$ - [R=404,L]
RewriteCond %{REQUEST_URI} !^/wp-content/themes/file/to/exclude\.php
RewriteCond %{REQUEST_URI} !^/wp-content/themes/directory/to/exclude/
RewriteRule wp-content/themes/(.*\.php)$ - [R=404,L]
8. حماية ضد حقن SQL
أخيرًا وليس آخرًا ، الحماية من حقن SQL في WordPress. من المهم أن نلاحظ مرة أخرى أن هذا لن يبقيك محميًا بنسبة 100٪ إلى الأبد ، لذا لا تستخدم هذا الرمز بشكل أعمى وتعتقد أن الأمر كذلك. تحتاج إلى متابعة مراقبة الأمان طوال الوقت. ومع ذلك ، سيؤدي هذا على الأقل إلى منع بعض المحاولات الأكثر شيوعًا في حقن SQL. أدخل هذا الرمز في ملف htaccess.
# Protect Against SQL Injection
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_METHOD} ^(HEAD|TRACE|DELETE|TRACK) [NC]
RewriteRule ^(.*)$ - [F,L]
RewriteCond %{QUERY_STRING} \.\.\/ [NC,OR]
RewriteCond %{QUERY_STRING} boot\.ini [NC,OR]
RewriteCond %{QUERY_STRING} tag\= [NC,OR]
RewriteCond %{QUERY_STRING} ftp\: [NC,OR]
RewriteCond %{QUERY_STRING} http\: [NC,OR]
RewriteCond %{QUERY_STRING} https\: [NC,OR]
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|%3D) [NC,OR]
RewriteCond %{QUERY_STRING} base64_encode.*\(.*\) [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(\[|\]|\(|\)|<|>|ê|"|;|\?|\*|=$).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(%24&x).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(%0|%A|%B|%C|%D|%E|%F|127\.0).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(globals|encode|localhost|loopback).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(request|select|insert|union|declare).* [NC]
RewriteCond %{HTTP_COOKIE} !^.*WordPress_logged_in_.*$
RewriteRule ^(.*)$ - [F,L]
</IfModule>
9. حظر تنفيذ كود PHP بقواعد .htaccess
بالإضافة إلى القواعد المذكورة أعلاه ، يمكنك أيضًا إيقاف تنفيذ كود PHP داخل مجلدات معينة مثل wp-content / uploads و wp-include / folder. اعتمادًا على القالب الخاص بك وإعداد البرنامج المساعد ، قد تعمل هذه الأشياء أو قد تعطل بعض الأشياء. يمكنك تجربتهم وانظر كيف تذهب. إذا أدت إلى أخطاء فقط قم بإزالة الملف.
حظر تنفيذ PHP في مجلد wp-include
لهذا ، تحتاج إلى إنشاء ملف htaccess جديد مع الكود أدناه. يجب بعد ذلك تحميل هذا الملف إلى دليل wp-include.
# Protect Against php execution
<Files *.php>
deny from all
</Files>
حظر تنفيذ PHP مجلد wp-content / uploads
بشكل عام ، لا ينبغي أن يكون لديك كود PHP في مجلد التحميلات لأنه موجود لتخزين صورك. يسمح الكود أدناه بشكل أساسي بأنواع الملفات أدناه ولكنه لا يسمح بتنفيذ PHP. مرة أخرى ، يجب أن يكون هذا ملف .htaccess جديدًا مع الكود أدناه ثم تحميله إلى دليل wp-content / uploads.
# Disable access to all file types except the following
#Order deny,allow
#Deny from all
#<Files ~ ".(xml|css|js|jpe?g|png|gif|pdf|docx|rtf|odf|zip|rar)$">
#Allow from all
#</Files>
ملف htaccess كامل لحظر السير السيئ والوصول إلى الملفات وحظر حقن SQL
لسهولة الاستخدام ، فيما يلي جميع القواعد التي تمت مناقشتها أعلاه لملف htaccess الجذر تمامًا. تذكر أن ملف htaccess الجذر موجود في الدليل الجذر لموقعك على الويب (نفس مكان ملف wp-config.php.)
##############################
#.HTACCESS FILE INFO BY
#EGYFU.COM
##############################
#BEGIN https code
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
#BEGIN Block bad hackers
SetEnvIfNoCase User-Agent "^libwww-perl*" block_bad_bots
Deny from env=block_bad_bots
# Disable directory browsing
Options All -Indexes
# Deny access to all .htaccess files
<files ~ "^.*\.([Hh][Tt][Aa])">
order allow,deny
deny from all
satisfy all
</files>
# Deny access to readme.html
<files readme.html>
Order allow,deny
Deny from all
</files>
# Deny access to license.txt
<files license.txt>
Order allow,deny
Deny from all
</files>
# Deny access to wp-config.php file
<files wp-config.php>
order allow,deny
deny from all
</files>
# Deny access to error_log
<files error_log>
Order allow,deny
Deny from all
</files>
# Deny access to wp-includes folder and files
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^wp-admin/includes/ - [F,L]
RewriteRule !^wp-includes/ - [S=3]
RewriteRule ^wp-includes/[^/]+\.php$ - [F,L]
RewriteRule ^wp-includes/js/tinymce/langs/.+\.php - [F,L]
RewriteRule ^wp-includes/theme-compat/ - [F,L]
</IfModule>
# Blocks some XSS attacks
<IfModule mod_rewrite.c>
RewriteCond %{QUERY_STRING} (\|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
RewriteRule .* index.php [F,L]
</IfModule>
# Restricts access to PHP files from plugin and theme directories
RewriteCond %{REQUEST_URI} !^/wp-content/plugins/file/to/exclude\.php
RewriteCond %{REQUEST_URI} !^/wp-content/plugins/directory/to/exclude/
RewriteRule wp-content/plugins/(.*\.php)$ - [R=404,L]
RewriteCond %{REQUEST_URI} !^/wp-content/themes/file/to/exclude\.php
RewriteCond %{REQUEST_URI} !^/wp-content/themes/directory/to/exclude/
RewriteRule wp-content/themes/(.*\.php)$ - [R=404,L]
# Protect Against SQL Injection
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_METHOD} ^(HEAD|TRACE|DELETE|TRACK) [NC]
RewriteRule ^(.*)$ - [F,L]
RewriteCond %{QUERY_STRING} \.\.\/ [NC,OR]
RewriteCond %{QUERY_STRING} boot\.ini [NC,OR]
RewriteCond %{QUERY_STRING} tag\= [NC,OR]
RewriteCond %{QUERY_STRING} ftp\: [NC,OR]
RewriteCond %{QUERY_STRING} http\: [NC,OR]
RewriteCond %{QUERY_STRING} https\: [NC,OR]
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|%3D) [NC,OR]
RewriteCond %{QUERY_STRING} base64_encode.*\(.*\) [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(\[|\]|\(|\)|<|>|ê|"|;|\?|\*|=$).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(%24&x).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(%0|%A|%B|%C|%D|%E|%F|127\.0).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(globals|encode|localhost|loopback).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(request|select|insert|union|declare).* [NC]
RewriteCond %{HTTP_COOKIE} !^.*WordPress_logged_in_.*$
RewriteRule ^(.*)$ - [F,L]
</IfModule>