Frage

Als ich invoke "sudo / sbin / iptables ..." in meinem Perl-CGI-Skripte, erhalte ich die Fehlermeldung:

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

Ich habe versucht, "/sbin:/etc/sysconf:/etc/init.d" in $ ENV hinzufügen { 'PATH'}, aber immer noch ohne Erfolg. Jeder hat eine Idee?

War es hilfreich?

Lösung

Sie sollen den Weg beschränken, das heißt: es auf eine kleine Anzahl von bekannten Werten einstellen, die bestimmte Anforderungen (wie $ENV{PATH} = '/sbin:/usr/sbin:/usr/bin';) erfüllen, nicht ihm hinzufügen. Siehe Reinigen Sie Ihren Weg in perlsec für die Details .

In Ihrem einfachen Fall ist es am besten, es ganz zu löschen und verlassen sich nur auf Systemaufrufe mit vollständig qualifizierten Dateinamen.

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

Andere Tipps

Ja, Sie haben eine unsichere Abhängigkeit im System, während mit dem -T-Schalter ausgeführt wird. : P

Sie Ihr Skript in taintperl Modus ausgeführt wird, und ruft ein externes Programm (mit sudo, nicht weniger) mit Daten basieren auf Informationen übergeben von dem Benutzer (die verdorben werden könnte). Wenn Sie wirklich sicher, dass die Ausgabe gültig ist, und stellt kein Risiko, müssen Sie untaint es: siehe die offizielle Dokumentation über Wäsche verdorbene Daten .

Sie müssen , um wirklich Sie vorsichtig, wenn externe Programme laufen oder Durchführung von Systemoperationen von einem CGI - zum Beispiel überlegen, was passieren könnte, wenn Sie `rm -rf /` als Benutzereingabe eingeben. Es gibt viele Informationen unter Perldoc perlsec zum Einstieg, aber mehrere Bücher geschrieben worden über das Schreiben sicherer Code als auch.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top