- •Оглавление
- •Что такое интернет
- •Готовимся к созданию Web-страниц
- •Железо, железо и еще раз железо...
- •Домашняя эргономика — безопасность прежде всего!
- •Программное обеспечение для Web-мастера
- •Выбор хостинга
- •Знакомьтесь — РНР
- •История создания РНР
- •Установка РНР
- •Настройка РНР для Apache
- •Виртуальные хосты в Apache
- •Тестирование РНР
- •Установка и настройка дополнительных модулей
- •Переносимость и совместимость
- •Синтаксис РНР
- •Возможности РНР
- •Работа с базами данных
- •HTTP-аутентификация средствами РНР
- •Работа с изображениями
- •Поддержка закачки файлов
- •Поддержка HTTP-cookie
- •Использование регулярных выражений
- •Обработка ошибок
- •Управление электронными письмами
- •Вывод на экран и переменные в РНР
- •Простейшие арифметические операции
- •Простейшие логические операции
- •Циклы
- •Массивы
- •Работа со строками
- •Сессии
- •Программирование на РНР
- •Сравнение чисел
- •Вложение файлов в документ
- •Простейший счетчик посещений
- •Обработка форм
- •Отправление почты
- •Отправление письма в HTML-формате
- •Дата по-русски
- •Счетчик посещений с использованием базы данных
- •Счетчик персональной посещаемости
- •Сохраняем информацию о посещениях
- •Ах, баннеры, баннеры...
- •Счетчик посещений с выводом информации на экран
- •Счетчик сессий
- •Создание динамического меню
- •«Грабим» странички
- •Голосование на сайте
- •Гостевая книга
- •Технология создания
- •Свой чат — это просто
- •Использование специального привата
- •Интернет-магазин
- •Технология создания
- •Сервисы интернет-магазина
- •Архив рассылок
- •Совет первый: а нужно ли вам это?
- •Совет второй: забудьте все советы
- •Пример системы безопасности
- •HTTP-аутентификация в РНР
- •Защита программы
- •РНР в вопросах и ответах
- •Приложения
- •Приложение 3. Некоторые функции РНР
- •Приложение 4. Cookie
- •Приложение 5. Методы передачи данных POST и GET
- •Приложение 6. Время Unix
194 |
Программирование на РНР |
echo"<br><br><a href=$katalog_archiv$name_temp$f2.html> Посмотреть</а> - <a href=$katalog_archiv$name_temp$f2.zip> Скачать</а></р>";
И конечно, не забудьте завершить цикл поиска файлов:
} }
Вот и все, как видите, тоже совсем несложно. Обратите внимание, я оставил файлы html и zip в одном каталоге с файлами txt, хотя сам же намекал, что стоит их разнести для ускорения работы. Это я сделал сознательно для того, что бы вы сами продумали этот вопрос и потренировались на этом примере.
Простаяаутентификация
Вопросы безопасности всегда волновали программистов и их работодателей. Первые бьются над извечным вопросом: как сделать, чтобы систему не «взломали». А вторые требуют от первых практически невозможного. В этой главе я дам несколько советов и попробую подсказать направление для ваших мыслей.
Совет первый: а нужно ли вам это?
Прежде чем начать, подумайте, стоит ли овчинка выделки. Нужно ли блокировать информацию, настолько ли она секретна и нужна ли кому-то еще, кроме вас?
Приведу пример. Одна фирма пожелала сделать отдельный прайс для дилеров с более низкими ценами. Разумеется, эта информация могла быть доступна только тем, кто является таким дилером, и никому более. Возникла парадоксальная ситуация. Пока информация была закрыта, ею пользовались только уже зарегистрированные дилеры. Как только информация стала доступна всем желающим, в фирму стали обращаться другие дилеры с предложениями о сотрудничестве. Оборот вырос. Сокрытие важной, казалось бы, информации пошло только во вред.
Простая аутентификация |
|
195 |
И таких примеров достаточно много. Не стоит все усложнять там, где можно обойтись более простыми решениями. И все же иногда этого не избежать.
Совет второй: забудьте все советы
Как ни странно, но это так: перед тем как разрабатывать свою систему безопасности, надо забыть все, что вы слышали раньше, и делать действительно свою систему. Копирование ни к чему хорошему не приведет, так как по скрытым особенностям всегда есть возможность подобрать алгоритм «взлома». Хорошая система — всегда индивидуальна, и ее алгоритм — информация сугубо секретная.
Но чтобы разобраться с принципами работы системы безопасности, рассмотрим следующий пример.
Пример системы безопасности
Давайте вернемся к той фирме, которая хотела спрятать прайс для дилеров, и попробуем подобным образом укрыть от чужого взгляда некоторую информацию. Для этого надо поместить файл в далекий-далекий каталог, запретить к нему доступ при помощи, например, файла .htacces и придумать уникальное имя для архива с информацией.
Далее, на входной странице размещаем следующую форму: <h5>0птовый npaйc</h5>
<form name="diler_vhod" method="post" action="diler.phtml"> <b>Пароль для входа:</b><br>
<input name="diler" type="password"> <input type="submit" value="Bxoд"> </form>
В эту форму (рис. 31) наши пользователи должны вводить пароль, и в зависимости от того, правильный он или нет, программа будет или разрешать команду на скачивание файла, или отказывать в доступе.
196 |
|
Программирование на РНР |
Рис.31.Формадлявводапароля
Сама программа имеет следующий вид:
<?
$add_price = "memo/price_diler.zip";
По этому адресу находится скрытый от всех файл. Его имя и имя каталога рекомендуется изменить так, чтобы нельзя было догадаться об их содержимом.
$pass = "3467899";
Так задаем пароль, по которому система разрешит вход.
Можно указать страницу, на которую попадет посетитель, если неправильно введет пароль. Я задал пустую строку, и по ней посетитель вообще никуда не попадет:
$no_file = "";
Следующий код проверяет введенные данные на соответствие правильному паролю:
if ($diler == $pass)
{ header ("Location: $add_price"); } else { header ("Location: $no_file"); } ?>
Простая аутентификация |
|
197 |
Если пароль совпадает, даем команду на скачивание архива, если нет — открываем страницу с сообщением об ошибке. А еще лучше — совсем ничего не открывать, тогда тот, кто не знает пароля, будет думать, что система просто не работает в данный момент, и, в конце концов, ему просто надоест.
HTTP-аутентификация в РНР
HTTP-аутентификация в РНР возможна только при запуске РНР как Apache-модуля и, следовательно, недоступна в CGI-версии. В РНР-скрипте для Apache-модуля можно использовать функцию header () для отправки сообщения «Authentication Required» в клиентский браузер, что вызывает появление в нем окна для ввода имени пользователя и пароля.
После того как пользователь ввел логин и пароль, РНР-скрипт будет вызван снова с инициированными переменными окружения $PHP_AUTH_USER, $PHP_AUTH_PW и $PHP_AUTH_TYPE, в которых установлены имя пользователя, пароль и тип аутентификации, соответственно. Вот стандартный пример скрипта, который демонстрирует аутентификацию клиента:
<?php
if (!isset($_SERVER["PHP_AUTH_USER"])) { header("WWW-Authenticate: Basic realm=\"My Realm\""); header("HTTP/1.0 401 Unauthorized");
echo "Текст, отправляемый в том случае, если пользователь нажал кнопку Cancel\n"; exit;
} else {
echo "<р>Привет {$_SERVER[`PHP_AUTH_USER`]}.</p>"; echo "<р>Вы ввели пароль {$_SERVER[`$PHP_AUTH_PW` ] } .</p>";
}
?>