ما الذي يسبب "انتهاك سياسة SUEXEC" عند استدعاء Perl عبر جانب الخادم؟

StackOverflow https://stackoverflow.com/questions/2033726

  •  19-09-2019
  •  | 
  •  

سؤال

أنا أعمل على برنامج نصي بيرل الذي يسمى من جانب خادم يتضمن على خادم Apache 2. يتم عرض البرنامج النصي صفحة "خطأ الخادم الداخلي" العام بدلا من إظهار الخطأ الفعلي. عندما أتحقق من سجل خطأ Apache، أرى هذه الرسائل:

unable to include "/foobar/index.pl" in parsed file /home/foouser/domains/foosite.com/public_html/foobar/index.shtml, referer: http://www.foosite.com/foobar/
suexec policy violation: see suexec log for more details, referer: http://www.foosite.com/foobar/
Premature end of script headers: settings.pl, referer: http://www.foosite.com/foobar/

كيف يمكنني الحصول على برنامج نصي بيرل لإظهار خطأ بدلا من "خطأ خادم داخلي"؟

تحديث:

يجب أن سأل عن سؤال منفصل عن ذلك، لأنني تعلمت ذلك منذ ذلك الحين هل إرسال أخطاء إلى المتصفح (شكرا براين):

use CGI::Carp qw(fatalsToBrowser);

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

 suexec policy violation: see suexec log for more details

يحدث هذا عند تشغيل Apache في وضع SUEXEC (يبدو أنه شائع للمتضافة المشتركة). لست متأكدا مما تم تغييره بالضبط لتسبب هذا الخطأ، ولكن هذا ما أحاول معرفة ذلك.

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

المحلول

ربما كنت تستخدم استضافة مشتركة ولديك هذه المشكلة لأنك دليل النصوص أو ال ملف البرنامج النصي هل لديك حقوق أخرى من 755.

هنا واحد قضية ترجم من الهولندية.

نصائح أخرى

يستخدم CGI :: الكاربfatalsToBrowser.

 use CGI::Carp qw(fatalsToBrowser);

قد ترغب أيضا في أن ترى بلدي استكشاف الأخطاء وإصلاحها البرامج النصية PERL CGI.

من رسالة الخطأ، أنا أظن أنك غير مسموح لك بتنفيذ البرامج النصية CGI من جانب الخادم يتضمن. ما إصدار Apache الذي تقوم بتشغيله؟ إذا كان اباتشي قديم، انظر مستندات Suexec ل Apache 1.3, ، أو إذا كان أباتشي أحدث، انظر مستندات Suexec ل Apache 2.0.

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

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

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

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

قد يكون هذا 3 عوامل:

  1. مستوى الأذونات RWX وضع خطأ (مستوى التنفيذ / الترتيب)
  2. UUID / GUID لا تتطابق مع إعدادات Apache
  3. مزيج من 2 أعلاه.

تحقق Apache Suexec + ErrorLog للحصول على التفاصيل

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