BlackBoard (http://www.black-board.net/index.php)
- Design, Programmierung & Entwicklung (http://www.black-board.net/board.php?boardid=55)
-- Programmieren (http://www.black-board.net/board.php?boardid=4)
--- PHP: Fehlermeldung "Security Alert" nach dem Setzen von SERVER_SOFTWARE (http://www.black-board.net/thread.php?threadid=15256)


Geschrieben von CDW am 26.12.2003 um 22:01:

  PHP: Fehlermeldung "Security Alert" nach dem Setzen von SERVER_SOFTWARE

ich hab PHP 4.3.3.3 als CGI bei mir drauf und bekomme diese Meldung zu sehen:
Zitat:
Security Alert! The PHP CGI cannot be accessed directly.

This PHP CGI binary was compiled with force-cgi-redirect enabled. This means that a page will only be served up if the REDIRECT_STATUS CGI variable is set, e.g. via an Apache Action directive.

For more information as to why this behaviour exists, see the manual page for CGI security.

For more information about changing this behaviour or re-enabling this webserver, consult the installation file that came with this distribution, or visit the manual page.


das merkwürdige dabei ist, dass es erst nach dem Setzen von SERVER_SOFTWARE kommt, wenn ich die Umgebungsvariable nicht setze, dann wird das script "normal" abgearbeitet.
php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
<? print("Hello World") ?>  
 <?
$dateiname="log.txt";
if (!file_exists($dateiname)) { $datei=fopen($dateiname,"w"); fclose($datei); }
$datum=date("d.m.Y");
$zeit=date("H:i:s");
$ip=getenv("REMOTE_ADDR");
$browser=getenv("HTTP_USER_AGENT");
$referer=getenv("HTTP_REFERER");+
$datei=fopen($dateiname,"a");
fputs($datei,"$datum\t$zeit\t$ip\t$browser\t$referer\n");
fclose($datei);
print($browser);
?>  

wie man sieht, wird hier die SERVER_SOFTWARE gar net angesprochen... und laut CGI definition ist das eigentlich eine "verzichtbare" Variable...

PS: Server ist eine Eigenentwicklung... dem bringe ich gerade cgi und php bei und man sieht ja was rauskommt Mauer



Geschrieben von Compuholic am 29.12.2003 um 11:38:

 

Das kann wirklich ein ernstes Sicherheitsproblem darstellen.

Wenn Du z.B. die Adresse: www.test.de/php/scripts/test.php aufrufst enthält wird in $_SERVER['PATH_INFO'] z.B. /scripts/test.php übergeben. Das Document-Root holt sich der Interpreter aus der php.ini und setzt die beiden Variablen einfach zusammen. Das kann aber ausgenutzt werden, indem man einfach ".." verwendet um auf Verzeichnisse außerhalb des Document-Roots zuzugreifen.

Deshalb kann man PHP mit der Option --enable-force-cgi-redirect kompilieren. Dann muß der Webserver die Variable $_SERVER['REDIRECT_STATUS'] setzen. Man kann den Redirect im Apache-Server setzen indem man die "AddHandler" und die "Action" Direktive verwendet.



Geschrieben von CDW am 29.12.2003 um 18:47:

 

ok, danke, jetzt weiß ich auch warum er meckerte:
irgendwo im Code soll das hier stehen(ausgegraben im Selfhtml forum):
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
»» /* Make sure we detect we are a cgi - a bit redundancy here,
»»     but the default case is that we have to check only the first one. */
»» if (getenv("SERVER_SOFTWARE")
»»   || getenv("SERVER_NAME")
»»   || getenv("GATEWAY_INTERFACE")
»»   || getenv("REQUEST_METHOD")) {
»»   cgi = 1;
»» }

es kam also daher dass ich php als Prozess gestartet hatte und über eine pipe die Daten abgelesen - und php merkte gar nicht, dass es als CGI lief und erst als ich die Variable setzte kam eben diese Warnung.

Jetzt versuche ich nicht mehr mit Tricks PHP.exe anzusprechen, sondern die CGI norm umzusetzen. Ich habe momentan die cgi.force_redirect variable bei mir gesetzt (der Server überprüft aber VOR dem Aufrug von PHP ob es so einen Script in dem Ordner gibt)... als Sicherheitszusatz kann (sollte) ich noch den doc_root/user_root setzten. Jedenfalls bin ich für jeden Hinweis dankbar, auch Links sind willkommen, da ich allerlei mögliches zu PHP Programmierung finde, aber nicht wie ich von meinem Server aus anspreche (GET hab ich hinbekommen, aber POST klappt immer noch net Mauer )

Jetzt noch eine Zusatzfrage: mit ".." kann man auf verzeichnisse außerhalb des Document-roots zugreifen - aber da liegen ja gewönlich keine PHP scripts - somit ist es nur eine "bediengte" Sicherheitslücke oder nicht? Ich meine jetzt PHP-CGI, da der Server sich den Pfad jedesmal aus "doc_root"+"anfrage" zusammensetzt und vorher (mit GetFileAttribute smile ) überprüft, ob es die angeforderte Datei im Verzeichniss gibt - wenn nicht, leitet er keine Anfrage an PHP weiter sondern liefert direkt einen 404.



Geschrieben von Compuholic am 05.01.2004 um 11:13:

 

Zitat:
Original von CDW
Jetzt noch eine Zusatzfrage: mit ".." kann man auf verzeichnisse außerhalb des Document-roots zugreifen - aber da liegen ja gewönlich keine PHP scripts - somit ist es nur eine "bedingte" Sicherheitslücke oder nicht? Ich meine jetzt PHP-CGI, da der Server sich den Pfad jedesmal aus "doc_root"+"anfrage" zusammensetzt und vorher (mit GetFileAttribute smile ) überprüft, ob es die angeforderte Datei im Verzeichniss gibt - wenn nicht, leitet er keine Anfrage an PHP weiter sondern liefert direkt einen 404.


Naja, das Problem liegt darin, daß man dadurch evtl. auf Systemdateien. Eine Gute Erklärung habe hier hier gefunden.

http://www.dclp-faq.de/q/q-konfiguration-cgi.html


Forensoftware: Burning Board 2.3.6, entwickelt von WoltLab GmbH