Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
PHP обучение на примерах - Кухарчик А..pdf
Скачиваний:
135
Добавлен:
24.05.2014
Размер:
23.87 Mб
Скачать

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>";

}

?>

Соседние файлы в предмете Программирование