كيف تصلب PHP الخاص بك لأمن أفضل

يستخدم PHP على نطاق واسع بين العديد من المواقع & التطبيقات ، ولكن يجب أن تكون مشددة للأمن. إليك بعض النصائح المتقدمة لتأمين ملف تهيئة PHP.


كيفية تقوية PHP

تعد PHP إلى حد بعيد لغة برمجة النهاية الخلفية الأكثر استخدامًا اليوم. حتى الآن ، انتهى 80٪ من المواقع ذات الواجهة الخلفية تنفيذ PHP. WordPress و Joomla و Drupal مدعومون جميعًا بها. لسوء الحظ ، أصبحت PHP هدفًا شائعًا لمحاولات القرصنة ، ولهذا السبب يعد تأمين تكوينها أمرًا بالغ الأهمية. اتبع هذه الخطوات البسيطة لتشديد تكوين PHP الخاص بك وللمساعدة في حمايته من اختراق الثغرات الأمنية.

حدد موقع ملف تكوين PHP

اسم ملف التكوين لـ PHP هو php.ini ، والذي ستحتاج إلى تحريره. يختلف موقع الملف بناءً على شركة الاستضافة ونوع الخادم.

تحرير باستخدام الاستضافة المشتركة

إذا لم تكن متأكدًا من مكان ملف php.ini الخاص بك ، فاتصل بموفر خدمة الاستضافة. يطلب بعض الموفرين وضع إعدادات PHP في ملف “.htaccess” في جذر الويب. إذا كان هذا هو الحال ، فيجب إضافة إعدادات PHP واحدة لكل سطر بالتنسيق “قيمة اسم php_value”. ضع في اعتبارك أن مزود الاستضافة الخاص بك قد يمنع تعديل إعدادات معينة.

تحرير باستخدام VPS أو خادم مخصص

يبسط Web Host Manager (WHM) عملية تحرير ملف تكوين PHP من خلال توفير واجهة مستخدم بسيطة. ما عليك سوى العثور على قسم “تكوين الخدمة” في WHM والنقر فوق “محرر تكوين PHP”. في الصفحة التي تظهر ، حدد “الوضع المتقدم”.

محرر تكوين PHP

إذا كنت لا تستخدم لوحة تحكم مثل WHM ، فستحتاج إلى فتح وتعديل ملف php.ini مباشرةً. سيختلف موقع php.ini باختلاف نظام تشغيل الخادم الخاص بك. تضع العديد من أنظمة Linux الملف على المسار “/etc/php.ini”. يمكنك تأكيد موقعها عبر سطر الأوامر. ابدأ بتسجيل الدخول إلى الخادم عبر SSH (اتصل بموفر خدمة الاستضافة للحصول على الإرشادات). بمجرد الاتصال ، أدخل الأمر “php –ini” واضغط على Enter. البحث عن السطر الذي تم إرجاعه بعنوان “ملف التكوين المحمل” ولاحظ مسار ملف php.ini.

يمكنك فتح وتعديل ملف php.ini باستخدام محرر نصوص يعمل داخل سطر الأوامر ، مثل “nano” لنظام Linux. ببساطة اكتب “nano /path/to/php.ini” واضغط على Enter.
نانو لينكس

هيكل php.ini

داخل php.ini ، يتم وضع كل إعداد على سطر خاص به بالتنسيق “settingname = settingvalue”. أي سطر يبدأ بفاصلة منقوطة هو تعليق ، لذلك لا تقم بتحديث أي من هذه الأسطر.

تحرير إعدادات التكوين

فيما يلي قائمة بالإعدادات التي يجب مراجعتها وتحديثها لتحسين الأمان. يتم تجميع الإعدادات في عدة أقسام أدناه بناءً على غرضها.

القسم 1: الاتصالات عن بعد

allow_url_fopen = 0
allow_url_include = 0

لا تسمح للأغلفة fopen بفتح عناوين URL البعيدة. لا يمكن الوثوق دائمًا بالمحتوى البعيد ؛ يضمن تعطيل هذه الخيارات أن أغلفة fopen يمكنها تحميل المحتوى المحلي فقط.

القسم 2: إعدادات وقت التشغيل

max_input_time = 30
max_execution_time = 30

قم بتحديد الحد الأقصى من الوقت المسموح به لمعالجة المدخلات ، بالإضافة إلى الحد الأقصى من الوقت الذي يمكن تشغيل البرنامج النصي PHP فيه. هنا ، تم ضبط كلا الإعدادين على حد 30 ثانية. هذا يضمن أنه في حالة اختراق البرنامج النصي ، لن يقرأ المدخلات أو يعمل لفترة طويلة من الزمن. يجب ألا يتطلب النص البرمجي جيد الترميز أكثر من 30 ثانية للتشغيل.

حد الذاكرة = 8 م

تأكد من أن نص PHP لا يستخدم أبدًا أكثر من 8 ميجابايت من الذاكرة. في حالة اختراق برنامج نصي ، فإن هذا الإعداد يحد بشكل فعال من حجم الذاكرة التي يمكن للبرنامج النصي الاستفادة منها.

register_globals = إيقاف

يمنع تعطيل هذا الإعداد بشكل فعال تخزين بيانات الطلب تلقائيًا كمتغير. يثير تسجيل المتغيرات العالمية العديد من المخاوف ؛ أحد الأمثلة هو أنه يمكن تعديل متغيرات البيئة بسهولة. لتجنب هذه المشكلات ، تأكد من إيقاف هذا الإعداد.

expose_php = 0

بشكل افتراضي ، يتم عرض وجود PHP بالإضافة إلى رقم إصداره كجزء من استجابات HTTP. نظرًا لأن هذا يوفر رؤية غير ضرورية للخادم ، فمن المستحسن إيقاف هذا.

cgi.force_redirect = 1

تأكد من أنه لا يمكن تشغيل PHP إلا من خلال قاعدة إعادة توجيه خادم الويب. هذا يمنع استدعاء PHP مباشرة ، مما يحسن الأمن.

القسم 3: قيود إدخال البيانات

post_max_size = 256 كيلوبايت
max_input_vars = 100

يمكن للمتسللين محاولة إغراق موارد تطبيقات الويب عن طريق إرسال بيانات جماعية إليها ، مما يمكن أن يقلل من سرعات النقل وموارد الخادم المتاحة. يمكن تقليل تأثير هذا النوع من الهجمات عن طريق تقليل الحجم الأقصى لبيانات POST ، وكذلك عن طريق الحد من كمية بيانات الطلب. لاحظ أن “post_max_size” تؤثر أيضًا على الحجم الأقصى لتحميل الملفات ؛ إذا كان تطبيقك يحتوي على إمكانات تحميل الملفات ، فتأكد من أن قيمة هذا الإعداد لا تقل عن “upload_max_filesize” على الأقل.

القسم 4: معالجة الأخطاء

display_errors = 0
display_startup_errors = 0

لا يجب أبدًا عرض رسائل الخطأ للمستخدم النهائي ، نظرًا لأن الرسائل غالبًا ما تحتوي على معلومات تفصيلية حول رمز التطبيق والخادم. يمكن استخدام هذه المعلومات لمساعدة المتسللين. بدلاً من ذلك ، قم بتسجيل رسائل خطأ إلى ملف آمن على الخادم.

log_errors = 1
error_log = / home / johndoe / error_log

يجب تسجيل أخطاء PHP من أجل تصحيح رمز التطبيق وكذلك للتحقيق في نقاط الضعف المحتملة. إذا كنت تستخدم مدير ملفات مثل الذي تم تضمينه مع cPanel ، فإن الموقع المناسب والآمن لسجل الأخطاء يقع مباشرة خارج جذر الويب.

القسم 5: تقييد الوصول إلى الملف

open_basedir = "/ home / johndoe / public_html"

يضمن Open_basedir أن PHP يمكنه تضمين الملفات من داخل المجلدات المدرجة فقط. هذا يحسن الأمن من خلال منع البرامج النصية PHP من الوصول غير المقصود إلى الملفات الآمنة خارج مسارات القائمة البيضاء. لاحظ أنه يجب عليك إضافة كل دليل يحتاج PHP إلى الوصول إلى القائمة البيضاء ، بما في ذلك تحميل الملف المؤقت وأدلة الجلسة (انظر أدناه). يمكنك إضافة أدلة متعددة إلى القائمة بوضع نقطتين بين كل دليل. فمثلا:

open_basedir = "/ home / johndoe / public_html: / var / lib / php / tmp_upload: / var / lib / php / session"

القسم 6: تحميل الملفات

file_uploads = 0

إذا كان تطبيقك لا يحتوي على وظائف لتحميل الملفات من أجهزة كمبيوتر المستخدمين ، فمن المستحسن تعطيل ميزة PHP هذه تمامًا. وهذا يساعد على منع المتسللين من تحميل البرامج النصية التي يمكن بعد ذلك إدخالها في التطبيق.

file_uploads = 1
upload_max_filesize = مليون 1

إذا كان تطبيقك يتطلب إمكانات تحميل الملفات ، فاحتفظ بـ “upload_max_filesize” على أقل قيمة ممكنة.

upload_tmp_dir = / var / lib / php / tmp_upload

بشكل افتراضي ، يتم وضع تحميلات الملفات المؤقتة في دليل يمكن كتابته من قبل جميع مستخدمي النظام. يجب تبديل الموقع إلى دليل أكثر أمانًا. تأكد من أن موقع الدليل الجديد غير موجود داخل جذر الويب. إذا كنت تستخدم مدير ملفات مثل الذي تم تضمينه مع cPanel ، فإن موقعًا سهلًا وآمنًا لإنشاء دليل التحميل يقع مباشرة خارج جذر الويب (أي نفس الدليل الذي يوجد public_html فيه). موقع آمن آخر هو إنشاء الدليل داخل دليل PHP في “/ var / lib”. يعتمد المسار على نظام التشغيل ، أي “/ var / lib / php” أو “/ var / lib / php5”. إذا كانت قيود open_basedir سارية المفعول ، فتأكد من تضمين دليل التحميل المؤقت في القائمة البيضاء open_basedir.

القسم 7: أمن الجلسة

تُستخدم الجلسات للحفاظ على المعلومات عبر الطلبات المتعددة للمستخدمين الفرديين. يتم تخزين المعلومات الفعلية على الخادم ، ويتم استخدام ملف تعريف ارتباط (أو بيانات طلب HTTP أقل أمانًا) تحتوي على معرف جلسة للتحقق من صحة المستخدمين. يتم استخدام الجلسات لأغراض تشمل المصادقة في تطبيق ويب ، وهذا أحد أسباب أهمية أمانه. يمكن تحديث الإعدادات التالية للمساعدة في تقليل مخاطر اعتراض الجلسة.

session.use_strict_mode = 1

قم بإنشاء معرف جلسة جديد إذا أرسل المستعرض معرفًا لم يتم تعريفه مسبقًا. هذا يساعد على منع هجوم يسمى تثبيت الجلسة.

session.cookie_httponly = 1

اسمح بالوصول إلى ملف تعريف ارتباط الجلسة فقط من خلال طلب HTTP ، وليس من مصادر أخرى مثل JavaScript. هذا يساعد على منع هجوم يسمى هجوم XSS.

session.use_cookies = 1
session.use_only_cookies = 1
session.use_trans_sid = 0

حفظ معرف الجلسة في ملف تعريف الارتباط ، بدلاً من إرساله كمعلمة URL. يساعد ذلك في الحفاظ على أمان جلسة المستخدم من خلال منع هجمات تثبيت الجلسة.

session.name = custom_session_id

تقوم ملفات تعريف الارتباط بتخزين معلوماتها بتنسيق قيمة المفتاح. يُنصح بتحديث اسم المفتاح الافتراضي لملف تعريف الارتباط الذي يقوم بتخزين معرف الجلسة. قم بتحديث “custom_session_id” بقيمة مخصصة.

session.cookie_secure = 1

إذا كان تطبيق الويب الخاص بك يعمل عبر بروتوكول HTTPS للأمان ، فقم بتمكين هذا الإعداد لفرض إمكانية الوصول إلى ملفات تعريف الارتباط التي تحتوي على معرفات الجلسات فقط عبر اتصال آمن.

session.referer_check = example.com

تحقق من مصدر الطلب لتحديد ما إذا كان سيتم السماح بالوصول إلى بيانات الجلسة. حدِّث قيمة الإعداد هذه إلى اسم نطاق تطبيقك للمساعدة في منع الوصول إلى معلومات الجلسة إذا تم تحميل برنامج نصي من مصدر خارجي.

session.save_path = "/ var / lib / php / session"

مسار حفظ ملف الجلسة الافتراضي قابل للكتابة من قبل جميع مستخدمي النظام. يجب تبديل الموقع إلى دليل أكثر أمانًا. تأكد من أن موقع الدليل الجديد غير موجود داخل جذر الويب. إذا كنت تستخدم مدير ملفات مثل الذي تم تضمينه مع cPanel ، فإن موقعًا سهلًا لإنشاء دليل الجلسة يقع مباشرةً خارج جذر الويب (أي نفس الدليل الذي يوجد public_html بداخله). موقع آمن آخر هو إنشاء الدليل داخل دليل PHP في “/ var / lib”. يعتمد المسار على نظام التشغيل ، أي “/ var / lib / php” أو “/ var / lib / php5”. إذا كانت قيود open_basedir سارية المفعول ، فتأكد من تضمين مسار حفظ الجلسة في القائمة البيضاء open_basedir.

session.hash_function = sha512

SHA-512 خوارزمية تجزئة أكثر أمانًا لإنشاء معرفات الجلسات مقارنة بوظيفة تجزئة MD5 الافتراضية. هذه الخوارزمية متاحة في PHP الإصدار 5.3+. إذا كنت تستخدم إصدارًا أقل من PHP ، فاستخدم خوارزمية التجزئة SHA1 بدلاً من ذلك. للقيام بذلك ، قم بتعيين “session.hash_function = 1”.

session.bug_compat_42 = 0
session.bug_compat_warn = 0

سيضمن تعطيل هذه الإعدادات أنه لا يمكن تهيئة متغيرات الجلسة بشكل عام ، مما يحسن الأمان.

تعطيل الوظائف الضعيفة

disable_functions = ini_set ، php_uname ، getmyuid ، getmypid ، passthru ، تسرب ، استماع ، diskfreespace ، tmpfile ، link ، ignore_user_abord ، shell_exec ، dl ، set_time_limit ، exec ، system ، highlight_file ، مصدر ، show_source ، fpathix ، posix_geteuid، posix_getgid، posix_getgrgid، posix_getgrnam، posix_getgroups، posix_getlogin، posix_getpgid، posix_getpgrp، posix_getpid، POSIX، _getppid، posix_getpwnam، posix_getpwuid، posix_getrlimit، posix_getsid، posix_getuid، posix_isatty، posix_kill، posix_mkfifo، posix_setegid، posix_seteuid، posix_setgid، posix_setpgid، posix_setsid، posix_setuid، posix_times ، posix_ttyname ، posix_uname ، proc_open ، proc_close ، proc_get_status ، proc_nice ، proc_terminate ، phpinfo ، popen ، curl_exec ، curl_multi_exec ، parse_ini_file ، allow_url_fopen ، allow_url_includch ، chntgr_p ،

يمكن أن توفر العديد من وظائف PHP أبوابًا مفتوحة لاختراق تطبيقات الويب إذا لم يتم استخدامها بعناية. على سبيل المثال ، يؤدي إرسال إدخالات تم التحقق منها بشكل غير صحيح إلى العديد من هذه الوظائف إلى مشكلات أمنية. يعد تعطيل هذه الوظائف تمامًا حلاً بسيطًا وفعالًا للمشكلة. ومع ذلك ، إذا كان التطبيق الخاص بك يتطلب أيًا من الوظائف المدرجة ، فقم بإزالته من القائمة.

مخبأ الصابون

soap.wsdl_cache_dir = / var / lib / php / soap_cache

كما هو الحال مع تحميل الملفات وبيانات الجلسة ، لا يجب تخزين بيانات ذاكرة التخزين المؤقت SOAP داخل الدليل المؤقت الافتراضي. قم بتعيين هذا إلى دليل أكثر أمانًا.

أعد تشغيل PHP

بعد إجراء التغييرات على ملف php.ini ، ستحتاج إلى إعادة تشغيل خادم الويب. يوفر WHM زرًا لإعادة تشغيل الخادم بعد تحرير الملف. إذا كنت لا تستخدم لوحة تحكم مثل WHM ، فستحتاج إلى إعادة تشغيل الخادم عبر سطر الأوامر. بالنسبة إلى Apache ، أدخل الأمر “sudo apachectl graceful” واضغط على Enter.

استنتاج

من خلال تحديث هذه الإعدادات ، تكون بيئة PHP الخاصة بك في وضع حماية أكبر من محاولات الاختراق. يعد تأمين بيئة PHP من المتسللين خطوة مهمة لحماية سمعة عملك. ومع ذلك ، ضع في اعتبارك أن التطبيق الذي تم ترميزه بشكل سيئ يكون دائمًا بابًا مفتوحًا للاختراق ، حتى مع تكوين PHP المقوى. ابدأ بالمحافظة على صلابة التكوين الخاص بك ، ومن هناك اكتب دائمًا رمز التطبيق الآمن.

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Like this post? Please share to your friends:
    Adblock
    detector
    map