CGI-Programmierung - cs.hs-rm.de · CGI-Programmierung Fachhochschule Wiesbaden Fachbereich...

39
CGI-Programmierung Fachhochschule Wiesbaden Fachbereich Design-Informatik-Medien Prof. Dr. Weber 15. Dezember 2008 Alexander Petitjean - [email protected] Yelena Kolpakova - [email protected]

Transcript of CGI-Programmierung - cs.hs-rm.de · CGI-Programmierung Fachhochschule Wiesbaden Fachbereich...

Page 1: CGI-Programmierung - cs.hs-rm.de · CGI-Programmierung Fachhochschule Wiesbaden Fachbereich Design-Informatik-Medien Prof. Dr. Weber 15. Dezember 2008 ... • dynamische Ressource

CGI-Programmierung

Fachhochschule WiesbadenFachbereich Design-Informatik-Medien Prof. Dr. Weber

15. Dezember 2008

Alexander Petitjean - [email protected] Kolpakova - [email protected]

Page 2: CGI-Programmierung - cs.hs-rm.de · CGI-Programmierung Fachhochschule Wiesbaden Fachbereich Design-Informatik-Medien Prof. Dr. Weber 15. Dezember 2008 ... • dynamische Ressource

Überblick

2

Kapitel I Einführung CGI1. CGI 2. CGI Geschichte3. CGI - Worum geht es ?4. CGI - Skript5. HTTP6. CGI Ablauf7. CGI Environment8. CGI - Konsequenzen9. CGI - Sicherheitsfragen10. CGI - Alternativen

(c) Alexander Petitjean / Yelena Kolpakova (FH-Wiesbaden) Liste V - Systemprogrammierung - Vortrag CGI Programmierung

Page 3: CGI-Programmierung - cs.hs-rm.de · CGI-Programmierung Fachhochschule Wiesbaden Fachbereich Design-Informatik-Medien Prof. Dr. Weber 15. Dezember 2008 ... • dynamische Ressource

Überblick

3

Kapitel II Praxis - Das Projekt1. Worum geht es ?2. Projektaufbau3. Mögliche Sprachen4. Warum Ruby ?5. Debugging6. Programmablauf7. DEMO

(c) Alexander Petitjean / Yelena Kolpakova (FH-Wiesbaden) Liste V - Systemprogrammierung - Vortrag CGI Programmierung

Page 4: CGI-Programmierung - cs.hs-rm.de · CGI-Programmierung Fachhochschule Wiesbaden Fachbereich Design-Informatik-Medien Prof. Dr. Weber 15. Dezember 2008 ... • dynamische Ressource

Überblick

4

Literatur/Quellen:• Jetzt lerne ich CGI [Rafe Colburn]• Objektorientiere Programmierung mit Phython [Michael

Weigend]• CGI Programmierung mit Pearl [O‘REILLY]• http://www.informatik.fh-wiesbaden.de/~werntges/• http://stdlib.rubyonrails.org/• http://httpd.apache.org/docs/2.2/howto/cgi.html

(c) Alexander Petitjean / Yelena Kolpakova (FH-Wiesbaden) Liste V - Systemprogrammierung - Vortrag CGI Programmierung

Page 5: CGI-Programmierung - cs.hs-rm.de · CGI-Programmierung Fachhochschule Wiesbaden Fachbereich Design-Informatik-Medien Prof. Dr. Weber 15. Dezember 2008 ... • dynamische Ressource

Kapitel 1

5(c) Alexander Petitjean / Yelena Kolpakova (FH-Wiesbaden) Liste V - Systemprogrammierung - Vortrag CGI Programmierung

Page 6: CGI-Programmierung - cs.hs-rm.de · CGI-Programmierung Fachhochschule Wiesbaden Fachbereich Design-Informatik-Medien Prof. Dr. Weber 15. Dezember 2008 ... • dynamische Ressource

1. CGI ?

6

• Common Gateway Interface = Allgemeine Vermittlungsschnittstelle• Gateway/Schnittschnelle zwischen WebServer und externem Programm / Umgebung

(c) Alexander Petitjean / Yelena Kolpakova (FH-Wiesbaden) Liste V - Systemprogrammierung - Vortrag CGI Programmierung

Page 7: CGI-Programmierung - cs.hs-rm.de · CGI-Programmierung Fachhochschule Wiesbaden Fachbereich Design-Informatik-Medien Prof. Dr. Weber 15. Dezember 2008 ... • dynamische Ressource

2. CGI Geschichte

7

• erster WebServer war NCSA HTTPD• NCSA (National Center for Supercomputing

Applications (Gründer von Netscape / „Mosaik“)• wichtigste Funktion war CGI• CGI auch in CERN Web Server enthalten (1994)• Anfangs einzigste Möglichkeit für „Web

Applikationen“• Offener Quellcode von NCSA HTTPD führt zur

Implementierung in alle anderen WebServer

(c) Alexander Petitjean / Yelena Kolpakova (FH-Wiesbaden) Liste V - Systemprogrammierung - Vortrag CGI Programmierung

Page 8: CGI-Programmierung - cs.hs-rm.de · CGI-Programmierung Fachhochschule Wiesbaden Fachbereich Design-Informatik-Medien Prof. Dr. Weber 15. Dezember 2008 ... • dynamische Ressource

3. Worum geht es ?

8

• Abruf „statischer“ Dokumente genügt nicht• statische Ressource = keine Veränderung

zwischen 2 Aufrufen: HTML Datei, Bild• dynamische Ressource = kann sich zwischen 2

Aufrufen ändern: Abhängig von Bedingung(Benutzereingabe, Benutzerrolle) u. Zugriff auf Datenquellen (Routenplaner, Wetterdienst, etc.)

• Daten sollen eingegeben, verarbeitet und ausgegeben werden

• dynamische Elemente: Formulare, Middleware/Business Logik

(c) Alexander Petitjean / Yelena Kolpakova (FH-Wiesbaden) Liste V - Systemprogrammierung - Vortrag CGI Programmierung

Page 9: CGI-Programmierung - cs.hs-rm.de · CGI-Programmierung Fachhochschule Wiesbaden Fachbereich Design-Informatik-Medien Prof. Dr. Weber 15. Dezember 2008 ... • dynamische Ressource

4. CGI Script

9

• CGI Scripte sind zunächst Programme die über das Internet gestartet werden

• Werden über Web Browser wie HTML Dokumente durch Eingabe einer URL gestartet

• URL = uniform ressource locator• URL: HTTP: //www.website.de/dokument.html• URL: HTTP: //www.website.de/cgi-bin/prg.cgi• PROTOKOLL :// DOMAIN / PFAD ZUR DATEI

(c) Alexander Petitjean / Yelena Kolpakova (FH-Wiesbaden) Liste V - Systemprogrammierung - Vortrag CGI Programmierung

Page 10: CGI-Programmierung - cs.hs-rm.de · CGI-Programmierung Fachhochschule Wiesbaden Fachbereich Design-Informatik-Medien Prof. Dr. Weber 15. Dezember 2008 ... • dynamische Ressource

4. CGI Script

10

• 1. Eingabe einer URL -> Anfrage von Dokument an Domain über Internet an HTTP Server

• 2. HTTP Server nimmt Anfrage entgegen• - bei HTML Dokument: Server schickt Inhalt von

HTML Datei in einem HTTP Paket zurück an Client

• - bei „Dokument=CGI Skript“: Server startet CGI Prozess, CGI Skript erzeugt nun HTTP Paket, gibt es an HTTP Server zurück, dieser leitet es an Client weiter

(c) Alexander Petitjean / Yelena Kolpakova (FH-Wiesbaden) Liste V - Systemprogrammierung - Vortrag CGI Programmierung

Page 11: CGI-Programmierung - cs.hs-rm.de · CGI-Programmierung Fachhochschule Wiesbaden Fachbereich Design-Informatik-Medien Prof. Dr. Weber 15. Dezember 2008 ... • dynamische Ressource

5. HTTP

11

• Browser Request und Server Response• Request/Response haben Header u. optional Body• Header: enthällt META Informationen• Body: enthällt Nachricht selbst

(c) Alexander Petitjean / Yelena Kolpakova (FH-Wiesbaden) Liste V - Systemprogrammierung - Vortrag CGI Programmierung

Page 12: CGI-Programmierung - cs.hs-rm.de · CGI-Programmierung Fachhochschule Wiesbaden Fachbereich Design-Informatik-Medien Prof. Dr. Weber 15. Dezember 2008 ... • dynamische Ressource

5. HTTP

12

• Beispiel: http://localhost/index.html:

(c) Alexander Petitjean / Yelena Kolpakova (FH-Wiesbaden) Liste V - Systemprogrammierung - Vortrag CGI Programmierung

GET /index.html HTTP/1.1HOST: localhostAccept: image/gif, image/jpeg, */*Accept-Language: enConnection: Keep-AliveUser-Agent: Mozilla/4.0

HTTP/1.1 200 OKDate: Sat, 18 Mar 2000 20:35:35 GMTServer: Apache/1.3.9 (UNIX)Last-Modified: Wed, 20 May 1998 14:59:42 ETag: „5657567976575“Content-Length: 161Content-Type: text/html

<HTML><HEAD Meine Titelzeile</HEAD><BODY>Dies ist ein Beispieltext</BODY></HTML>

CLIENT SERVER

Page 13: CGI-Programmierung - cs.hs-rm.de · CGI-Programmierung Fachhochschule Wiesbaden Fachbereich Design-Informatik-Medien Prof. Dr. Weber 15. Dezember 2008 ... • dynamische Ressource

6. CGI Ablauf

13

Quelle: Objektorientierte Programmierung mit Phython, M.W.

(c) Alexander Petitjean / Yelena Kolpakova (FH-Wiesbaden) Liste V - Systemprogrammierung - Vortrag CGI Programmierung

Page 14: CGI-Programmierung - cs.hs-rm.de · CGI-Programmierung Fachhochschule Wiesbaden Fachbereich Design-Informatik-Medien Prof. Dr. Weber 15. Dezember 2008 ... • dynamische Ressource

6. CGI Ablauf

14 Liste V - Enterprise JAVA - Vortrag zu JAVA Servlets

CLIENT

CLIENT

SERVER

SERVER

HTTP Request

HTTP Response

1. Server erkennt: URL für CGI2. Server filtert Header Zeilen3. Server setzt Umgebungsvariablen4. Server startet CGI Prozess (Fork/Pipe)

5. CGI ließt Daten v. STDIN u. Env.6. CGI Prozess schreibt Header und Body nach STDOUT7. Server ergänzt eventl. Header8. Server sendet HTTP Response an Client und beendet CGI Prozess

EnvironmentSTDIN

STDOUT

CGIProzess

(c) Alexander Petitjean / Yelena Kolpakova (FH-Wiesbaden)

Page 15: CGI-Programmierung - cs.hs-rm.de · CGI-Programmierung Fachhochschule Wiesbaden Fachbereich Design-Informatik-Medien Prof. Dr. Weber 15. Dezember 2008 ... • dynamische Ressource

7. CGI Enviroment

15

• 1. Unspezifische Variablen für alle Requests• 2. Request Abhängige Variablen• 3. Variablen für HTTP Header von Clients, die der

Server nicht als Standard ansieht,z.B. HTTP_ ... HTTP Server entscheidet ob durchgelassen wird

• 4. Sonderfälle

(c) Alexander Petitjean / Yelena Kolpakova (FH-Wiesbaden) Liste V - Systemprogrammierung - Vortrag CGI Programmierung

Page 16: CGI-Programmierung - cs.hs-rm.de · CGI-Programmierung Fachhochschule Wiesbaden Fachbereich Design-Informatik-Medien Prof. Dr. Weber 15. Dezember 2008 ... • dynamische Ressource

7. CGI Enviroment

16

• Unspezifische Variablen für alle Requests:• SERVER_SOFTWARE• SERVER_NAME• GATEWAY_INTERFACE

(c) Alexander Petitjean / Yelena Kolpakova (FH-Wiesbaden) Liste V - Systemprogrammierung - Vortrag CGI Programmierung

Page 17: CGI-Programmierung - cs.hs-rm.de · CGI-Programmierung Fachhochschule Wiesbaden Fachbereich Design-Informatik-Medien Prof. Dr. Weber 15. Dezember 2008 ... • dynamische Ressource

7. CGI Enviroment

17

• Request abhängige Variablen:• SERVER_PROTOCOL• SERVER_PORT• REQUEST_METHOD• REMOTE_HOST• REMOTE_ADDR• AUTH_TYPE• PATH_INFO• QUERY_STRING• CONTENT_TYPE• CONTENT_LENGTH (Länge des HTTP Body)

(c) Alexander Petitjean / Yelena Kolpakova (FH-Wiesbaden) Liste V - Systemprogrammierung - Vortrag CGI Programmierung

Page 18: CGI-Programmierung - cs.hs-rm.de · CGI-Programmierung Fachhochschule Wiesbaden Fachbereich Design-Informatik-Medien Prof. Dr. Weber 15. Dezember 2008 ... • dynamische Ressource

7. CGI Enviroment

18

• Variablen für HTTP HEADER von Clients:• HTTP_ACCEPT• HTTP_ACCEPT_CHARSET• HTTP_ACCEPT_ENCODING• HTTP_ACCEPT_LANGUAGE• HTTP_COCKIE (Paar aus Name/Wert Kombi.)• HTTP_FROM• HTTP_HOST (Zielrechner)• HTTP_USER_AGENT• HTTP_REFERER

(c) Alexander Petitjean / Yelena Kolpakova (FH-Wiesbaden) Liste V - Systemprogrammierung - Vortrag CGI Programmierung

Page 19: CGI-Programmierung - cs.hs-rm.de · CGI-Programmierung Fachhochschule Wiesbaden Fachbereich Design-Informatik-Medien Prof. Dr. Weber 15. Dezember 2008 ... • dynamische Ressource

8. CGI Konsequenzen

19

• CGI Anwendungen können praktisch mit allen Sprachen erstellt werden, Scriptsprachen sind hier sehr prakisch

• CGI Anwendungen stehen „hinter“ dem Server, erhalten nur durchgelassene Daten

• Jeder CGI Aufruf startet einen neuen Prozess ! Weiterer Overhead durch Sprache-Interpreter!

(c) Alexander Petitjean / Yelena Kolpakova (FH-Wiesbaden) Liste V - Systemprogrammierung - Vortrag CGI Programmierung

Page 20: CGI-Programmierung - cs.hs-rm.de · CGI-Programmierung Fachhochschule Wiesbaden Fachbereich Design-Informatik-Medien Prof. Dr. Weber 15. Dezember 2008 ... • dynamische Ressource

9. CGI Sicherheitsfragen

20

• CGI Anwendungen laufen oft auf kritischen Servern

• CGI Skript ermöglicht Programme auszuführen• CGI Skript ermöglichen Eingabe von „bösen“

Daten• CGI Prozess läuft unter dem HTTP-Server

Prozess, hat also Rechte von HTTP Server (Child-Prozess)

• HTTP-Server könnte Child Prozess anderem User zuordnen -> Root Rechte -> WebServer Lücke...

(c) Alexander Petitjean / Yelena Kolpakova (FH-Wiesbaden) Liste V - Systemprogrammierung - Vortrag CGI Programmierung

Page 21: CGI-Programmierung - cs.hs-rm.de · CGI-Programmierung Fachhochschule Wiesbaden Fachbereich Design-Informatik-Medien Prof. Dr. Weber 15. Dezember 2008 ... • dynamische Ressource

9. CGI Sicherheitsfragen

21

• Dringende Überprüfung von Dateneingaben• Überprüfung von Datei Rechten• Isolierte WebServer Umgebung (CGI-Umgebung)• WebServer -> User Authentifizierung

(c) Alexander Petitjean / Yelena Kolpakova (FH-Wiesbaden) Liste V - Systemprogrammierung - Vortrag CGI Programmierung

Page 22: CGI-Programmierung - cs.hs-rm.de · CGI-Programmierung Fachhochschule Wiesbaden Fachbereich Design-Informatik-Medien Prof. Dr. Weber 15. Dezember 2008 ... • dynamische Ressource

10. Alternativen zu CGI

22

• Java Server Pages / Active Server Pages• Java Servlets (code wird auf WebServer kompiliert)• PHP (Interpreter im Web Server eingebettet)• FastCGI (vorgehaltene Prozesse im Arbeitspeicher)• mod_cgi, mod_ruby, mod_XXX (Interpreter wird in

WebServer eingebunden)

(c) Alexander Petitjean / Yelena Kolpakova (FH-Wiesbaden) Liste V - Systemprogrammierung - Vortrag CGI Programmierung

Page 23: CGI-Programmierung - cs.hs-rm.de · CGI-Programmierung Fachhochschule Wiesbaden Fachbereich Design-Informatik-Medien Prof. Dr. Weber 15. Dezember 2008 ... • dynamische Ressource

Kapitel 2

23(c) Alexander Petitjean / Yelena Kolpakova (FH-Wiesbaden) Liste V - Systemprogrammierung - Vortrag CGI Programmierung

Page 24: CGI-Programmierung - cs.hs-rm.de · CGI-Programmierung Fachhochschule Wiesbaden Fachbereich Design-Informatik-Medien Prof. Dr. Weber 15. Dezember 2008 ... • dynamische Ressource

1. Worum geht es ?

24

• Entwicklung eines Programmiersprachen Servers• Ermöglicht „entfernte Kompilierung“• Senden von fertigem Quellcode als Datei• Eingabe von Quellcode auf Web Seite• Download von fertig kompiliertem Programm

(c) Alexander Petitjean / Yelena Kolpakova (FH-Wiesbaden) Liste V - Systemprogrammierung - Vortrag CGI Programmierung

Page 25: CGI-Programmierung - cs.hs-rm.de · CGI-Programmierung Fachhochschule Wiesbaden Fachbereich Design-Informatik-Medien Prof. Dr. Weber 15. Dezember 2008 ... • dynamische Ressource

2. Projektaufbau

25

• SERVER:• Betriebssystem: UBUNTU Linux• HTTP Server: APACHE 2• Zusatz: mod_ruby / mod_ssl• Über DYNDNS aus dem Internet verfügbar• CLIENT:• Betriebsystem: unabhängig• Web Browser: Firefox/Safari/Internet Explorer

(c) Alexander Petitjean / Yelena Kolpakova (FH-Wiesbaden) Liste V - Systemprogrammierung - Vortrag CGI Programmierung

Page 26: CGI-Programmierung - cs.hs-rm.de · CGI-Programmierung Fachhochschule Wiesbaden Fachbereich Design-Informatik-Medien Prof. Dr. Weber 15. Dezember 2008 ... • dynamische Ressource

3. Mögliche Sprachen

26(c) Alexander Petitjean / Yelena Kolpakova (FH-Wiesbaden) Liste V - Systemprogrammierung - Vortrag CGI Programmierung

Sprache KompilerC gcc

C++ g++Java javac

Pascal gpcFortran gfortran

Page 27: CGI-Programmierung - cs.hs-rm.de · CGI-Programmierung Fachhochschule Wiesbaden Fachbereich Design-Informatik-Medien Prof. Dr. Weber 15. Dezember 2008 ... • dynamische Ressource

4. Warum Ruby?

27

• vollständig objektorientiert• Kompakt, keine überflüssige Sprachelemente• dynamische Typisierung• Interpreter statt Compiler• automatische Speicherverwaltung• sehr umfangreiche API, u.a. für CGI• Ruby ist in C implementiert

(c) Alexander Petitjean / Yelena Kolpakova (FH-Wiesbaden) Liste V - Systemprogrammierung - Vortrag CGI Programmierung

Page 28: CGI-Programmierung - cs.hs-rm.de · CGI-Programmierung Fachhochschule Wiesbaden Fachbereich Design-Informatik-Medien Prof. Dr. Weber 15. Dezember 2008 ... • dynamische Ressource

5. Debugging

28

• Ruby Code Debugging in IRB Konsole• „Debugging“ sonst nur zur Laufzeit möglich• Fehler in STDERR -> /var/log/Apache2/error.log• Browser gibt nur allgemeine Fehlermeldung aus• Manuelles Debugging: cgi.out{ } oder puts• HTTP Sniffer Debugging (wireshark/tcpmon)

(c) Alexander Petitjean / Yelena Kolpakova (FH-Wiesbaden) Liste V - Systemprogrammierung - Vortrag CGI Programmierung

Page 29: CGI-Programmierung - cs.hs-rm.de · CGI-Programmierung Fachhochschule Wiesbaden Fachbereich Design-Informatik-Medien Prof. Dr. Weber 15. Dezember 2008 ... • dynamische Ressource

6. Programm Ablauf

29(c) Alexander Petitjean / Yelena Kolpakova (FH-Wiesbaden) Liste V - Systemprogrammierung - Vortrag CGI Programmierung

abgabe_formular.xhtml abgabe_fileupload.xhtml

anmeldung.xhtml

abgabe_ok_fileupload.xhtmlabgabe_ok_forumlar.xhtml

abgeben_formular.cgi abgeben_fileupload.cgi

anmelden.cgi

abgabe_archiv_fehler.xhtmlabgabe_compiler_fehler.xhtml

anmeldung_fehler.xhtml

Page 30: CGI-Programmierung - cs.hs-rm.de · CGI-Programmierung Fachhochschule Wiesbaden Fachbereich Design-Informatik-Medien Prof. Dr. Weber 15. Dezember 2008 ... • dynamische Ressource

6. Programm Ablauf

30(c) Alexander Petitjean / Yelena Kolpakova (FH-Wiesbaden) Liste V - Systemprogrammierung - Vortrag CGI Programmierung

<body><h1>Anmeldung</h1><form action="/cgi-bin/anmelden.cgi" method="post"> <p>Name:<br /> <input type="text" name="nachname" size="40" maxlength="40" /> </p> <p>Passwort:<br/> <input type="password" name="password"/> </p> <p>Wollen Sie CODE direkt eingeben oder ein file übersetzen lassen: <br/> <input type="radio" name="compiler_weg" value="formular" /> Code direkt eingeben <br/> <input type="radio" name="compiler_weg" value="fileupload" /> Datei übersetzen <br/> </p> <p> <input type="submit" value="Anmelden"/> <input type="reset" value="Löschen"/> </p></form></body>

anmeldung.xhtml

Page 31: CGI-Programmierung - cs.hs-rm.de · CGI-Programmierung Fachhochschule Wiesbaden Fachbereich Design-Informatik-Medien Prof. Dr. Weber 15. Dezember 2008 ... • dynamische Ressource

6. Programm Ablauf

31(c) Alexander Petitjean / Yelena Kolpakova (FH-Wiesbaden) Liste V - Systemprogrammierung - Vortrag CGI Programmierung

#!/usr/bin/env ruby

require 'cgi'require "cgi/session"

cgi = CGI.new("html4") sess = CGI::Session.new( cgi, "session_key" => "rubyweb", "prefix" => "web-session." ) sess["nachname"] = cgi['nachname'] sess["password"] = cgi['password'] sess["compiler_weg"] = cgi['compiler_weg'] if sess["nachname"] =~ /^[A-Z]|[a-z]/ and sess["password"] =~ /secret/ and sess["compiler_weg"]== "formular" sess.close puts cgi.header('location' => '/abgabe_formular.xhtml') elsif sess["nachname"] =~ /^[A-Z]|[a-z]/ and sess["password"] =~ /secret/ and sess["compiler_weg"]== "fileupload" sess.close puts cgi.header('location' => '/abgabe_fileupload.xhtml')

else sess.close puts cgi.header('location' => '/anmeldung_fehler.xhtml') end

anmelden.cgi

Page 32: CGI-Programmierung - cs.hs-rm.de · CGI-Programmierung Fachhochschule Wiesbaden Fachbereich Design-Informatik-Medien Prof. Dr. Weber 15. Dezember 2008 ... • dynamische Ressource

6. Programm Ablauf

32(c) Alexander Petitjean / Yelena Kolpakova (FH-Wiesbaden) Liste V - Systemprogrammierung - Vortrag CGI Programmierung

<body> <h1>Abgabe</h1> <form action="/cgi-bin/abgeben_formular.cgi" method="post"> <p>Geben Sie hier den Code ein:<br/> <textarea name="user_eingabe" cols="50" rows="10"></textarea> <input type="submit" value="Senden"/> </p> <p>Wie soll die datei heissen:<br/> <input type="text" name="dateiname" size="40" maxlength="40" /> </p> <p> Welcher File Type: <br/> <input type="radio" name="filetype" value="java" /> JAVA<br/> <input type="radio" name="filetype" value="c" /> C <br/> <input type="radio" name="filetype" value="pas" /> PASCAL <br/> <input type="radio" name="filetype" value="cpp" /> C++ <br/> <input type="radio" name="filetype" value="f90" /> FORTRAN <br/> </p> </form> </body>

abgabe_formular.xhtml

Page 33: CGI-Programmierung - cs.hs-rm.de · CGI-Programmierung Fachhochschule Wiesbaden Fachbereich Design-Informatik-Medien Prof. Dr. Weber 15. Dezember 2008 ... • dynamische Ressource

6. Programm Ablauf

33(c) Alexander Petitjean / Yelena Kolpakova (FH-Wiesbaden) Liste V - Systemprogrammierung - Vortrag CGI Programmierung

#!/usr/bin/env rubyrequire 'cgi'require 'cgi/session'require 'stringio'require 'ftools' cgi = CGI.new("html4")begin session = CGI::Session.new(cgi, "session_key" => "rubyweb", "prefix" => "web-session.", "new_session"=>false) rescue ArgumentError print cgi.header('location' => 'nicht_angemeldet.xhtml')end

eingabe = cgi['user_eingabe']datei = cgi['dateiname']typ = cgi['filetype']

abgeben_formular.cgi

Page 34: CGI-Programmierung - cs.hs-rm.de · CGI-Programmierung Fachhochschule Wiesbaden Fachbereich Design-Informatik-Medien Prof. Dr. Weber 15. Dezember 2008 ... • dynamische Ressource

6. Programm Ablauf

34(c) Alexander Petitjean / Yelena Kolpakova (FH-Wiesbaden) Liste V - Systemprogrammierung - Vortrag CGI Programmierung

abgeben_formular.cgi

def erzeugen(dateiname, type, code) File.open("/tmp/" + dateiname + "." + type, 'w') do |file| file.puts code endend

if typ == "c" then erzeugen(datei, typ, eingabe) callstring = "gcc -Wall -o /tmp/" + datei + " /tmp/" + datei + ".c" result = system(callstring) if result == true callstring1 = "tar cfz /tmp/program_formular.tar.gz " + "/tmp/" + datei result1 = system(callstring1) if result1 == true puts cgi.header('location' => 'abgabe_ok_formular.xhtml') else puts cgi.header('location' => 'abgabe_archiv_fehler.xhtml') end else puts cgi.header('location' => 'abgabe_compiler_fehler.xhtml') end

elsif typ == "java" then...

Page 35: CGI-Programmierung - cs.hs-rm.de · CGI-Programmierung Fachhochschule Wiesbaden Fachbereich Design-Informatik-Medien Prof. Dr. Weber 15. Dezember 2008 ... • dynamische Ressource

6. Programm Ablauf

35(c) Alexander Petitjean / Yelena Kolpakova (FH-Wiesbaden) Liste V - Systemprogrammierung - Vortrag CGI Programmierung

<body> <h1>Abgabe</h1>

<form action="/cgi-bin/abgeben_fileupload.cgi" method="post" enctype="multipart/form-data">

<p>Datei: <input type="file" name="uploadfile" accept="text/*"/> <input type="submit" value="Senden"/> </p> <p> Bitte wählen Sie ihre benutzte Sprache aus: <br/> <input type="radio" name="filetype" value="java" /> Java File <br/> <input type="radio" name="filetype" value="c" /> C File <br/> <input type="radio" name="filetype" value="cpp" /> C++ File <br/> <input type="radio" name="filetype" value="pas" /> Pascal File <br/> <input type="radio" name="filetype" value="f90" /> Fortran File <br/> </p> </form> </body>

abgabe_fileupload.xhtml

Page 36: CGI-Programmierung - cs.hs-rm.de · CGI-Programmierung Fachhochschule Wiesbaden Fachbereich Design-Informatik-Medien Prof. Dr. Weber 15. Dezember 2008 ... • dynamische Ressource

6. Programm Ablauf

36(c) Alexander Petitjean / Yelena Kolpakova (FH-Wiesbaden) Liste V - Systemprogrammierung - Vortrag CGI Programmierung

sourcefile = cgi.params['uploadfile'].firstsourcefilename = cgi.params['uploadfile'].first.original_filenamefileext = "." + cgi['filetype'].stringdestfilename = cgi.params['uploadfile'].first.original_filename.delete fileext

File.open("/tmp/" + sourcefilename.untaint, 'w') do |file| file << sourcefile.read end

if cgi['filetype'].string == "java" then callstring = "javac /tmp/" + sourcefilename + " -d /tmp/" result = system(callstring) if result == true callstring = "tar cfz " + "/tmp/program_fileupload.tar.gz " + "/tmp/" + destfilename + ".class" result = system(callstring) if result == true puts cgi.header('location' => 'abgabe_ok_fileupload.xhtml') else puts cgi.header('location' => 'abgabe_archiv_fehler.xhtml') end else puts cgi.header('location' => 'abgabe_compiler_fehler.xhtml') endelsif cgi['filetype'].string == "c" then ...

abgeben_fileupload.cgi

Page 37: CGI-Programmierung - cs.hs-rm.de · CGI-Programmierung Fachhochschule Wiesbaden Fachbereich Design-Informatik-Medien Prof. Dr. Weber 15. Dezember 2008 ... • dynamische Ressource

DEMO

37(c) Alexander Petitjean / Yelena Kolpakova (FH-Wiesbaden) Liste V - Systemprogrammierung - Vortrag CGI Programmierung

Page 38: CGI-Programmierung - cs.hs-rm.de · CGI-Programmierung Fachhochschule Wiesbaden Fachbereich Design-Informatik-Medien Prof. Dr. Weber 15. Dezember 2008 ... • dynamische Ressource

Fragen ?

38(c) Alexander Petitjean / Yelena Kolpakova (FH-Wiesbaden) Liste V - Systemprogrammierung - Vortrag CGI Programmierung

Page 39: CGI-Programmierung - cs.hs-rm.de · CGI-Programmierung Fachhochschule Wiesbaden Fachbereich Design-Informatik-Medien Prof. Dr. Weber 15. Dezember 2008 ... • dynamische Ressource

Vielen Dank

39(c) Alexander Petitjean / Yelena Kolpakova (FH-Wiesbaden) Liste V - Systemprogrammierung - Vortrag CGI Programmierung