Jens: regulärer Ausdruck aka Mailsicherheitslücke

Hallo !
ich benutze schon seit laengerer Zeit ein CGI (Perl), das
per sendmail EMails generiert und versendet.
In diesem Programm gibt es auch eine Subroutine, die die
angegebene EMail-Adresse auf ihre Gueltigkeit hin untersucht
(ueber regulaere Ausdruecke).
Da aber die EMail-Adressen Angabe "a@b.c < /etc/passwd"
nicht abgefangen wird, hatte ich den Ausdruck um
" $email =~ /([<>]) (;)" erweitert,
was allerdings zu keinerlei Ergebnis gefuehrt hat ??
Kann mir da jemand weiterhelfen ?

Danke im Voraus !!

Bye,
Jens

  1. Hi,

    lies mal:
    http://www.xwolf.com/artikel/cgisec.shtml

    Da steht genau dazu ein Beispiel.

    Ciao,
      Wolfgang

    1. Hi,

      lies mal:
      http://www.xwolf.com/artikel/cgisec.shtml

      Da steht genau dazu ein Beispiel.

      Ciao,
        Wolfgang

      Hallo Wolfgang !
      danke fuer den Hinweis...
      Das Mail Prog wird sowieso im Taint Mode aufgerufen...
      Und der Test verlief auch negativ - abgesehen von einer unzustellbaren Mail :)

      Also ist das doch relativ "sicher".. denke ich mal :)

      Bis denn,
      Jens

      1. Hallo Jens

        Das Mail Prog wird sowieso im Taint Mode aufgerufen...
        Und der Test verlief auch negativ - abgesehen von einer unzustellbaren Mail :)

        Also ist das doch relativ "sicher".. denke ich mal :)

        Nein. Der T-Mode liefert nur einen Fehler, wenn eingaben nicht überprüft werden.
        wenn du aber sowas machst
        $parameter =~ /.*/
        gilt das auch als überprüft. Gegen regexp, die nichts taugen, hilft -T also nicht.

        Tschüs

        Daniel

        1. Hallo Daniel !

          Das Mail Prog wird sowieso im Taint Mode aufgerufen...
          Und der Test verlief auch negativ - abgesehen von einer unzustellbaren Mail :)

          Also ist das doch relativ "sicher".. denke ich mal :)
          Nein. Der T-Mode liefert nur einen Fehler, wenn eingaben nicht überprüft werden.
          wenn du aber sowas machst
          $parameter =~ /.*/
          gilt das auch als überprüft. Gegen regexp, die nichts taugen, hilft -T also nicht.

          Danke fuer den Hinweis !
          Der Test mit dem Mailprog verlief auf jeden Fall negativ - also
          er hatte keine EMail geschickt...
          Zusaetzlich habe ich jetzt noch die beiden Methoden von Cheatah
          und den XWolf Seiten eingebaut...
          Sollte jetzt sicher sein ...

          Verwunderlich ist nur, dass er den regulaeren Ausdruck nicht korrekt
          angenommen hat ... :(
          Aber egal - loeuft ja jetzt :)

          Bye,
          Jens

  2. Hi,

    In diesem Programm gibt es auch eine Subroutine, die die
    angegebene EMail-Adresse auf ihre Gueltigkeit hin untersucht
    (ueber regulaere Ausdruecke).
    Da aber die EMail-Adressen Angabe "a@b.c < /etc/passwd"

    [...]

    perldoc perlfaq9:

    "How do I check a valid mail address?

    You can't, at least, not in real time. Bummer, eh?
    [...]
    Many are tempted to try to eliminate many frequently-invalid mail addresses with a simple regexp, such as /[1]+@([\w.-].)+\w+$/. It's a very
    bad idea. However, this also throws out many valid ones, and says nothing about potential deliverability, so is not suggested. Instead, see
    http://www.perl.com/CPAN/authors/Tom_Christiansen/scripts/ckaddr.gz , which actually checks against the full RFC spec (except for nested
    comments), looks for addresses you may not wish to accept mail to (say, Bill Clinton or your postmaster), and then makes sure that the hostname
    given can be looked up in the DNS MX records. It's not fast, but it works for what it tries to do.
    [...]"

    Ja, ich weiß, Du willst die Adresse gar nicht auf Existenz prüfen ;-) aber in o.g. Script findest Du eine RFC-konforme syntaktische Prüfung. Wenn Du es Dir einfacher machst als dort, sind Fehler wie der von Dir erkannte nicht auszuschließen.

    Allerdings könntest Du auch ein $email =~ /^([^\s<]+)/; $email = $1; versuchen (ggf. die Blacklist darin erweitern), das müßte weitgehend(!) sicher sein.

    Cheatah


    1. \w.- ↩︎

    1. Hi Cheatah !

      Hi,

      [...]

      Ja, ich weiß, Du willst die Adresse gar nicht auf Existenz prüfen ;-) aber in o.g. Script findest Du eine RFC-konforme syntaktische Prüfung. Wenn Du es Dir einfacher machst als dort, sind Fehler wie der von Dir erkannte nicht auszuschließen.

      Allerdings könntest Du auch ein $email =~ /^([^\s<]+)/; $email = $1; versuchen (ggf. die Blacklist darin erweitern), das müßte weitgehend(!) sicher sein.

      Cheatah

      ich werde das mal versuchen...
      Zusammen mit der Methode auf den XWolf-Seiten sollte diese
      Moeglichkeit komplett eliminiert werden...

      Auf jeden Fall Danke fuer deine Hilfe !! :)

      Bye,
      Jens