ثغرة PHP وحماية حقن PHP. قواعد البرمجة الآمنة PHP

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

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

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

لا ، لن تجد في المقالة بعض المكونات الإضافية فائقة المخادع التي تقوم بتصفية جميع البيانات التي يجب تضمينها في جميع الملفات. فكرتي هي استخدام التوجيه auto_prepend_fileوبناء قائمة بالملفات المسموح بها ... لكن بشكل عام اقرأ بنفسك ...

كانت هذه الفكرة جالسة في رأسي لفترة طويلة ، لكن أخيرًا وضعت يدي عليها ، رغم أنه لا يوجد شيء معقد هنا ، وتمكنت من تطبيق هذا النظام وكتابة مقال =)

مبدأ التشغيل

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

على سبيل المثال ، قمت بفتح index.php ، وقبل تنفيذه ، كان الملف المحدد في auto_prepend_file. خلاصة القول هي أنه في هذا البرنامج النصي يمكننا التحكم مزيد من العملنصوص أخرى. بشكل تقريبي ، استمر في العمل وقم بتشغيل البرنامج النصي المطلوب ، أو اخرج على الفور ( موت()).

على سبيل المثال ، الموقف - قام مهاجم بتحميل قذيفة على موقعك من خلال نوع من الثغرات الأمنية ويحاول فتحها في متصفح. وبدلاً من قوقعته ، بدون سبب ، أعطيت له ، هنا مثل هذا الخطأ:

شيء من هذا القبيل من شأنه أن يضعني في ذهول ...

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

(لا أعرف ما إذا كانت هناك حاجة إلى هذا المخطط ، يبدو أن كل شيء يجب أن يكون واضحًا على أي حال ...)

بالطبع ، تجميع مثل هذه القائمة يدويًا ليس بالأمر النبيل ، لذلك توصلت إلى استنتاج مفاده أنه من المنطقي تنفيذ ما يسمى "وضع التعلم". الوضع الذي ستتم فيه إضافة جميع استدعاءات جميع البرامج النصية إلى قائمة الملفات المسموح بها تلقائيًا.

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

ولاحظ أن القائمة ستحتوي فقط على تلك الملفات التي ستعمل معها مباشرة. يحتوي محرك الموقع المتوسط ​​المعتاد على مجموعة من الملفات المضمنة (مع الفئات والوظائف والمكتبات والوحدات النمطية وما إلى ذلك) ، لن يتم تضمين هذه الملفات في هذه القائمة ، وسيتم حظر الوصول إليها في المستقبل على مستوى موقعنا. الحماية (بالطبع ، تتمتع المحركات المتوسطة بالحماية من بدء التشغيل المباشر ، ولكن فجأة يتم فقدان هذه الحماية في مكان ما).

ماذا نستطيع ان نفعل

نظرًا لأن هذا مفهوم ، فإننا لا نعرف كم.

  • حظر البرامج النصية غير المصرح بها (الوظيفة الرئيسية في الواقع). لكن مرة أخرى ، هذا قابل للتكوين ، لا يمكنك حظر الاتصال ، ولكن فقط إخطار المسؤول عن طريق البريد الإلكتروني
  • الإخطار بالطلبات غير المشروعة للمسؤول عن طريق البريد الإلكتروني (تقرير قصير أو تقرير كامل ، يتضمن الأخير رؤوس الحزم والبيانات طلب POSTإذا كان هناك أي)
  • يمكنك تحديد IP الخاص بالمسؤول ، والذي سيكون له حق الوصول إلى أي نصوص ، أي هذا النظاملن يتأثر (لن تشارك عناوين IP هذه في وضع التعلم). على سبيل المثال ، ليست هناك حاجة للإغلاق htaccessالبرامج مثل PhpMyAdmin و SupexDumper وغيرها من أدوات النظام.
  • بالمناسبة ، عناوين IP تدعم الأقنعة البسيطة =)
  • كود التعليق بالكامل ، ووصف تفصيلي لكل توجيه تكوين
  • هاه ماذا ...

جلسة

الآن حول كيفية إنشاء هذه الحماية في موقعك ...

للقيام بذلك ، تحتاج إلى الوصول إلى ملف php.ini

  1. أولاً ، قم بتنزيل البرنامج النصي نفسه: PrependSecuritySystem
  2. قم بفك محتويات الأرشيف (data.txt و main.php) إلى مجلد ما على الخادم ، ويفضل أن يكون ذلك في مجلد لا يمكن الوصول إليه من الويب (ليس ضروريًا ، لأنه سيعمل في أي مجلد ، فمن المنطقي إزالة البرنامج النصي بعيدًا عن عيون الكسارة)
  3. افتح ملف main.php وقم بتحرير الإعدادات. من الضروري تغيير عنوان IP والبريد الإلكتروني للمسؤول. باقي الإعدادات متروكة لك.
  4. تعيين أذونات للملفات غير المضغوطة. تحت niks ، من المستحسن تغيير مالك كلا الملفين ، بشكل مختلف عن المستخدم الذي يعمل بموجبه خادم الويب. للملف main.phpمن الضروري تعطيل التسجيل للجميع. للملف data.txtتحتاج إلى تعيين أذونات القراءة والكتابة للجميع (هذا مؤقت ، لفترة التدريب)
  5. نفتح php.iniوأدخل ما يلي:
    auto_prepend_file = [المسار إلى ملف main.php غير مضغوط]
  6. مع هذه اللحظةيبدأ تدريب النظام. ننتظر فترة زمنية معينة ، كافية برأيك للتدريب الكامل لهذا النظام.
  7. في نهاية التدريب ، افتح الملف main.phpوتحرير الثابت PSS_STATUS_BLOCK، اضبط قيمته على حقيقي، يحفظ
  8. قم بتغيير الأذونات على ملف data.txt. نحن نحظر التحرير ملف معينللجميع.
  9. الآن تحول النظام إلى وضع حظر البرامج النصية غير المصرح بها

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

إذا كنت بحاجة إلى إعادة تدريب النظام (من البداية أو الملحق) ، فأنت بحاجة إلى:

  1. السماح بالكتابة إلى ملف data.txt
  2. مسح محتويات data.txt (فقط إذا كنت بحاجة إلى إعادة تدريب النظام من البداية)
  3. تحرير ثابت PSS_STATUS_BLOCKفي ملف main.phpمن خلال تحديد قيمته على خطأ شنيع
  4. نحن نعيد التدريب ...
  5. في نهاية إعادة التدريب ، نقوم بتحرير الثابت PSS_STATUS_BLOCKتحديد قيمته مرة أخرى إلى حقيقي
  6. نحظر كتابة ملف data.txt

حسنًا ، الآن عن الحزن

لن أخفي ، والآن سأتحدث عن أوجه القصور.

  • ربما يكون العيب الرئيسي مقارنة به الذي يتلاشى به الآخرون هو أنه يمكن تجاوز هذا النظام. تسأل: كيف ذلك؟ كل شيء بسيط للغاية ، توجيه auto_prepend_fileيمكن تحديدها أيضًا في htaccess. وإذا اقتربت بعقلانية ، فعندئذ إذا تمكن المهاجم فجأة من ملء القذيفة ، فمن المؤكد أنه سيكون قادرًا على ملء htaccessحيث يمكنه تعطيل التوجيه الأصلي.
    هذا يعمل فقط تحت اباتشي، ولكن على سبيل المثال تحت nginxلن تعمل هذه الخدعة (لا يحتوي nginx على ملفات htaccess.). لكن! ضمن Nginx ، يمكنك رفع ملفات.
  • يمكن للمهاجم تحرير برنامج نصي "مسموح به" إذا كانت هناك حقوق صالحة للقيام بذلك ، ولا يمكن لنظامنا ، للأسف ، فعل أي شيء حيال ذلك. ما لم تكن بحاجة إلى تعيين الأذونات الصحيحة لجميع الملفات القابلة للتنفيذ
  • بالإضافة إلى PHP ، هناك جميع أنواع perl و cgi وما إلى ذلك ... هذا النظام لا يعمل معهم.
  • حمولة إضافية. لكن هذا الحمل سيكون ملحوظًا vrtyali.

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

خاتمة

لا يزال ، على أي حال ، هذا مفهوم ، ربما يمكنك التوصل إلى شيء أفضل بناءً عليه. أو ربما يناسبك نظامي.

في رأيي ، الحماية المعقولة لا تحدث كثيرًا. الأمر متروك لك لاستخدام شيء مشابه أو لا على مواقعك.

تفو. حسنًا ، كتبت ، ذهب اليوم بأكمله تقريبًا. سامحني إذا وصفته بطريقة فوضوية قليلاً. بشكل عام ، اطرح أسئلتك في التعليقات ، سأحاول الإجابة.

ملاحظة: على الرغم من أنني قمت بالترميز بالشكل المناسب قدر الإمكان ، إلا أن البرنامج النصي قد يحتوي على أخطاء. تم اختباره على win / apache / php 5.2 - كان كل شيء على ما يرام.

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

مطور الموقع ، المهتم بقضايا الأمان ، ملزم بأن يكرر باستمرار: "لا تثق في الشبكة". إذا كنت قلقًا بشأن حماية موقعك ، فكرر هذا القول أثناء ترميز الصفحات المستقبلية على موقعك. أي معلومات يتم إرسالها إلى الخادم عبر الشبكة (سواء كان عنوان URL أو بيانات من نماذج HTMLأو البيانات الواردة من خلال البعض الآخر منفذ الشبكة) يحتمل أن تكون خطرة. تقترح هذه المقالة عدة طرق لتأمين المعلومات الواردة. من الضروري ليس فقط تطبيق هذه الأساليب ، ولكن أيضًا الانتباه إليها وقت محددمن أجل اكتشاف الأخطار المحتملة الأخرى وإيجاد طرق لمنعها.

القاعدة الثانية لإنشاء موقع آمن هي: "تقليل الضرر إلى أدنى حد". ماذا يحدث إذا تبين أن البرنامج الذي تكتبه ، والذي تعتقد أنه موثوق به تمامًا ، معرض للخطر؟ حتى لمجرد البقاء في أمن كامل، للحد من الضرر الذي يمكن أن يسببه المهاجم من خلال استغلال هذه الثغرة الأمنية.

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

لكن كل هذه الاعتبارات لا ينبغي أن تقف في طريق نواياك ، مثل جعل موقع التجارة الإلكترونية الخاص بك على الإنترنت.

هجمات محتملة

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

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

غير مدركين لمدى الإهانة لعنوان برنامج تكسير البرامج ، يشرع العديد من المبرمجين المبتدئين في هذا المسار من خلال اللجوء إلى الأدوات والبرامج النصية التي يجدونها على الويب. تسمى هذه المفرقعات المبتدئين بـ script-kiddies أو ، في منطقتنا ، coolhackers. هؤلاء الناس غالبًا لا يعرفون حتى ما يفعلونه. عادةً ما تكون هذه الفئة من المهاجمين وراء الهجمات البدائية مثل اختراق الموقع و XSS وحقن SQL.

اختراق الموقع وهجمات XSS

تعد تسويات الموقع ، التي غالبًا ما تكون مزعجة أكثر من كونها ضارة بالفعل ، شائعة جدًا ، حيث توفر العديد من المواقع فرصة لمخترق الأمان ليعلن للعالم أنه نجح في تحقيق هدفه. أحيانًا يكون متصفح الويب وحده كافيًا للتهديد على موقع ويب سيئ التصميم. ضع في اعتبارك ، على سبيل المثال ، البرنامج التالي:

صفحة مع نموذج بسيط لإضافة التعليقات ". $ row [" text "].""; } } ?> أساسيات PHP



ينفذ هذا البرنامج نظام تعليق في شكل بدائي للغاية (إذا كنت قد قرأت دليل PHP الخاص بي من البداية ، فقد لا تكون على دراية بعمليات قاعدة البيانات ؛ إذا كان الأمر كذلك ، فإنني أوصيك بالعودة إلى هذه المقالة بعد قراءة المادة ذات الصلة على MySQL).

عند قراءة هذا الرمز ، يبدأ المبرمج المتمرس في الشعور بعدم الأمان (تذكر - "لا تثق في الشبكة"). يقبل مثل هذا البرنامج بيانات النموذج التي من المتوقع أن تحتوي على نص التعليق. تم تخصيص هذا النص لمتغير التعليق $ وتخزينه في قاعدة البيانات لعرضه على زوار المستقبل. إذا كانت البيانات المدخلة هي ما نتوقعه ، فلن تكون هناك مشاكل.

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

تحميل...
قمة