سؤال

مرحبا، لدي بضع أسئلة حول PHP Exec () و Passthru ().

1)
لم أستخدم exec () في PHP لكنني رأيت ذلك يستخدم في بعض الأحيان مع ImageMagick. أنا الآن فضولي، ما هو بعض الاستخدامات الشائعة الأخرى حيث exec جيدة في تطبيق ويب؟

2)
منذ حوالي 6 سنوات عندما بدأت في اللعب أولا مع PHP، لم أكن أعرف حقا أي شيء، فقط أشياء أساسية للغاية وكان لدي موقع تم اختراقه وشخص ما إعداد ملف PHP الذي كان يستخدم وظيفة PASSTHRU () لتمرير حفنة من حركة المرور عبر موقعي لتحميل الموسيقى أو الفيديو المجانية وأصيبت بتهمة عرض النطاق الترددي 4000 $ من مضيفي! بعد 6 سنوات، أعرف الكثير عن كيفية استخدام PHP ولكن ما زلت لا أعرف كيف حدث لي هذا من قبل. كيف يمكن لشخص ما عن إضافة ملف إلى الخادم الخاص بي من خلال رمز سيء؟

هل كانت مفيدة؟

المحلول

1] Exec () مفيد حقا عند:

أ) تريد تشغيل برنامج / أداة مساعدة على الخادم الذي لا يحتوي PHP على قيادة معادلا ل. على سبيل المثال FFMPEG هو الأداة المساعدة الشائعة تعمل عبر مكالمة EXEC (لجميع أنواع تحويل الوسائط).

ب) تشغيل عملية أخرى - التي يمكنك حظرها أو عدم حظرها - هذا قوي جدا. في بعض الأحيان كنت كانت pcnt_fork على الرغم من، أو ما شابه ذلك، إلى جانب CL ALS الصحيح لعدم الحجب.

ج) مثال آخر هو عندما يتعين علي معالجة XSLT 2.0 - لا بد لي من Exec () خدمة Java الصغيرة التي أدت إليها للتعامل مع التحولات. مفيد جدا. PHP لا يدعم تحويلات XSLT 2.0.

2] لعنة هذا عار. حسنا، الكثير من الطرق. هناك عائلة من الضعف المسمى، "الملف البعيد يتضمن الفتوة"، والتي تسمح أساسا بمهاجما لتشمل مصدر تعسفي وبالتالي تنفيذها على الخادم الخاص بك. ألق نظرة على: http://lwn.net/articles/203904/

أيضا، المذكورة أعلاه، قل لديك شيء من هذا القبيل (مبسط بكثير):

exec("someUnixUtility -f $_GET['arg1']"); 

حسنا، تخيل المهاجم، url.come؟ arg1 = "blah؛ rm -rf /"، فإن الكود الخاص بك سوف يغلي في الأساس إلى:

exec("someUnixUtility -f blah; rm -rf /");

التي في UNIX، يمكنك فصل الأوامر W / The؛ لذلك نعم - قد يكون ذلك الكثير من الضرر.

الشيء نفسه مع تحميل الملف، تخيل أنك تجريد الأحرف الأربعة الأخيرة (.EXT)، للعثور على التمديد. حسنا، ماذا عن شيء مثل هذا "exploit.php.gif"، ثم تقوم بتجريت الملحق، لذلك لديك Exploit.php وانتقله إلى مجلد / IMGS / IMGS. حسنا، كل المهاجم يجب أن يفعل الآن هو استعراض للمستخدمين / IMGS / Exploit.php ويمكنهم تشغيل أي رمز يريدون. لقد كنت مملوكة في تلك المرحلة.

نصائح أخرى

  1. يستخدم exec أو عندما تريد تشغيل برنامج مختلف.

  2. ال وثائق passthru. يقول:

تحذير

عند السماح بمرور البيانات التي توفرها المستخدم إلى هذه الوظيفة، استخدم escapeshellarg() أو escapeshellcmd() للتأكد من أن المستخدمين لا يستطيعون خداع النظام في تنفيذ الأوامر التعسفية.

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

exec() يتيح لك استخدام التعليمات البرمجية المترجمة الموجودة على الخادم الخاص بك، والتي ستجري بشكل أسرع من PHP، والتي يتم تفسيرها.

لذلك إذا كان لديك كمية كبيرة من المعالجة التي يجب القيام بها بسرعة، exec() يمكن أن يكون مفيدا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top