php "include ()" недостаток безопасности? - PullRequest
2 голосов
/ 14 ноября 2011

В руководстве по PHP для include есть вклад пользователя, который гласит следующее:

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

К счастью, есть быстрое и простое упражнение для этого поведения (которое упоминается в этой статье):

<?php
ob_start();//Hook output buffer
include("config.php");
ob_end_clean();//Clear output buffer
?> 

Я знаю, что следующее предотвратит любой вывод до тех пор, пока буфер вывода не будет очищен / отцеплен / что угодно Однако в чем я не уверен, это if someone corrupts the PHP header in the included file - это то, что можно сделать на стороне клиента / удаленно, или это было бы, если бы я случайно дал файлу php другое расширение файла?

Короче говоря: как мог внешний пользователь испортить заголовок php?

Ответы [ 5 ]

5 голосов
/ 14 ноября 2011

Хорошо, допустим, у вас есть файл seekritpasswords.php, который вы включаете, и он содержит ваши учетные данные базы данных. У вас есть файл, который выглядит примерно так:

<?php

$db_user = 'fred';
$db_passwd = 'barney';
$db_name = 'wilma';
$db_host = 'betty';

php "header" - это часть <?php. Если это будет повреждено, скажем, добавив к нему пробел или полностью удалив его и т. Д. Тогда файл больше не является скриптом php, так как он не содержит заголовка, который вызывает «режим php». это будет просто обычный текст, и он будет обрабатываться как обычный вывод, как и любой другой простой текстовый файл. Помните, что нет такого понятия, как сценарий PHP. Есть только файлы, которые содержат один или несколько блоков PHP, и эти блоки ограничены наборами тегов <?php ?>.

1 голос
/ 14 ноября 2011

Если кто-то повредил ЛЮБОЙ файл, в который входит PHP, вы столкнулись с этой проблемой.Я понятия не имею, что разрешил этот пользователь (веб-редактирование config.php ...?), Но этот файл должен редактировать только администратор сервера и разработчики.

Допускается изменение файла, такого как config.php позволит кому-то сделать что-то подобное, что звучит так, как описывает этот пользователь.

// Removed: <?php

$config = array(
 ...

);

// removed: ?>

Ядро PHP будет анализировать любой файл, переданный ему (независимо от расширения .php), поэтому только допустимый проектфайлы должны быть включены.Никогда не включайте файлы, основанные на пользовательском вводе.

0 голосов
/ 14 ноября 2011

Для меня это звучит как паранойя. Если кто-то (кроме вас) может испортить заголовок PHP (а мы говорим о

Если кто-то делает это как часть процесса разработки, я надеюсь, что вы не разрабатываете свою производственную систему. У вас должна быть коробка разработки и выкладывать свои обновления в производство.

0 голосов
/ 14 ноября 2011

Любой включенный файл обрабатывается как исходный файл PHP.То есть если есть открывающий тег php

0 голосов
/ 14 ноября 2011

Они говорят, что если кто-то может отредактировать ваш PHP-файл (например, удалив <?php), то информация о вашей конфигурации будет просто отправлена ​​в браузер, так как PHP больше не будет его анализировать.

Обходной путь, который они предлагают, просто обнуляет любой вывод из вашего конфигурационного файла.

Как говорит @Niklas, если кто-то может редактировать ваши файлы, тогда ущерб все равно будет нанесен. Нет, это нельзя сделать удаленно (если не считать серьезной ошибки в коде или какой-либо другой уязвимости), и нет, если вы включите PHP с другим расширением, PHP все равно будет его анализировать. Однако будьте осторожны, если кто-то запросит этот файл в своем браузере, PHP не будет его анализировать, поскольку веб-сервер должен определить тип файла и обработать его соответствующим образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...