كيف يمكنني استدعاء /sbin /iptables من Perl CGI تحت وضع taint؟
سؤال
عندما أدعو "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 لتبدأ ، ولكن تم كتابة العديد من الكتب حول كتابة رمز آمن أيضًا.