سؤال

عندما أدعو "sudo /sbin /iptables ..."

Insecure dependency in system while running with -T switch at usr/lib/perl5/vendor_perl/5.8.8/IPC/Run3.pm line 403

حاولت إضافة "/sbin:/etc/sysconf:/etc/init.d" في $ env {'path'} ولكن لا يوجد أي نجاح. أي شخص لديه أي فكرة؟

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

المحلول

من المفترض أن تقيد المسار ، بمعنى: تعيينه على عدد صغير من القيم المعروفة التي تلبي متطلبات معينة (مثل $ENV{PATH} = '/sbin:/usr/sbin:/usr/bin';) ، لا تضيف إليها. نرى تنظيف طريقك في perlsec للحصول على التفاصيل.

في حالتك البسيطة ، من الأفضل مسحها تمامًا والاعتماد فقط على مكالمات النظام بأسماء الملفات المؤهلة تمامًا.

delete @ENV{qw(PATH ENV)};
system qw(/usr/bin/sudo /sbin/iptables -h);

نصائح أخرى

نعم ، لديك تبعية غير آمنة في النظام أثناء التشغيل باستخدام مفتاح -T. : ص

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

عليك أن تكون حقًا احذر عند تشغيل البرامج الخارجية أو إجراء عمليات النظام من CGI - على سبيل المثال ، فكر في ما قد يحدث إذا دخلت `rm -rf /` كمدخلات المستخدم. هناك الكثير من المعلومات في Perldoc Perlsec لتبدأ ، ولكن تم كتابة العديد من الكتب حول كتابة رمز آمن أيضًا.

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