اذهب إلى المحتوى
  • 0

ما الفرق بين الدوال exec و system و passthru في PHP؟

Emad Saif

السؤال

أقوم في بعض الأحيان بتنفيذ أوامر على النظام بإستخدام الدوال:

  • exec
  • system
  • passthru

لا أفهم الفرق بين هذه الدوال وبعضها، على سبيل المثال إذا أردت تشغيل سكريبت bash على لينكس، فهل إستعمال أي دالة من هذه الدوال سوف يؤدي نفس النتيجة؟

وهل هناك حالة أو إستعمال محدد لكل دالة من هذه الدوال؟

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 1

كل الوظائف موجهة لتنفيذ أوامر معينة تختلف فيما بينها من حيث أن: 

  • الوظيفة system تقوم بتنفيذ الأمر وإعادة خرج الأمر ان وجد. فهنا ستقوم أنت نفسك بالتعامل مع الخرج وفق نمط او فكرة معينة مثل تنسيقه.
  • الوظيفة exec تقوم بتنفيذ الأمر وعرض خرج الأمر مباشرة، أي انه لن يمكن تخزينه في متغير بغرض تنسيقه أو عرضه وفق شكل معين. 
  • الوظيفة passthru تقوم بتنفيذ الأمر وعرض خرج الأمر  بشكل خام (وحدات ثنائية binary) مباشرة.

يجب الحذر بشأن استعمال هاته الوظائف ان كنت تستقبل أو تقوم بتخصيص هاته الاوامر وفق تعامل المستخدمين معها، ففي هجمات تزوير الطلبات عبر المواقع CSRF مثلا يمكن حقن سطر أوامر يسمح للمستهدف ܏بتنفيذ أي أوامر تخص النظام على خادم ويب. خصوصا في الخوادم الهشة مثل بعض تلك التي توفر استضافات مجانية، فهذا يعطي المهاجم تحكما كاملا بالنظام فضلا عن تحكمه بالموقع أو التطبيق. يتم كحل لهاته المشاكل تغليف وسائط الأوامر باستخدام الدالة escapeshellarg()‎ أو escapeshellcmd()‎ مما يجعلها غير قابلة للتنفيذ ومتحقق من صحة كل قيمة مدخلة. 

فان كنت تستقبل مثلا متغيرا path عبر الطلب GET لعرض محتويات مجلد ما لمشرف الموقع كالتالي: 

<pre>
<?php system('ls ' . $_GET['path']); ?>
</pre>

فإن تعليف الأمر سيكون كـ: 

<pre>
<?php system('ls ' . escapeshellarg($_GET['path'])); ?>
</pre>

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...