Johannes Gurlitt: CGI's und CSS

Hallo,
ich versuche gerade in mein in Perl geschriebenes Forum ein Stylesheet einzubinden, aber
obwohl ich es meiner Ansicht nach richtig eingebunden habe, und das Perl
Programm auch unter der Shell (perl guestbook.pl) richtig ausgeführt
wird klappt's über den server nicht!

print "Content-type: text/html\n\n";
print "<html><head><link rel="stylesheet" href="format.css"
Type="text/css"><title>keine Lerngeschichte
eingegeben</title></head>\n";

Gruß Johannes

  1. Hi,

    ich versuche gerade in mein in Perl geschriebenes Forum ein Stylesheet einzubinden, aber
    obwohl ich es meiner Ansicht nach richtig eingebunden habe, und das Perl
    Programm auch unter der Shell (perl guestbook.pl) richtig ausgeführt
    wird klappt's über den server nicht!

    "klappt nicht" klappt nicht. Bitte eine Fehlerbeschreibung angeben.

    print "Content-type: text/html\n\n";
    print "<html><head><link rel="stylesheet" href="format.css"
    Type="text/css"><title>keine Lerngeschichte
    eingegeben</title></head>\n";

    Ich vermute einfach mal, daß unter /cgi-bin/ keine Datei namens format.css existiert => Pfade beachten.

    Cheatah

    1. Hi,

      ich versuche gerade in mein in Perl geschriebenes Forum ein Stylesheet einzubinden, aber
      obwohl ich es meiner Ansicht nach richtig eingebunden habe, und das Perl
      Programm auch unter der Shell (perl guestbook.pl) richtig ausgeführt
      wird klappt's über den server nicht!

      "klappt nicht" klappt nicht. Bitte eine Fehlerbeschreibung angeben.

      print "Content-type: text/html\n\n";
      print "<html><head><link rel="stylesheet" href="format.css"
      Type="text/css"><title>keine Lerngeschichte
      eingegeben</title></head>\n";

      Ich vermute einfach mal, daß unter /cgi-bin/ keine Datei namens format.css existiert => Pfade beachten.

      Cheatah

      Danke für die Antwort, aber format.css existiert natürlich im selben Verzeichnis, Pfade stimmen auch.
      Habe ein kleines Testprogramm gewschrieben, s.u..
      Fehlermeldung bevor format.css executable: Error 500

      Bad script request -- none of '/opt/local/www/server/cgi-bin/paedpsy/format.css' and '/opt/local/www/server/cgi-bin/paedpsy/format.pp.pp' is executable

      Wenn chmod 755 (während ich nicht glaube, daß das nötig ist) dann wird das Programm ausgeführt, aber das Stylesheet nicht geladen!
      Hier das vollständige Testprogramm:  
        #!/usr/bin/perl
        print "Content-type: text/html\n\n";
        print "<html><head><link rel="stylesheet" href="format.css"";
        print "Type="text/css"><title>keine Lerngeschichte eingegeben</title></head>\n";
         print "<body><h1>Du hast keine Geschichte eingegeben!</h1>\n";
         print "Es wurde keine Lerngeschichte hinzugefügt\n";
         print "bitte füge Deine Lerngeschichte ein.<p>\n";
         print "<form method=GET action="$cgiurl">\n";
         print "Dein Name:<input type=text name="realname" size=30 ";
         print "value="$FORM{'realname'}"><br>\n";
         print "E-Mail: <input type=text name="username"";
         print "value="$FORM{'username'}" size=40><br>\n";
         print "Lerngeschichte:<br>\n";
         print "<textarea name="comments" COLS=60 ROWS=4></textarea><p>\n";
         print "<input type=submit> * <input type=reset></form><hr>\n";
         print "<a href="$guestbookurl">Zurrück zur Geschichtensammlung, shift f5 nicht vergessen!</a>.";
         print "\n</body></html>\n";

      1. Hallo,

        print "<html><head><link rel="stylesheet" ref="format.css"";
          print "Type="text/css"><title>keine Lerngeschichte

        Tippfehler und eine Kleinigkeit:

        Durch das in zwei print-Befehle aufgesplittete link-Tag fehlt ein Leerzeichen zwischen ref (uebrigens href) und type.

        so sollte es gehen:

        print "<html><head><link rel="stylesheet" href="format.css" ";
        print "Type="text/css"><title>keine Lerngeschichte

        SolOng
        Stephan

      2. Hi,

        Ich vermute einfach mal, daß unter /cgi-bin/ keine Datei namens format.css existiert => Pfade beachten.

        Danke für die Antwort, aber format.css existiert natürlich im selben Verzeichnis,

        dann habe ich zu sehr zu Deinen Gunsten vermutet... ;-)

        In einem halbwegs vernünftig konfigurierten Server kannst Du auf nicht-ausführbare Dateien im cgi-bin nicht von außen (über HTTP) zugreifen - bestes Beispiel ist eine /cgi-bin/password.txt.

        Fehlermeldung bevor format.css executable: Error 500

        Normalerweise sollte zwar ein "Access Denied" kommen, aber diese Fehlermeldung ist besser als keine.

        Hier das vollständige Testprogramm:  
          #!/usr/bin/perl

        #!/usr/bin/perl -w
        use strict;

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

        use CGI ':standard';
        print header;

        print "<html><head><link rel="stylesheet" href="format.css"";

        [...]

        Naja, und weiter gemäß perldoc CGI. Vor allem aber nicht mehr versuchen, Dateien aus dem cgi-bin zu laden :-)

        Cheatah

        1. Fehlermeldung bevor format.css executable: Error 500
          Normalerweise sollte zwar ein "Access Denied" kommen, aber diese Fehlermeldung ist besser als keine.

          Ich denke, das hängt davon ab, welche Art der CGI-Konfiguration der Server verwendet hat.

          "Normalerweise" definiert man das cgi-bin ja so, daß alles darin als CGI-Skript interpretiert wird. Kurz und prägnant, eine Zeile in der Webserver-Konfiguration und fertig. Das hat dann den Effekt, daß der Webserver auch den Zugriff auf die CSS-Datei als CGI-Call auswertet - und da diese Datei kein ausführbares Programm im Sinne des zugrundeliegenden Betriebssystems enthält, wird dieses beim Versuch, die CSS-Datei "auszuführen", einen Returncode ungleich 0 zurückliefern. Den fängt der Webserver auf und setzt ihn in einen "Internen Server-Fehler" (500) um.

          Alternativ könnte man innerhalb eines cgi-bin-Verzeichnisses explizit alle Endungen definieren, die als CGI-Skript verstanden werden sollen ("AddHandler" bei Apache). Das ist natürlich mehr Pflegearbeit, weshalb es ein "fauler" Webmaster nicht tut. Es würde allerdings erlauben, das in diese Thread dargestellte CGI-Skript korrekt auszuführen, denn nun könnte der Webserver erkennen, daß die CSS-Datei aufgrund ihrer Endung eben keine CGI-Anwendung sein soll. Ob dann der Zugriff auf solche Dateien erlaubt ist (wie im Falle der CSS-Definition) oder nicht (wie im Falle der password.txt), das wiederum ist durch weitere Definitionen (separater Schutz für letztgenannte Datei) einstellbar.

          Es wäre also - bei hinreichend komfortabler Konfiguration des Webservers - kein Problem, innerhalb desselben cgi-bin-Verzeichnisses gemischt Skripte, geschützte Dateien und sonstige Dateien (z. B. CSS oder auch HTML) zu lagern. Man muß es nur definieren - und darf dabei in den dann umfangreicheren Konfigurationsabschnitten den Überblick nicht verlieren, sonst handelt man sich vielleicht doch eine Sicherheitslücke ein.

        2. Hi,

          Ich vermute einfach mal, daß unter /cgi-bin/ keine Datei namens format.css existiert => Pfade beachten.

          Danke für die Antwort, aber format.css existiert natürlich im selben Verzeichnis,

          dann habe ich zu sehr zu Deinen Gunsten vermutet... ;-)

          In einem halbwegs vernünftig konfigurierten Server kannst Du auf nicht-ausführbare Dateien im cgi-bin nicht von außen (über HTTP) zugreifen - bestes Beispiel ist eine /cgi-bin/password.txt.

          Fehlermeldung bevor format.css executable: Error 500

          Normalerweise sollte zwar ein "Access Denied" kommen, aber diese Fehlermeldung ist besser als keine.

          Hier das vollständige Testprogramm:  
            #!/usr/bin/perl

          #!/usr/bin/perl -w
          use strict;

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

          use CGI ':standard';
          print header;

          print "<html><head><link rel="stylesheet" href="format.css"";
          [...]

          Naja, und weiter gemäß perldoc CGI. Vor allem aber nicht mehr versuchen, Dateien aus dem cgi-bin zu laden :-)

          Cheatah

          Danke an alle, das war der Fehler!
          Gruß Jo

  2. Hallo Johannes,

    Ich nehme an, das das Perlscript im cgi-verzeichnis liegt. Alle Dateien im CGI-Verzeichnis werden vom Server
    als CGI-Scripts angesehen. Deshalb mußt du die CSS-Datei in einem anderen Verzeichnis ablegen und
    dann auch demendsprechend einbinden.

    Tschüs

    Daniel