looneytune: IE öffnet DownloadDialog und führt Script nicht aus

Hallo zusammen,

ich poste hier zum erstenmal. Die Suchfunktion habe ich schon benutzt, leider nichts zu meinem Problem gefunden: ich habe ein cgi-script erstellt, das von Firefox auch korrekt ausgeführt wird. Der IE aber versucht die Datei (namentlich "kontakt.pl") downzuloaden. Ich stehe gerade auf dem Schlauf und weiss nicht genau woran das liegen kann. Kann mir jemand weiterhelfen?

Vielen Dank!
looney

  1. Hallo looneytune!

    ich poste hier zum erstenmal.
    Der IE aber versucht die Datei (namentlich "kontakt.pl") downzuloaden.

    Sei gegrüßt! Dann aber bitte gleich die Tipps für Fragende lesen, vor allem den Punkt »Um eine hilfreichen Antwort zu bekommen,...«.

    Mit etwas Code könnten wir schon mehr sagen. Was lässt DU als Header ausgeben (s. http://forum.de.selfhtml.org/archiv/2008/6/t172143/#m1127699)?

    Die Suchfunktion habe ich schon benutzt, leider nichts zu meinem Problem gefunden

    Ich hatte letztens versucht, über Suchmaschinen schlau zu werden, warum der IE im Falle der Endung .pl und »text/plain« als Content-Type so reagiert. Doch es scheitert wohl an den Suchbegriffen. Schon das Vorhandensein der Begriffe »download dialog«, »downloaddialog« oder »will downloaden« führen zu jeder Menge Treffer, die nichts mit der Problematik zu tun haben.

    Viele Grüße aus Frankfurt/Main,
    Patrick

    --

    _ - jenseits vom delirium - _
    [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
    Nichts ist unmöglich? Doch!
    Heute schon gegökt?
    All'alba vincerò!
    1. wohl wahr. Hätt ich auch gleich dran denken können den Code zu posten. War wohl doch bissl spät. Das Script sieht folgendermassen aus:

      #! /usr/bin/perl

      use CGI qw(:standard);
      use CGI::Carp qw(fatalsToBrowser);

      #init
      print "Content-type: html\n\n";

      #definitions
      my $MailPgm = '/usr/sbin/sendmail';
      my $Mail= "testmail@yahoo.de";
      my $Anrede= param('anrede');
      my $Name= param('nachname');
      my $Vorname= param('vorname');
      my $From= param('email');
      my $Telefon= param('telefon');
      my $Message= param('nachricht2');
      my $Subject= "Kontaktanfrage via www.wodausch.com";
      my $returnhtml= param('danke');

      open (MAIL, "|$MailPgm $Mail") || die "Fehler beim Zugriff auf $MailPgm!\n";
      print MAIL "Subject: $Subject\n\n";
      print MAIL "From: $From\n";
      print MAIL "Name: $Name\n";
      print MAIL "Vorname: $Vorname\n";
      print MAIL "Telefon: $Telefonnummer\n";
      print MAIL "$Message\n";
      close MAIL;

      #Dankeseite an Browser senden:
      print "$returnhtml\n";

      und wird im Formular aufgerufen über:

      <form name="kontakt" method="post" action="http://www.wodausch.com/cgi-bin/kontakt.pl">
      <input type="hidden" name="danke" value="http://www.wodausch.com/seiten/submit.html">

      Wobei der der input type="hidden" auch nicht die angegebene Seite zurückliefert, sondern die URL wie angegeben als Text ausgibt.

      lg.Mario

      Hallo looneytune!

      ich poste hier zum erstenmal.
      Der IE aber versucht die Datei (namentlich "kontakt.pl") downzuloaden.

      Sei gegrüßt! Dann aber bitte gleich die Tipps für Fragende lesen, vor allem den Punkt »Um eine hilfreichen Antwort zu bekommen,...«.

      Mit etwas Code könnten wir schon mehr sagen. Was lässt DU als Header ausgeben (s. http://forum.de.selfhtml.org/archiv/2008/6/t172143/#m1127699)?

      Die Suchfunktion habe ich schon benutzt, leider nichts zu meinem Problem gefunden

      Ich hatte letztens versucht, über Suchmaschinen schlau zu werden, warum der IE im Falle der Endung .pl und »text/plain« als Content-Type so reagiert. Doch es scheitert wohl an den Suchbegriffen. Schon das Vorhandensein der Begriffe »download dialog«, »downloaddialog« oder »will downloaden« führen zu jeder Menge Treffer, die nichts mit der Problematik zu tun haben.

      Viele Grüße aus Frankfurt/Main,
      Patrick

      1. print "Content-type: html\n\n";

        Falscher Content-type, korrekt wäre "text/html". Vermutlich ist der IE da weniger tolerant.

        Siechfred

        --
        Obacht, hinter jedem noch so kleinen Busch könnte ein Indianer sitzen!
        1. Vielen Dank! das wars. IE verarbeitet das jetzt (und Safari auch). Aber jetzt hab ich ein anderes Problem. Statt der Dankesseite liefert mir der Server jetzt:

          Error 500 - Internal server error

          Ein interner Fehler ist aufgetreten!
          Bitte versuchen Sie es zu einem späteren Zeitpunkt.

          ???

          lg.Mario

          print "Content-type: html\n\n";

          Falscher Content-type, korrekt wäre "text/html". Vermutlich ist der IE da weniger tolerant.

          Siechfred

          1. Da hat sich jetzt meine Frage mit ner neuen Antwort von Patrick überschnitten. Das funktioniert alles jetzt mit eurer Hilfe. Vielen Dank für die schnellen Antworten.

            @Struppi
            ja. Eigentlich war das anfänglich nur zum Spass gedacht. Aber dann ist eben bissl mehr draus geworden, will heissen die Site steht im Netz.

            Inwiefern agiere ich da als Spamschleuder, oder was kann ich dagegen tun?

            lg.Mario

            Vielen Dank! das wars. IE verarbeitet das jetzt (und Safari auch). Aber jetzt hab ich ein anderes Problem. Statt der Dankesseite liefert mir der Server jetzt:

            Error 500 - Internal server error

            Ein interner Fehler ist aufgetreten!
            Bitte versuchen Sie es zu einem späteren Zeitpunkt.

            ???

            lg.Mario

            print "Content-type: html\n\n";

            Falscher Content-type, korrekt wäre "text/html". Vermutlich ist der IE da weniger tolerant.

            Siechfred

            1. Inwiefern agiere ich da als Spamschleuder, oder was kann ich dagegen tun?

              Du solltest Sendmail mit Parametern aufrufen:

              open(SENDMAIL, "|/usr/sbin/sendmail -oi -t") or die "Can't fork for sendmail: $!\n";

              Du gibst dabei keine Zieladresse im Aufruf an, sondern sendest

              print SENDMAIL "To: johndoe@example.com\n"

              als Header.

              Ich würde bei solch einem Mailer entweder die Empfängeradresse hardkodieren, oder die Ausführung von einer Authentifizierung des Ausführenden abhängig machen.

              mfg Beat

              --
              Woran ich arbeite:
              X-Torah
              ><o(((°>      ><o(((°>
                 <°)))o><                      ><o(((°>o
            2. @Struppi
              ja. Eigentlich war das anfänglich nur zum Spass gedacht. Aber dann ist eben bissl mehr draus geworden, will heissen die Site steht im Netz.

              Inwiefern agiere ich da als Spamschleuder, oder was kann ich dagegen tun?

              Durch Manipulantion der Eingabedaten, kann ein Spammer dein Skript nutzen um die Mail an andere Adresse zu schicken als an deine. Deshalb müssen alle Daten die von aussen kommen immer überprüft werden, hier in diesem Fall speziell die Daten des Mailheaders. Wobei ich gerade gesehen habe, dass dieser sowieso bei dir falsch ist. Ich würd dir drigend empfehlen auf ein geieignetes Modul umzusteigen z.b. MIME::Lite

              Struppi.

      2. Hallo looneytune!

        wohl wahr. Hätt ich auch gleich dran denken können den Code zu posten. War wohl doch bissl spät. Das Script sieht folgendermassen aus:

        Na, damit kann man loslegen ;)

        #! /usr/bin/perl

        ^ # hier gehört eigentlich kein Leerzeichen hin
               # -w (warnings) fehlt

        #!/usr/bin/perl -w

        use strict; # Weiter unten deklarierst Du schon die Variablen mit »my«, sei  
                    # dann konsequent!
        

        use CGI qw(:standard);
        use CGI::Carp qw(fatalsToBrowser);

        #init
        print "Content-type: html\n\n";

        ^^^^ # siehe Antwort von Siechfred
                                     # falscher Content-Type war auch mein Verdacht

        #definitions
        my $MailPgm = '/usr/sbin/sendmail';
        my $Mail= "testmail@yahoo.de";
        my $Anrede= param('anrede');
        my $Name= param('nachname');
        my $Vorname= param('vorname');
        my $From= param('email');
        my $Telefon= param('telefon');
        my $Message= param('nachricht2');
        my $Subject= "Kontaktanfrage via www.wodausch.com";
        my $returnhtml= param('danke');

        open (MAIL, "|$MailPgm $Mail") || die "Fehler beim Zugriff auf $MailPgm!\n";
        print MAIL "Subject: $Subject\n\n";
        print MAIL "From: $From\n";
        print MAIL "Name: $Name\n";
        print MAIL "Vorname: $Vorname\n";
        print MAIL "Telefon: $Telefonnummer\n";
        print MAIL "$Message\n";
        close MAIL;

        #Dankeseite an Browser senden:
        print "$returnhtml\n";

        ^^^^^^^^^^^^^^^^^^^^^^^^^

        Was ist der Inhalt von $returnhtml? Eine URL. Du sagst hier:
        Gib aus "URL". Also bekommst Du eine URL - und zwar im Klartext.

        Eine Weiterleitung erreichst Du mit:

        print "Location: $returnhtml\n\n";

        Da Du aber bereits oben einen HTTP-Header ausgibst, wird es nicht funktionieren. Streiche die Header-Ausgabe ganz oben, denn Du gibst ja kein HTML aus, sondern versendest Formulardaten per E-Mail. Dann klappt's auch mit der Dankeseite.

        Viele Grüße aus Frankfurt/Main,
        Patrick

        --

        _ - jenseits vom delirium - _
        [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
        Nichts ist unmöglich? Doch!
        Heute schon gegökt?
        All'alba vincerò!
      3. wohl wahr. Hätt ich auch gleich dran denken können den Code zu posten. War wohl doch bissl spät. Das Script sieht folgendermassen aus:

        Mal abgesehen von den programmiertechnischen Defiziten die dir z.T. schon genannt wurde, programmierst du damit eine potentielle Spamschleuder, falls das Skript im Internet verfügbar sein sollte. Aber ich nehme an du programmierst nur ein bisschen zum Spaß.

        Struppi.

  2. ich habe ein cgi-script erstellt, das von Firefox auch korrekt ausgeführt wird. Der IE aber versucht die Datei (namentlich "kontakt.pl") downzuloaden.

    Der Browser führt keine Perlscripte aus, er wertet lediglich das aus, was das Perlscript zurückgibt, zeigt also in aller Regel eine HTML-Seite an. Ergo muss es am Script liegen bzw. an dem, was das Script ausgibt.

    Ich stehe gerade auf dem Schlauf und weiss nicht genau woran das liegen kann. Kann mir jemand weiterhelfen?

    Klar doch, wenn Du uns Dein Script mal zeigst, könnte das schon werden...

    Siechfred

    --
    Obacht, hinter jedem noch so kleinen Busch könnte ein Indianer sitzen!