Вы не можете избежать загрузки файлов, если ваше приложение не безопасно. В следующем примере злоумышленник может просмотреть любой файл на вашем сервере:
<?php
readfile($_GET['file']);
?>
Если вы хотите, чтобы Apache не показывал исходный код, если что-то не так с PHP, добавьте это в свой httpd.conf / .htaccess:
# In case there is no PHP, deny access to php files (for safety)
<IfModule !php5_module>
<FilesMatch "\.(php|phtml)$">
Order allow,deny
Deny from all
</FilesMatch>
</IfModule>
# the following should be added if you want to parse .php and .phtml file as PHP
# .phps will add syntax highlighting to the file when requesting it with a browser
<IfModule php5_module>
AddType text/html .php .phtml .phps
AddHandler application/x-httpd-php .php .phtml
AddHandler application/x-httpd-php-source .phps
</IfModule>
При нормальных обстоятельствах никто не может загрузить исходный код PHP, поскольку он выполняется на сервере. Вебсервер распознает PHP-скрипты и передает их на PHP. Затем результат возвращается в браузер запрашивающего пользователя. Ситуация, о которой вы описали, может быть достигнута только в том случае, если конфигурация веб-сервера действительно запутана.
В нормальных условиях никто не может загрузить исходный код PHP (тот же, что и другой ответ), но если у вас есть файл с другим примером расширения: page1.bak, и у вас есть page1.php, page.bak загружается, если вы просто вставляете url ht ..//.../ page1
Я подтвердил это с помощью PHP версии 5.3.10-1ubuntu3.2 и Apache / 2.2.22. В резюме избегайте ставить ваши конфигурационные файлы или тестовые файлы в производственном каталоге, если вы не хотите, чтобы их загружали в исходное состояние.
Опция Multiview также должна быть отключена в apache2.conf или httpd.conf, чтобы избежать отказа от возвращаемого значения " как "filename.
Вы никогда не загружаете php-файл с веб-сервера, на котором запущена php. Вы можете загрузить HTML-код, поставляемый с php, как в этом ответе. Вы не получаете скрипт php, вы получаете HTML + JavaScript (если есть)
<?php
header('Content-disposition: attachment;
filename=http://www.victim.com/phpfile.php');
header('Content-type: application/pdf');
readfile('http://www.victim.com/phpfile.php');
?>
<?php
header('Content-disposition: attachment; filename=http://www.victim.com/phpfile.php');
header('Content-type: application/pdf');
readfile('http://www.victim.com/phpfile.php');
?>