Patrick Andrieu: Tainted Love again, .pl vs .cgi - Lese-Wink an Alexander(HH)

Beitrag lesen

Hallo Alexander!

Moin Moin!

Jaja, Ihr Nordlichter... hier sache mer: Ei, Gudde!

Vielen Dank für die ausführlichen Erklärungen, die schon mal einen »fachlich hilfreich« Wert sind!

tainted_test.PL -> 500er
tainted_test.CGI -> funzt(TM)
Ersteres ist kaputt, siehe error_log.

Nein, ist nicht ;) Hatten wir letztens schon: der 500er wird durch das -T in der Shebang verursacht. Und an die error.log bei 1&1 komme ich nach wie vor nicht, ich ahne zwar, wo die sich befindet, ernte aber ein »permission denied«, jedesmal wenn ich mit PuTTy oder mit Perl versuche, in das vermutete Verzeichnis 'reinzuschauen. Eine Frage an den Support wurde mit einem Hilfsmittel beantwortet, wie man mit PHP eigene Error-Dateien generiert, aber das interessiert mich nicht! Ich _will_ die error-Logs vom Server!

Aber das war überhaupt der Grund meines Postings, dass es mit meinem lokalen Apache _genauso_ ist: .pl mit -T wirft einen 500er, .cgi mit -T nicht.

Nein. Tainted Mode hat nichts mit Dateiendungen oder URLs zu tun.

Glaube ich Dir. Nur, warum klappt das bei 1&1 nicht? Kann jemand mit einem anderen Webhoster ein .pl-Skript mit -T in der Shebang hochladen, und mir sagen, was passiert?

Du rufst ein Script mit "#!/usr/bin/perl -T" indirekt via perl executable auf, ohne dort ebenfalls -T zu benutzen.
perl taint_mode_script.pl
wird nie funktionieren, es muß immer
perl -T taint_mode_script.pl

Dann _kann_ es einfach nicht funktionieren, entnehme ich aus dieser Erklärung - weder beim Webhoster auf Linux, noch lokal auf Windows, oder? CGI-Skripte, die über einen Browser aufgerufen werden, können ja nicht mit perl -T skriptname.pl augerufen werden... Oder verstehe ich alles falsch?

Hast Du mod_perl aktiviert, dass auf .pl via Apache::Registry reagiert und zudem OHNE Taint-Mode läuft? Letzteres wäre ohnehin nicht sehr clever.

Nein. Weder lokal noch bei 1&1 ist mod_perl aktiv.

code lang=C
execl("/usr/bin/script.pl","/usr/bin/script.pl","foo","bar",NULL);

Das verstehe ich überhaupt nicht, sorry, ich habe von ZÄH keine Ahnung - von UNIX-Befehlen auch nicht, übrigens ;)

-w und andere Parameter pickt sich Perl auch selbst aus der Zeile 1, wenn der Interpreter schon läuft, aber der Taint-Mode muß aktiviert werden, BEVOR der Interpreter läuft. Daher bleiben an dieser Stelle nur zwei Möglichkeiten: Taint-Modus trotz anders lautenden Instruktionen ausgeschaltet lassen und unsicher weiter arbeiten, oder aber laut Zeter und Mordio schreien. Unter Sicherheitsaspekten ist nur die letzte Möglichkeit sinnvoll.

Oder die Skripte, die auf den Taint Mode angewiesen sind, als .cgi speichern? Denn wenn in meinem Beispiel tainted_test.CGI @INC »geschrumpft« wird, heißt es doch, dass der Taint Mode greift, oder?

Unter Windows mußt Du im Apachen "ScriptInterpreterSource Registry" auskommentieren bzw. auf script ändern, damit der Apache die Bemühungen eines Unix-Kernels simuliert, und die #!-Zeile auf "#!C:/perl/bin/perl.exe -T -w" ändern.

Ja, aber das werde ich nicht tun, sonst vergesse ich vor dem Hochladen womöglich die Shebang auf UNIX-Shebang zu ändern, und suche dann ewig nach Fehlern, weil ich nicht mehr dran denke ;)

Auf die Konfiguration beim Webhoster habe ich eh keinen Einfluß.

Ich lasse mir hier zusätzlich @INC ausgeben, weil ich festgestellt habe, dass "." im Tainted Mode nicht mehr ausgegeben wird:
Richtig. Das ist so gewollt und auch in perlsec dokumentiert.

Ah, OK, danke.

Gibt es eine _deutschprachige_ Seite, auf welcher genau erklärt wird, was -T alles bewirkt?

use English; # ;-)

use german; wäre mir lieber, aber na gut,

perldoc perlsec

in ca. drei Wochen habe ich das vielleicht verstanden ;)

http://wiki.perl-community.de/bin/view/Perldoc/PerlDokumentListe ist ein bescheidener Anfang.

babelfish ist nicht wirklich gut, eher lustig ...

Ja!

Viele Grüße aus Frankfurt/Main,
Patrick

--

_ - jenseits vom delirium - _
[link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
Nichts ist unmöglich? Doch!
Heute schon gegökt?