Защитите файлы PHP от загрузки, если сбой службы php [duplicate]

4
задан Lekensteyn 30 August 2012 в 13:06
поделиться

5 ответов

Вы не можете избежать загрузки файлов, если ваше приложение не безопасно. В следующем примере злоумышленник может просмотреть любой файл на вашем сервере:

<?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>
12
ответ дан Lekensteyn 21 August 2018 в 02:40
поделиться
  • 1
    Спасибо за ваш ответ. Как включить это в php-файл, просто скопируйте и вставьте его таким же образом или мне нужно сделать что-то еще? Иными словами, вы говорите независимо от того, что никто не может загрузить файлы, если сервер защищен? – AAA 13 September 2010 в 20:01
  • 2
    @AAA: Это не имеет никакого отношения к самому скрипту PHP. Он принадлежит вашей конфигурации apache. – jwueller 13 September 2010 в 20:03
  • 3
    @AAA расслабиться. Скорее всего, нет никаких проблем. Каждый обычный сервер, настроенный для анализа файлов PHP, будет not позволять людям загружать исходный код PHP. – Pekka 웃 13 September 2010 в 20:05
  • 4
    @pekka, в этом случае я настроен, я использую версию версии rackspace. – AAA 13 September 2010 в 20:09
  • 5
    @Lekensteyn Я только сейчас вижу и ценю то, что делает ваше предложение. Nice! Первый IfModule будет хорошо подходить как стандартный .htaccess для любого проекта для полной безопасности – Pekka 웃 13 September 2010 в 20:12

При нормальных обстоятельствах никто не может загрузить исходный код PHP, поскольку он выполняется на сервере. Вебсервер распознает PHP-скрипты и передает их на PHP. Затем результат возвращается в браузер запрашивающего пользователя. Ситуация, о которой вы описали, может быть достигнута только в том случае, если конфигурация веб-сервера действительно запутана.

9
ответ дан jwueller 21 August 2018 в 02:40
поделиться
  • 1
    Был бы +1, если бы у меня остались голоса - это, вероятно, все, что можно сказать, вероятно, нет проблем вообще – Pekka 웃 13 September 2010 в 20:06
  • 2
    «При нормальных обстоятельствах» - дополнительный безопасный защитник всегда полезен, если что-то действительно идет не так. (автомобиль не должен падать, но в случае аварии водитель будет иметь ремни безопасности и подушки безопасности, защищающие его) – Lekensteyn 14 September 2010 в 15:59
  • 3
    @Lekensteyn: Вы правы. Как я уже сказал в комментариях к вопросу, мне очень нравится ваше решение. – jwueller 14 September 2010 в 16:37

В нормальных условиях никто не может загрузить исходный код 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.

1
ответ дан kalabog76 21 August 2018 в 02:40
поделиться

Вы никогда не загружаете 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');
?> 
0
ответ дан lisandro 21 August 2018 в 02:40
поделиться
<?php
header('Content-disposition: attachment; filename=http://www.victim.com/phpfile.php');
header('Content-type: application/pdf');
readfile('http://www.victim.com/phpfile.php');
?> 
2
ответ дан paul 21 August 2018 в 02:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: