2010-12-01 2 views
0

Скажите, что у вас есть файл myfile.php, который выполняет некоторый код PHP. Может ли этот файл каким-либо образом (любым возможным способом) выполнить, если он был назван myfile.php.xx, где xx - любые символы? Как насчет myfile.phpxx? Как насчет других типов исполняемых файлов в одной и той же ситуации (.pl, .exe, .dll и т. Д.)?Может ли PHP-файл с расширением .php.xx исполняться как PHP?

Я работаю над брандмауэром, используя регулярные выражения для проверки имен файлов для этих типов файлов. Достаточно ли просто проверить конец файла для .php, .exe и т. Д., Или проверить, что происходит после него?

+0

Могу ли я спросить, какой именно брандмауэр? Исходящий? Входящие? Что он должен защищать, веб-сервер? – deceze 2010-12-01 06:35:01

+0

Это невозможно. Расширение файла ничего не значит; вы можете переименовать файл .exe во все, что захотите, и вы можете сказать веб-серверу, что вы хотите интерпретировать любой файл вообще как PHP. – 2010-12-01 06:36:22

ответ

8

Это полностью до веб-сервера, чтобы решить, как он хочет обрабатывать данный URL. Если он хочет обрабатывать URL-адрес с 20-значным номером, доступным в 2:35 днем ​​в третий четверг месяца в качестве скрипта PHP, то это его прерогатива. Попытка угадать, что веб-сервер будет делать строго по запрашиваемому URL, не представляется возможным.

+3

+1 для случайного состояния – 2010-12-01 06:27:48

3

Фактический интерпретатор PHP не имеет никакого отношения к имени файла или расширению. Вы можете бросить на него любой файл, если он содержит действительный PHP-код, он будет выполнен.

веб-сервер по умолчанию бросить .php (и, возможно, .php4 и .php5) файлов интерпретатора PHP, но может быть сделано, чтобы сделать это с любого типа файл с соответствующими параметрами:

AddHandler php5-script .foobar 

Он также может по умолчанию обрабатывать URL-адреса, которые заканчиваются на .php с помощью скрипта Perl, программы на C# или путем стирания жесткого диска.

Названия файлов означают абсолютно ничего.

Смежные вопросы