Workshop „Tools zur Numerischen Modellierung “ Kapitel „Python

Werbung
Workshop „Tools zur Numerischen Modellierung “
Kapitel „Python “
CGI-Programmierung: Allgemeine Informationen
1. CGI-Skripte (CGI=Commom Gateway Interface ≈ Allgemeine VermittlungsrechnerSchnittstelle) sind Programme, die mit Hilfe des Webbrowsers über das Internet
gestartet werden können (auf die gleiche Weise, wie man ein HTML-Dokument
anfordert). Anwendung sind z.B.
• Dynamische Generierung von Webseiten,
• Verarbeitung von Daten, die über HTML-Formulare eingegeben werden,
• Online-Zugriffe auf Datenbanken (Suchmaschinen, Routenplaner etc.),
• Kommunikationsplattformen (Diskussionsforen, Chat-Rooms etc.).
2. Funktionsweise:
HTML−
Dokumente
User
Surfen
Webbrowser
Anfrage mit URL
Internet
HTTP−Server
CGI−Skripte
CGI
Server
HTTP−Paket
Ein Server allgemein ist ein Programm, das Anfragen bearbeitet (gelegentlich
wird auch der Rechner, auf dem es läuft als Server bezeichnet). Der HTTP-Server
besitzt ein Verzeichnis cgi-bin, in dem alle CGI-Skripte gespeichert werden. Der
Aufruf erfolgt, indem man die Adresse des Skripts im Adressfenster des Browsers eingibt, z.B. http://www.python.org/cgi-bin/faqw.py.
3. Ein Python-CGI-Skript muss die folgenden zwei Komponenten enthalten:
• In der ersten Zeile eine Anweisung an das Betriebssystem, welcher Interpreter aufgerufen werden soll (dieser sollte auf dem Server dann auch irgendwo vorhanden sein...), meist so etwas wie #!/usr/bin/python oder
#!c:\python32\python.exe.
• Danach print-Anweisungen, mit denen ein HTTP-Paket über die Standardausgabe ausgegeben wird. Ein HTTP-Paket wiederum besteht auch aus
zwei Teilen, die durch eine Leerzeile getrennt sind:
(a) Der Kopf enthält eine Spezifizierung des MIME-Typs der Informationen, die im Paket enthalten sind (MIME = Multipurpose Internet Mail
Extension = Norm für Datentypen). Beispiele sind text/html, text/plain
oder image/tiff für HTML-, reine Textdokumente oder Bilder im TIFFFormat.
(b) Der Körper enthält die eigentlichen Nutzdaten, z.B. einen HTMLQuelltext.
1
4. Wie kann man nun CGI-Skripte auf einem lokalen Rechner testen? Sollten Sie
keinen HTTP-Server auf Ihrem Rechner zur Verfügung haben, können Sie den
Python-HTTP-Server verwenden. In dessen Verzeichnis muss ein Verzeichnis
cgi-bin vorhanden sein, in dem die Skripte liegen, die getestet werden sollen.
Um dann ein Skript zu starten, tragen Sie folgendes in das Adressfeld Ihres
Browsers ein:
http://localhost:8080/cgi-bin/beispielSkript.py
Beachten Sie, dass das Skript vom Server gelesen werden darf, d.h. die Zugriffsrechte müssen hinreichend Erlaubnis-erteilend gesetzt sein.
Aufgaben zu CGI-Scripting
1. Verzeichnis-Browser
(a) Schreiben Sie ein Programm, welches den Inhalt des Stammverzeichnisses
("/") Ihres lokalen Rechners als HTML-Seite generiert.
(b) Erweitern Sie dieses Programm so, dass es den Namen des Verzeichnisses
als Parameter übergeben bekommt. Der Inhalt des Verzeichnisses soll dann
so generiert werden, dass alle Verzeichnisse als Links dargestellt werden.
Klickt man auf einen solchen Link, so soll wiederum Ihr Python-Programm
aufgerufen werden und den Inhalt desjenigen Verzeichnisses anzeigen, dessen Link gerade angewählt wurde.
2. Sicherheitslücke:
Bei CGI-Skripten muss eine gewisse Vorsicht an den Tag gelegt werden, ansonsten kann es passieren, dass finstere Gesellen von außen Zugriff auf den Server
erlangen. Um dies zu verdeutlichen, wollen wir nun eine gefährliche Sicherheitslücke in das Programm aus Aufgabe 1) einbauen:
Ändern Sie Ihr Programm so ab, dass der Inhalt des Verzeichnisses mit dem
popen- Befehl unter Verwendung des Kommandos ls eingelesen wird (falls Sie
das nicht eh schon auf diese Weise tun...), also:
handle = os.popen("ls "+verzName) # verzName muss richtig formatiert sein
liste = handle.readlines()
# eine Liste von Strings
for entry in liste:
entry = entry.rstrip("\n")
# jeweils \n am Ende abschneiden
Rufen Sie das Programm im Browser nun folgendermaßen auf:
http://localhost:8080/cgi-bin/skript.py?verzName=/home | kwrite
Öffnet sich daraufhin kwrite, so probieren Sie mal folgendes:
http://localhost:8080/cgi-bin/skript.py?verzName=/home | wget
http://numod.ins.uni-bonn.de/people/nemitz/Python/virus.py (eine Zeile)
http://localhost:8080/cgi-bin/skript.py?verzName=/home | python virus.py
Aufgabe: Unterstreichen Sie das Wort „Sicherheitslücke“ und diskutieren Sie
mit Ihrem Nachbarn darüber.
3. Implementieren Sie eine Suchmaschine, die über ein HTML-Formular einen
Suchbegriff bekommt. Dieser Begriff soll dann in allen Dateien in allen Unterverzeichnissen ausgehend von einem beliebigen aber festen Verzeichnis gesucht
werden (mittels der walk-Methode).
Das Ergebnis soll eine HTML-Datei sein, die eine Liste aller Dateien zeigt, in
denen der Suchbegriff vorkommt. Weiterhin soll zu jeder dieser Dateien die erste
Zeile gedruckt werden, in der der Suchbegriff steht.
2
Herunterladen