Im folgenden wird der Umgang mit CGIs, die notwendigen Directories, das Setzen von entsprechenden Rechten und das Installieren von CGIs anhand einiger Beispiele erläutert und dokumentiert.

 

1. Was sind CGIs?

2. Wie sehen CGI-Scripts aus?

3. Wie verwende ich CGI?

4. Vorbereitungen für die Benutzung von CGI

5. Installation von CGI-Scripts

6. Beispiel-Scripts in Perl

7. Wichtige Hinweise zur Funktionalität

 

1. Was sind CGIs ?

CGI (Common Gateway Interface) ist eine Schnittstelle zwischen dem Webserver und einem Programm. CGI-Scripte können von einer Webseite aufgerufen werden, welche dann z.B. eine neue Webseite erzeugen oder Programme aus der Shell aufrufen.

 

2. Wie sehen CGI-Scripts aus?

CGIs können theoretisch in jeder erdenklichen Sprache geschrieben werden, sofern es einen entsprechenden Interpreter auf dem Webserver gibt.

Natürlich können auch reine Binaries als CGI fungieren.

Eine für CGIs häufig verwendete Script-Sprache ist Perl.

Ein entsprechender Perl-Interpreter is auf dem Webserver des KNF vorhanden.

3. Wie verwende ich CGI?

Zunächst ist ein weiteres Verzeichnis cgi-bin im jeweiligen Benutzerverzeichnis mit entsprechenden Rechten notwendig.

(Im Folgenden wird auf die Installation noch detailierter eingegangen)

Desweiteren ausführbare CGI-Scripte in diesem Verzeichnis.

Und natürlich eine Webseite, auf der das CGI aufgerufen wird.

4. Vorbereitungen für die Benutzung von CGI

Als erstes muss man sich mit einem FTP-Client auf dem FTP-Server anmelden:

 

indy@rtfm:~ > ftp ftp.franken.de
Connected to ilsa.franken.de.
...
...
Viel Spass !
220 ProFTPD 1.2.0 Server (KNF ftp Server) [ilsa.franken.de]
Name (ftp.franken.de:indy): w3cyber
331 Password required for w3cyber.
Password:
230 User w3cyber logged in.
Remote system type is UNIX.
Using binary mode to transfer files.

 

Der Inhalt könnte vielleicht so aussehen:

ftp > dir
200 PORT command successful.
150 Opening ASCII mode data connection for file list.
-rw-r--r-- 1 w3cyber w3user 604 May 30 12:36 index.html
226 Transfer complete.

 

Nun muss das CGI-Directory cgi-bin angelegt werden:

ftp> mkdir cgi-bin
257 "/cgi-bin" - Directory successfully created.
ftp> dir
200 PORT command successful.
150 Opening ASCII mode data connection for file list.
drwxrwxr-x 3 w3cyber w3user 4096 Oct 3 12:21 cgi-bin
-rw-r--r-- 1 w3cyber w3user 604 May 30 12:36 index.html
226 Transfer complete.

 

Jetzt noch schnell die richtigen Rechte setzen:

ftp> chmod og-rw cgi-bin
200 SITE CHMOD command successful.
ftp> dir
200 PORT command successful.
150 Opening ASCII mode data connection for file list.
drwx--x--x 3 w3cyber w3user 4096 Oct 3 12:21 cgi-bin
-rw-r--r-- 1 w3cyber w3user 604 May 30 12:36 index.html
226 Transfer complete.

 

Damit sind die ersten Vorbereitungen für die Benutzung von CGI getroffen worden.

 

5. Installation von CGI-Scripts

Um eigene CGI-Scripte auf dem Webserver zu installieren, muss man diese wieder via ftp auf den FTP-Server uploaden.

Nach erfolgreichem Einloggen läd man dann die einzelnen Scripts in das cgi-bin Verzeichnis.

Wichtig hierbei ist, dass alle CGI-Scripts mit .cgi enden müssen! (Siehe auch Punkt 7)

 

ftp> put test.cgi cgi-bin/
local: test.cgi remote: test.cgi
200 PORT command successful.
150 Opening BINARY mode data connection for test.cgi.
226 Transfer complete.
935 bytes sent in 0.01007 secs (16 Kbytes/sec)

 

Jetzt wieder die richtigen Rechte auf das Script setzen:

ftp> chmod 0755 cgi-bin/test.cgi
200 SITE CHMOD command successful.

 

Das CGI-Script ist jetzt soweit fertig installiert und kann nun in eine Webseite eingebaut werden.

 

6. Beispiel-Scripts in Perl

6.1. Den aktuellen cgi-bin Verzeichnis-Inhalt ausgeben

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Das ist ein Test</title>
</head>
<body bgcolor="#ffffff">
<a href="./cgi-bin/dir.cgi">Aktuelles cgi-bin Verzeichnis ausgeben</a>
</body>
</html>

 

Und das dazugehörige CGI-Script in Perl:

#!/usr/bin/perl
 
opendir(DIR, "./");
@dir = readdir(DIR);
closedir(DIR);
 
print << "END";
Content-Type: text/html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Das ist ein Test</title>
</header>
<body bgcolor="#ffffff">
END
 
foreach $line (@dir) {
        print "$line<br>";
}
 
print << "END";
</body>
</html>
END

6.2. Parameter an ein CGI übergeben und das SMTP-Modul.

Wieder eine Beispiel HTML-Seite:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Das ist ein Test</title>
</head>
<body bgcolor="#ffffff">
<form action="./cgi-bin/mail.cgi" method="post">
<input type="text" value="(Bitte eigene Email-Adresse eintragen)" size="40" name="to"><br>
<input type="submit" value="senden">
</form>
</body>
</html>

 

Und das dazugehörige CGI-Script in Perl:

#!/usr/bin/perl
 
use CGI ':standard';
use Net::SMTP;
 
$empf = param('to');
 
$smtp = Net::SMTP->new("mail-n.franken.de");
$smtp->mail("cgi-test\@www.franken.de");
$smtp->to("$empf");
$smtp->data();
$smtp->datasend("Hallo\n\n");
$smtp->datasend("Das ist nur ein Test\n");
$smtp->dataend();
$smtp->quit;
 
print << "END";
Content-Type: text/html
 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD>
<TITLE>Das ist ein Test</TITLE>
</HEAD>
<BODY bgcolor="#ffffff">
END
 
print "Die Mail wurde verschickt<BR>";
 
print << "END";
</BODY>
</HTML>
END

7. Wichtige Hinweise zur Funktionalität

Hier eine kleine Checkliste, um die Funktionalität von CGI.Scripts zu überprüfen:

 

  • Das Script muss mit der UID/GID des jeweiligen Benutzers laufen (Standard)
  • Alle CGI-Scripte müssen auf .cgi enden
  • Alle Scripte müssen ausführbar sein (chmod 0755 Dateiname)
  • CGI-Scripts dürfen nicht für andere beschreibbar sein (chmod 0755 Dateiname)