Nick Wolf: Formulareingaben ein Sicherheitsrisiko?

Hallo,

Ich möchte demnächst eine Suche anbieten, die ein Newsarchiv und jede Menge einzelner Dateien durchsuchen soll.
Das ganze funktioniert auch, es stellt sich mir aber noch die Frage nach der Sicherheit des ganzen.

Derzeit wird der zu suchende Begriff in ein Formularfeld eingegeben und anschliessend in

if($archiv =~ m/$suche::volltext/ig) [...]

mit dem Inhalt der zu durchsuchenden Daten verglichen.

Könnte hierbei nun ein Sicherheitsproblem auftreten? Immerhin können die Benutzer alles mögliche in das Suche-Feld eingeben.

Gruß,
Nick

  1. Hallo Nick.

    if($archiv =~ m/$suche::volltext/ig) [...]
    Könnte hierbei nun ein Sicherheitsproblem auftreten? Immerhin können die Benutzer alles mögliche in das Suche-Feld eingeben.

    Ja, das können sie. So lange du den eingegebenen Suchstring jedoch weder im CGI-Kontext auslieferst oder ihn anderweitig "ausführen" lässt, sehe ich in diesem speziellen Fall kein Sicherheitsrisiko, wenn du ihn zuvor auf Gültigkeit hin untersucht hast. Das könnte z.B. so aussehen:

    my $muster = '\w{3,}';
    my $gesucht;
    if( CGI::param('suchstring') =~ /^$muster$/ ) {
      $gesucht = CGI::param('suchstring');
    }
    else {
      print "Der Suchstring ist ungültig.";
    }

    Die angenommenen Vorgaben sind:

    • nur Buchstaben, Ziffern und der Unterstrich
    • der Suchstring muss mindestens 3 Zeichen lang sein.

    Freundschaft!
    Siechfred

    PS: http://www.perldoc.com/perl5.8.4/pod/perlsec.html

  2. Hallo,

    Könnte hierbei nun ein Sicherheitsproblem auftreten? Immerhin können die Benutzer alles mögliche in das Suche-Feld eingeben.

    Wenn eine Benutzereingabe _ungeprüft_ an ein - shell - kommando übergeben wird, ists bedenklich.

    Benutzer gibt ein:
    blubber | rm -fR *

    Beispielsweise will der Script sowas machen
    $cmd = qx(ls $in);

    Wenn nun in $in die o.g. Zeile steht, schert sich das ls - Kommando einen Schies um das blubber und peipt (eng.: pipe) auf das rm - Kommando:

    rm -fR *

    das löscht dann ohne Rückfrage alle Dateien im aktuellen Verzeichnis, alle Unterverzeichnisse und alle Dateien in allen Unterverzeichnissen...

    Viele Grüße, Rolf

    --
    KnowHow veröffentlichen statt patentieren!
    1. Wenn eine Benutzereingabe _ungeprüft_ an ein - shell - kommando übergeben wird, ists bedenklich.

      nunja, das ist klar... aber das ist ja in meinem Fall nicht möglich, oder?

      Viele Grüße, Rolf

      Ebenso, Nick