xwolf.de|com

Menü

Inhalt dieser Site

Ansicht

Individuelle Benutzerkonfiguration für die Site.

Druckansicht Startseite Suchen

A A A A

XWolf CGI FAQ

Zurück zum Index...

Folgende Fragen und Antworten ergaben sich aus EMails und Forenbeiträge zum Thema CGI allgemein, aber auch in Bezug auf Skripte von xwolf.
Eine ganz allgemeine Liste von Fragen & Antworten bietet die Internationale FAQ.


  1. In der Beschreibung der CGI-Programme les ich häufig von Dateirechten. Was ist das, und wie kann ich diese setzen?
  2. Jedesmal, wenn ich ein CGI-Programm starten will, bekomme ich die Meldung "Permission denied.". Was kann ich dagegen tun?
  3. Ich hab alle Parameter des CGI-Programmes nach der Anleitung geändert. Aber wenn ich das Programm dann starten will, bekomme ich ein "Server Error". Woran kann das liegen? Und was kann ich tun?
  4. Wenn ich das CGI-Skript aufrufe, erscheint statt der Ausgabe der Source-Code des Programmes. Wieso?
  5. Woher weiß ich, ob ich CGI-Skripte ausführen kann?
  6. Ich hab gehört, daß CGI-Programme unsicher sind. Stimmt das?
  7. Kann ich CGI-Skripte zuhause auf mein PC testen?
  8. "Das Programm XYZ geht nicht! Warum?!?"
  9. Ich hab die Skripte von dieser Site runtergeladen. Als ich sie aber dann ausführen wollte, bekam ich die Meldung, daß sie keine gültigen Windows-Anwendungen seien?
  10. Wo finde ich Perl auf meinen Server?
  11. Was sind Libraries? Und wozu brauch ich diese?
  12. Was sind Module?
  13. Wie mache ich ein Skript, welches die Ausgaben zeitlich nacheinander ausgibt? Wie funktioniert Server-Push?


  1. In der Beschreibung der CGI-Programme les ich häufig von Dateirechten. Was ist das, und wie kann ich diese setzen?
    Jede Datei auf einem Unix- oder Linux-Server besitzt unterschiedliche Attribute, welche angeben, wem die Datei gehört, zu welcher Benutzergruppe die Datei gehört und welche Attribute global gelten.
    Die Attribute sind jeweils 3 Flags für das Recht zum Lesen, zum Schreiben und zum Ausführen der Datei. Das bedeutet, der Besitzer der Datei hat diese 3 Flags, die Gruppe und Alle. In Unix (Linux) kann man diese Dateirechte mit dem Kommando chmod ändern. Mit dem Dir-Kommando ls -la kann man die Dateiattribute sehen. Die Ausgabe bei einer Datei kann zum Beispiel so aussehen:

    -rwxr-x--x  xwolf     cgi   sample.html
    Das bedeutet, daß die Datei sample.html dem User "xwolf" gehört und zur Gruppe "cgi" gehört. Der User kann die Datei lesen (r), beschreiben (w) und ausführen (x). Die Gruppe kann nur lesen (r) und ausführen (x). Alle weiteren User auf dem Server können die Datei nur noch ausführen (x).
    Mit dem Kommando chmod kann man diese Rechte nun ändern. Man benutzt dabei oft die Form, in der man anhand von Zahlen die jeweiligen Rechte angibt: r=4, w=2, x=1. Die Summation der Werte ergibt das jeweilige Recht.
    So setzt chmod 755 sample.html die Datei auf folgende Rechte:
    -rwxr-xr-x  xwolf     cgi   sample.html

    chmod 644 sample.html wiederum:
    -rw-r--r--  xwolf     cgi   sample.html

  2. Jedesmal, wenn ich ein CGI-Programm starten will, bekomme ich die Meldung "Permission denied.". Was kann ich dagegen tun?
    Der Server, welcher das Programm aufruft, hat keine Ausführrechte. Diese müssen Sie dem Programm geben.
    Im Normalfall sollte es recihen, wenn Sie chmod 755 (Dateiname) setzen.

  3. Ich hab alle Parameter des CGI-Programmes nach der Anleitung geändert. Aber wenn ich das Programm dann starten will, bekomme ich ein "Server Error". Woran kann das liegen? Und was kann ich tun?
    Ein Fehler kann viele Ursachen haben. Die Fehlermeldung des Servers ist zudem recht wenig Aussagekräftig. Wenn Sie können, sollten Sie deswegen ein Blick in die Errorlog des Webservers werfen. Hier steht meistens der Fehler in einer etwas detaillierteren Form.
    Können Sie nicht in die Errorlog schauen (Vielleicht, weil Sie ein Billig-Provider haben?), dann sollten Sie versuchen, daß Programm auf der Kommandozeile zu starten, um festzustellen, in welcher Zeile ein Fehler vorliegt: Sollte es sich naemlich um ein Fehler im Programm handeln, wird diese dort ausgegeben.

    Sollten Sie weder Zugriff auf die Errorlog, noch auf eine Kommandozeile (via TELNET oder noch besser SSH) haben, bliebt Ihnen nichts anderes übrig, als sich das Programm genau anzusehen, zu suchen und das Programm jeweils solange online auszutesten, bis Sie den Fehler gefunden haben.

    Folgendes Rezept empfiehlt sich zur Fehlerfindung:

    1. Schauen Sie in der Errorlog nach dem Fehler
    2. Führen Sie das Programm auf der Kommandozeile (telnet) aus.
    3. Öffnen Sie das Programm mit einem Editor. Wenn möglich auf der Seite des Servers. Falls Sie auf dem Serverseitigem Editor (zum Beispiel vi) plötzlich lauter CONTROL-Ms am Ende der Zeilen sehen, wurde das Programm von Windows nach Unix im FTP-BINARY-Mode übertragen. übertragen Sie das Programm nochmals, aber im ASCII-Mode!
    4. Prüfen Sie, ob die Angabe des Perl-Pfades richtig ist. Auf Unix oder Linux sollte er diese Form haben: #!/usr/bin/perl
      Auf Windows-Systemen dagegen: #!C:\perl\perl.exe
    5. Sollte das Programm auf andere Dateien zugreifen, prüfen Sie, ob diese Dateien a) existieren und b) die richtigen Rechte haben.
      Sie können in der Regel nicht davon ausgehen, daß der Webserver das Programm unter Ihrer Kennung ausführt! Der Webserver gehöhrt meistens eher der Gruppe oder allen anderen an.
    6. Prüfen Sie bei den Dateien auch, ob die Pfade zu den Dateien stimmen, welche im Programm angegeben sind.
    7. Prüfen Sie, ob Sie bei der Installation des Programmes nicht einen Tipfehler gemacht haben.
    8. Fragen Sie in CGI-Foren, ob jemand anders dasselbe Problem hat, und ob es jemand gelungen ist, dieses zu lösen.
    9. Haben alle obigen Punkte nichts gebracht, kontakten Sie den Autor des Programmes. Aber bitte nicht vorher! Eine Anmerkung dabei noch: Wenn der Author das Skript auf ein bestimmtest Betriebssystem, wie z.B. Unix bereitgestellt hat, aber nicht für das ihrige (z.B. Windows) sollten Sie nicht unbedingt mit großem Support, sondern im bestem Fall nur mit Hinweisen zur Selbsthilfe rechnen.

  4. Wenn ich das CGI-Skript aufrufe, erscheint statt der Ausgabe der Source-Code des Programmes. Wieso?
    Offensichtlich erkennt der Webserver das Programm nicht als CGI-Programm an. Dafür gibt es zwei mögliche Ursachen:
    1. Der Webserver verlangt, daß CGI-Skripte die Endung ".cgi" haben. Hat Ihr Programm eine andere Endung (z.B. ".pl"), dann benennen Sie das Programm einfach um.
    2. Das Programm liegt in keinem gültigen CGI-Verzeichnis. Sollten Sie nicht wissen, welches das richtige Verzeichnis ist, fragen Sie den Administrator des jeweiligen Systems.

  5. Woher weiß ich, ob ich CGI-Skripte ausführen kann?
    Das wissen Sie, wenn Sie die Unterlagen Ihres Providers durchgehen. In der Regel bekommt man bei den meisten Providern das Recht CGI-Programme auszuführen erst gegen eine Extragebühr, oder nur eingeschränkt.
    Fragen Sie Ihren Provider! Und lassen Sie sich nicht durch das vorgeschobene Argument der Unsicherheit von CGI-Skripten einschüchtern. Jeder Provider, der ein ordentliches Betriebsystem fährt, ist in der Lage, sein System gegen unsichere CGI-Programme zu schützen.
    Ausnahme: Der Provider benutzt ein Windows-System.

  6. Ich hab gehört, daß CGI-Programme unsicher sind. Stimmt das?
    Das stimmt, und es stimmt nicht. Zum einen sind CGI-Programme ganz normale Programme, die vom Webserver ausgeführt werden. Hat das Programm Fehler, welche das System belasten können, kann bei entsprechend schlechter Konfiguration des Servers, das System gegenüber Hackern leicht geöffnet werden.
    Bei einem gut eingerichteten Unix- oder Linux-Server dagegen sollte sich der Schaden in Grenzen halten. Anders dagegen bei schlecht eingerichteten Servern, oder Windows-Servern: Dort kann ein schlechtes oder fehlerhaftes Skript dazu führen, daß fremde Personen Zugang zum System bekommen und dort im schlimmsten Fall Daten vernichten könnten.
    In allen Fällen wird die Attacke aber durch ein schlecht geschriebenes oder fehlerhaftes Skript ermöglicht. Sie sollten deswegen darauf achten, daß die CGI-Programme auch von einer verläßlichen Quelle kommen! (Achtung: Internet- Zeitschriften, welche öfters mal ein CGI-Skript bringen, sind nicht unbedingt sicher! Auch das bekannte CGI-Archiv www.cgi-resources.com enthält einige Skripten mit bösen Sicherheitslöchern.)

    Erfahren wir von einem unsicheren CGI-Programm, informieren wir darüber auf einer eigenen Webseite, welche ebenfalls Teil dieser Domain ist: CGI Sicherheit.
    Auf der Seite http://www.xwolf.de/artikel/cgisec.shtml finden Sie außerdem eine längere Einführung in das Schreiben sicherer CGI-Programme.

  7. Kann ich CGI-Skripte zuhause auf mein PC testen?
    Wenn Sie Linux installiert haben, ist dies kein Problem: Installieren Sie sich einfach den Webserver Apache.
    Wenn Sie dagegen auf Windows fahren, dann gibt es weniger Webserver, welche Sie lokal installieren können. OmniHTTP ist ein häufig benutzter Server zum Testen.

  8. "Das Programm XYZ geht nicht! Warum?!?"
    Weiß ich auch nicht.
    Solche Fragen können Sie sich sparen. Sie können nicht beantwortet werden. Wenn Sie Probleme mit einem Skript haben, dann sollten Sie so detailiert sein wie möglich. Geben Sie an, was Sie gemacht haben, wie es zu dem Fehler kam, ob Sie irgentwas an den Sourcen verändert haben, welche Version des jeweiligen Programmes Sie benutzen, wie sich der Fehler äußert, usw...
    Um so mehr Informationen von Ihrer Seite kommen, um so schneller kann Ihnen geholfen werden.
    Bedenken Sie aber, daß die meisten CGI-Programmierer, die Ihre Skripten kostenlos ins Web packen, damit nicht die Verpflichtung eingegangen sind, ab sofort als persönliche Feuerwehr für jeden, der das Skript geladen hat, zur Verfügung zu stehen. Wenn Sie mal 2 Wochen auf die Antworten warten müssen, dann muss das nicht daran liegen, daß derjenige nicht antworten will...es könnte ja auch daran liegen, daß es noch ein Leben ausserhalb des Internets gibt :))

  9. Ich hab die Skripte von dieser Site runtergeladen. Als ich sie aber dann ausführen wollte, bekam ich die Meldung, daß sie keine gültigen Windows-Anwendungen seien?
    Kunststück! Die CGI-Programme auf diesen Server sind keine Windows-Anwendungen. Es nutzt auch nichts, diese als ".exe"-Datei zu speichern. Um die Programme auszuführen, brauchen Sie den Interpreter PERL. Diesen gibt es auch für Windows. Besuchen Sie hierzu die Site http://www.perl.com

  10. Wo finde ich Perl auf meinen Server?
    Folgende Pfade führen auf Unix- und Linux-Servern meistens zu Perl:
    • /usr/bin/perl
    • /local/bin/perl
    • /bin/perl
    • /usr/local/bin/perl
    Bemerkung: Der Perl-Interpreter darf niemals im CGI-Verzeichnis sein! Wenn doch, dann wechslen Sie besser den Provider...

  11. Was sind Libraries? Und wozu brauch ich diese?
    Libraries sind Sammlungen von Routinen, die ein Programm ausgelagert hat, bzw. die dem Programm von dort zur Verfügung gestellt werden.
    Libraries, wie die Library cgi-lib.pl werden oft von mehreren Programmen genutzt. Es wäre eine Zeit- und Platzverschwendung, diese jedesmal neu im Programm neu zu definieren. Libraries sollten und werden mit Perl5 durch Module ersetzt werden.
    Obwohl die cgi-lib.pl alt und etwas unschön programmiert ist, dient sie sehr gut zum Erlernen von Perl.

  12. Was sind Module?
    Module sind die konsequente Weiterentwicklung von den oben beschriebenen Libraries. Sie definieren mit Hilfe von Packages eigene Subroutinen und definieren dafür ausserdem einen eigenen Namespace.
    Eines der pupulärsten Module ist das Modul CGI.pm welches für die CGI-Programmierung mit Perl den Status einer eierlegenden Wollmilchsau einnimmt.
    Im CPAN findet man eine Sammlung der meisten (standardisierten) Module, sowie die jeweils neuesten Versionen.
    Um die interne Wirkungsweise und die normalerweise für den Programmierer transparenten Strukturen von Modulen zu verstehen sollte man schon fortgeschrittener sein. Im Gegensatz zur Library cgi-lib.pl, welche rein strukturiert aufgebaut ist, eignen sich die meisten Module kaum zum Lernen.

  13. Wie mache ich ein Skript, welches die Ausgaben zeitlich nacheinander ausgibt? Wie funktioniert Server-Push?
    Von Lutz Badenheuer:
    Da man bei einem CGI-Script, welches z.B. in Perl oder (mein Favorit: C++) geschrieben sein kann, ohnehin einen Minimal-Header ausgeben muß (siehe unten), kann man diesen verwenden und das Teil mit einer Leseschleife schreiben. Der Minimal-Header, den die meisten von uns verwenden, sieht in Perl ungefähr so aus :

         printf("Content-type: text/html\n\n");
    


    , das heißt, wir schreiben den Attributnamen und den Inhaltstyp auf STDOUT. Hier können wir als Inhaltstyp auch etwas anderes setzen, zum Beispiel:

    printf("Content-type: multipart/mixed;boundary=pagestop\n\n");


    Dieser Inhaltstyp veranlaßt den Netscape Navigator, die Verbindung offenzuhalten und den Refresh nur dann durchzuführen, wenn eine Zeile des HTML-Output genau diesen Inhalt hat: "--pagestop \n\n", Beendet wird das Ganze durch Ausgabe der Zeile "--pagestop--" oder wenn der User die Connection schließt (sprich, den Browserframe schließt oder eine andere Seite in diesem Browserframe öffnet).



Info

$Id: xwolffaq.shtml,v 1.2 2003/05/20 20:55:30 xwolf Exp $
© 1996 - 2003 by xwolf