Thread Fragen zum Taintmodus
(13 answers)
Opened by rosti at 2020-01-21 10:20
Mir scheint da ein Missverständnis vorzuliegen, was der Taint-Modus leistet; oder es liegt eine sehr hoch hängende Erwartungshaltung vor.
Der Taint-Modus kann keine Wunder vollbringen. In erster Linie kann er Dich unterstützen; aber die Gedanken, dein Programm sicher zu machen, musst Du Dir selber machen. Du als Programmierender musst dafür Sorge tragen, dass eingehende Daten überprüft werden. Wenn Du das nicht tust, dann kann eben Deine C:/boot.ini gelesen werden. haj hat zum Taint-Modus (auch in Bezug auf Web-Anwendungen) ja schon einiges Kluges geschrieben. Weitere Tests: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 #! /usr/bin/perl -T use strict; use warnings; use 5.020; use Scalar::Util qw( tainted ); my $tainted_filename = shift // die "Specify a filename.\n"; # Nicht das 3-Argument-Open; d.h. der Modus *kann* im Dateinamen stecken open( my $fh, $tainted_filename ) or die "open($tainted_filename) failed: $!\n"; print $_ for <$fh>; close $fh; Code: (dl
)
1 # trotz tainted wird die Datei gelesen und ausgegeben; weil es keine kritische Situation im Sinne des tainted ist Sobald man die 3-Argument-Form des open() mit Lesemodus verwendet, sind auch die Fälle mit Pipe und Ausgabeumleitung für taint OK, weil der Modus im Programm festgelegt ist; dann kommt eher sowas: open(>> /tmp/foo) failed: No such file or directory Wenn man natürlich nun im aktuellen Verzeichnis eine Datei mit diesem Namen >> /tmp/foo liegen hat, dann wird die eben gelesen. Wiederum unkritisch im Sinne des taint. Die Verwendung von <> ist hier ähnlich unsicher, weil es effektiv laut perlop nur ein 2-Argument-Open verwendet. Sicherer wäre die Verwendung von <<>>; für Weiteres siehe perlop (Stichwort: "null filehandle") meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen! |