П О Р Т А Л                            
С Е Т Е В Ы Х                          
П Р О Е К Т О В                        
  
                                                 
Главная

О проекте

Web-мастеру
     HTML & JavaScript
     SSI
     Perl
     PHP
     XML & XSLT
     Unix Shell

MySQL

Безопасность

Хостинг

Другое







Самое читаемое:

Учебник PHP - "Для Чайника".
Просмотров 98027 раз(а).

Иллюстрированный самоучитель по созданию сайтов.
Просмотров 29044 раз(а).

Учебник HTML.
Просмотров 56168 раз(а).

Руководство по PHP5.
Просмотров 25918 раз(а).

Хостинг через призму DNS.
Просмотров 30442 раз(а).

Подборка текстов стандартных документов.
Просмотров 28945 раз(а).

Учебник PHP - Самоучитель
Просмотров 33668 раз(а).

Документация на MySQL (учебник & справочное руководство)
Просмотров 34955 раз(а).

Внешние атаки...
Просмотров 26929 раз(а).

Учебник PHP.
Просмотров 22759 раз(а).

SSI в примерах.
Просмотров 17840 раз(а).



 
 



ГЛАВА 16. Безопасность.

Аутентификация пользователя

Правильно введенные имя и пароль открывают пользователю доступ к каталогам сервера, недоступным для анонимного доступа. Этот принцип аутентификации обычно называется схемой «запрос/ответ» (challenge/response). Запросом является приглашение к вводу имени и пароля, а ответом — введенные данные. Если введенная комбинация верна, пользователю предоставляется доступ к защищенным каталогам; в противном случае попытка получения доступа отклоняется с выводом соответствующего сообщения.

Как правило, для ввода имени и пароля применяются диалоговые окна, активизируемые вызовом функции header() (листинг 16.2).

Листинг 16.2. Запрос данных для аутентификации пользователя

<?

header('WWW-Authenticate: Basic realm="Secret Family Recipes"'); header('HTTP/1.0 401 Unauthorized'); exit; ?>

Выполнение фрагмента из листинга 16.2 всего лишь активизирует окно для ввода данных. Примерный вид этого окна изображен на рис. 16.1.

Рис. 16.1. Окно аутентификации пользователя

Следующим шагом после подготовки интерфейса для ввода является обработка имени пользователя и пароля. В РНР имя и пароль хранятся в двух глобальных переменных, $PHP_AUTH_USER (имя) и $PHP_AUTH_PW (пароль). В листинге 16.3 показано, как проверяются значения этих переменных. Если данные не были введены, окно аутентификации отображается заново.

Экспериментируя со сценариями этого раздела, вы увидите, что окно аутентификации не всегда появляется после обновления страницы. Проблема кроется не в программе, а в том, как окна аутентификации реализованы в браузере. Чтобы вызвать окно, вам придется закрыть и перезапустить браузер.

Листинг 16.3. Проверка глобальных переменных аутентификации в РНР

<? 

If ( (! isset ($PHP_AUTH_USER)) || (! isset ($PHP_AUTH_PW)) ):
  header('WWW-Authenticate: Basic realm="Secret Family Recipes"');
  header('HTTP/1.0 401 Unauthorized');
  print "You are attempting to enter a restricted area. Authorization is required.";
  exit; 
endif; 

?> 

В простейшей, но недостаточно гибкой схеме ограничения доступа к странице имя пользователя и пароль жестко кодируются в сценарии. В листинге 16.4 приведен вариант предыдущего примера, построенный с использованием этой схемы.

Листинг 16.4. Жесткое кодирование имени и пароля в сценарии

<? 

if ( (! isset 
($PHP_AUTH_USER)) || (! isset ($PHP_AUTH_PW)) || ($РНР AUTH USER != 'secret') || 
($PHP_AUTH_PW !- 'recipes') ) :

  header('WWW-Authenticate: Basic realm="Secret Family Recipes"'); 
  header('HTTP/1.0 401 Unauthorized');
  print "You are attempting to enter a restricted area. Authorization is required"
  exit; 

endif; 

?> 

Назад | Содержание раздела | Общее Содержание | Вперед



 





Copyright © 2005-2011 Project.Net.Ru