|
|
|
|
PHP: Fehlermeldung "Security Alert" nach dem Setzen von SERVER_SOFTWARE |
CDW
eine Simulation
Dabei seit: 12.10.2002
Beiträge: 1.329
Herkunft: CreateRemoteThread
|
|
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
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von CDW: 26.12.2003 22:02.
|
|
26.12.2003 22:01 |
|
|
Compuholic
knows where he wants to go tomorrow
Dabei seit: 19.10.2002
Beiträge: 819
Herkunft: München
|
|
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.
|
|
29.12.2003 11:38 |
|
|
CDW
eine Simulation
Dabei seit: 12.10.2002
Beiträge: 1.329
Herkunft: CreateRemoteThread
Themenstarter
|
|
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
)
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
) überprüft, ob es die angeforderte Datei im Verzeichniss gibt - wenn nicht, leitet er keine Anfrage an PHP weiter sondern liefert direkt einen 404.
|
|
29.12.2003 18:47 |
|
|
|
|
|
|