"test.php.zip" wird als PHP ausgeführt! (Apache 2.2 + mod_fcgid + PHP 5.2.5)

Apache, Lighttpd, nginx, Cherokee
philwo
Posts: 24
Joined: 2006-05-12 02:05

"test.php.zip" wird als PHP ausgeführt! (Apache 2.2 + mod_fcgid + PHP 5.2.5)

Post by philwo » 2007-12-11 21:08

Hallo,

das gibt es doch nicht 8O Ich habe hier eine ganz normale Apache 2.2 + mod_fcgid + PHP 5.2.5 Config nach Schema F:

httpd.conf:

Code: Select all

<IfModule mod_fcgid.c>
        AddHandler      fcgid-script .fcgi
        SocketPath      /var/lib/apache2/fcgid/sock/
        SharememPath    /var/lib/apache2/fcgid/shm
        IPCConnectTimeout 20
        IPCCommTimeout 60
</IfModule>


vhost:

Code: Select all

<VirtualHost *:80>
ServerName example.com
ServerAdmin support@example.com
ServerAlias www.example.com
DocumentRoot /home/kd1234/www/example.com/htdocs

AddHandler fcgid-script .php
FCGIWrapper /home/suexec-scripts/kd1234/php5 .php

<Directory /home/kd1234/www/example.com/htdocs>
        Options +ExecCGI
        AllowOverride AuthConfig FileInfo Indexes Limit Options=FollowSymLinks,Indexes,MultiViews,SymLinksIfOwnerMatch
        Order allow,deny
        allow from all
</Directory>
</VirtualHost>


So, wenn ich jetzt http://www.example.com/uploads/test.php.zip aufrufe, versucht Apache die mit PHP zu parsen! 8O

error.log:

Code: Select all

[Tue Dec 11 20:55:01 2007] [notice] mod_fcgid: process /home/kd1234/www/example.com/htdocs/uploads/test.php.zip(12050) exit(server exited), terminated by calling exit(), return code: 255


Es ist keine .htaccess in diesem VHost vorhanden, die irgendwie dazwischen funkt.. Wenn ich in der Config ein <Files "*.php"> ... </Files> um das AddHandler / FCGIWrapper mache, parsed er wirklich nur die .php Dateien als PHP und nicht die .php.zip ... aber das kanns doch so nicht sein!?

Hat irgendjemand eine Idee? Ich rätsele hier rum und kann es mir nicht erklären...

Viele Grüße!
Philipp

Roger Wilco
Administrator
Administrator
Posts: 5924
Joined: 2004-05-23 12:53

Re: "test.php.zip" wird als PHP ausgeführt! (Apache 2.2 + mod_fcgid + PHP 5.2.5)

Post by Roger Wilco » 2007-12-11 21:16


philwo
Posts: 24
Joined: 2006-05-12 02:05

Re: "test.php.zip" wird als PHP ausgeführt! (Apache 2.2 + mod_fcgid + PHP 5.2.5)

Post by philwo » 2007-12-11 23:52

Hi,

danke für den Link. Ich hatte sowas vermutet. :)

Ich habe nochmal genau die Apache-Doku gelesen. Ich benutze AddHandler mit Angabe der Dateinamen-Erweiterung und nicht SetHandler (da wärs ja klar, dass sich die Angabe auf den umschließenden Directory, Files, etc. Block bezieht).

Ich kanns nicht fassen, dass die Apache-Leute das tatsächlich wörtlich ernst meinen, wie es in ihrer Doku steht:

AddHandler cgi-script .cgi

Once that has been put into your httpd.conf file, any file containing the .cgi extension will be treated as a CGI program.


Meine Güte, es heißt extension, weil sie am Ende steht :roll:

So ists natürlich klar.. wenn irgendwo "php" auftaucht (... contains ...), ist es eine PHP-Datei. Yay.

Also, um dieses "Feature" zu fixen, noch ein <Files> drumherum...

Viele Grüße,
Philipp

User avatar
Joe User
Project Manager
Project Manager
Posts: 11138
Joined: 2003-02-27 01:00
Location: Hamburg

Re: "test.php.zip" wird als PHP ausgeführt! (Apache 2.2 + mod_fcgid + PHP 5.2.5)

Post by Joe User » 2007-12-12 00:01

philwo wrote:Meine Güte, es heißt extension, weil sie am Ende steht

Extension heisst Erweiterung und nicht Ende ;)

BTW: Es ist übrigens das gleiche Verständnisproblem, was zu den falschen Bugreports zu MS-Produkten führt...

philwo
Posts: 24
Joined: 2006-05-12 02:05

Re: "test.php.zip" wird als PHP ausgeführt! (Apache 2.2 + mod_fcgid + PHP 5.2.5)

Post by philwo » 2007-12-12 08:24

*Ha*! :-D Der Entwickler von mod_fcgid hat es auch nicht verstanden *gg*

Code: Select all

fcgid_wrapper_conf *get_wrapper_info(const char *cgipath, request_rec * r)
{
        char *extension;

        /* Get file name extension */
        extension = ap_strrchr_c(cgipath, '.');
        if (extension == NULL)
                return NULL;

        /* Search file name extension in per_dir_config */
        if (config
                && (wrapper =
                        apr_hash_get(config->wrapper_info_hash, extension,
                                                 strlen(extension))))
                return wrapper;

        return NULL;
}


Da gibt es ein wunderschönes Missverständnis, der Apache denkt in "Extensions" und mod_fcgid in "Endungen" (der Code prüft nur die letzte Extension des Dateinamens, bei test.php.zip würde er auf .zip kommen und das nicht in seiner Config finden, weswegen er mit Error 255 terminiert)

Ich habs jetzt aber verstanden und dank einem <Files>-Block herrschen ab sofort klare Verhältnisse *gg* Danke nochmal für die Aufklärung. :-)