Разработка системы доступа к ресурсам образовательного веб-портала вуза

Создание базы данных для хранения информации о пользователях системы. Применение механизма аутентификации и управления сессиями. Описание программных мер, предпринятых для обеспечения безопасности информационных ресурсов образовательного веб-портала.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 27.06.2012
Размер файла 2,2 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

В том случае, если браузер получает заголовок "WWW-Authenticate", то он выдает посетителю стандартное окно для ввода логина и пароля (рис. 9.).

Этот вид авторизации тоже реализуется стандартными средствами web-сервера.

Преимущества 1 и 2 вида авторизации:

- функции ограничения доступа встроены в Web-сервер Apache, поэтому нет необходимости создавать что-то новое;

- высокая степень надежности;

- не задействованы cookies.

Недостатки:

- перенос файлов на другой сервер требует воссоздания .htpassw по новой;

- довольно утомительно осуществлять смену пароля;

- для создания файла с паролями необходимо специальное ПО;

- стандартный вид;

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

4.3.3 Авторизация с помощью cookies

Cookie - это файл в специальном формате, который присылается сервером браузеру посетителя сайта, расположенном на этом сервере. Браузер, если он поддерживает cookie (и эта поддержка в нем не отключена), помещает его в особое место и впоследствии отправляет назад на сервер при поступлении от него запроса.

Cookie можно установить (т.е. прислать на компьютер посетителя) и средствами PHP. Для этого используется команда SetCookie, имеющая параметры:

- имя cookie;

- информация, записанная в cookie;

- время жизни cookie.

Преимущества:

- простота реализации;

- удобство использования.

Недостатки:

- некоторые пользователи ОТКЛЮЧАЮТ cookie;

- проверка правильности логина и пароля осуществляется на каждой странице, поэтому возрастает нагрузка на web-сервер;

- низкая степень надежности.

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

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

4.3.4 Авторизация с помощью сессий

"Сессия" - несколько абстрактное понятие, означающее нечто вроде "законченного периода работы с сайтом".

С помощью команд "поддержки сессий" PHP можно при заходе посетителя на сайт запоминать какие-либо переменные и потом эти переменные считывать или изменять на других страницах этого сайта. При этом в браузер посетителя передаются не сами эти переменные, а некий пароль, по которому сервер впоследствии этот браузер узнает и восстановит именно те значения переменных, которые были установлены для данного посетителя.

Иными словами - работа механизма сессий в PHP происходит так: Когда посетитель заходит на сайт и для него устанавливаются какие-либо переменные (сам ли он их вводит или, скажем, они берутся из базы данных), то команды начала и регистрации сессии сохраняют эти переменные в определенном месте на самом сервере .

Если у посетителя браузер принимает cookie, то ему высылается cookie (с определенным именем - по умолчанию "PHPSESSID"), содержащий так называемый "идентификатор сессии" , а если нет, то web-сервер автоматически помещает данный идентификатор в переменную PHPSESSID в каждую ссылку на выдаваемых посетителю страницах сайта (естественно, "внутреннюю" - то есть ведущую на другие страницы того же самого сайта, с тем же самым доменным именем). Таким образом, идентификатор передается на сервер при каждом заходе посетителя на какую-либо из страниц сайта, будучи либо взятым из соответствующего cookie, установленного посетителю при открытии сессии, либо из адресной строки ссылки, куда этот идентификатор автоматически помещается web-сервером.

Преимущества:

- проверка правильности логина и пароля осуществляется единожды;

- возможна авторизация и с включенными и с выключенными cookies. Этот метод можно применять при большом числе посетителей.

Недостатки:

- Необходимо применить дополнительные меры безопасности при передаче параметров сессии.

Учитывая описанные достоинства и недостатки всех видов авторизации, оптимальным методом для реализации в работе по созданию системы доступа для Web-портала СпбГУТ будет авторизация с помощью сессий, так как при большом числе посетителей этот метод более приемлем за счет того, что проверка логина/пароля происходит единожды, а следовательно не будет перегрузки сервера, а также за счет независимости от cookies возможен охват большего числа посетителей. Этот метод отличается простотой, удобством использования и достаточно высокой степенью надежности, что является решающим аргументом в его пользу.

4.3.5 Реализация алгоритма авторизации

Рассмотрим как реализован алгоритм авторизации в рамках данной работы.

На главной странице портала расположен блок авторизации, содержащий поля для ввода логина и пароля, представленный на рис. 10.

Рис. 10. Главная страница портала с блоком авторизации

Блок авторизации выглядит, как представлено на рис. 11.

Рис. 11. Блок авторизации

Для прохождения процедуры авторизации, необходимо ввести логин и пароль и нажать кнопку «Войти».

После нажатия кнопки запускается механизм аутентификации.

4.4 Применение механизма аутентификации

Аутентификация - проверка принадлежности субъекту доступа предъявленного им идентификатора; подтверждение подлинности.

Один из способов аутентификации в компьютерной системе состоит во вводе вашего пользовательского идентификатора, в просторечии называемого «логином»(англ. login -- регистрационное имя пользователя) пароля-- некой конфиденциальной информации, знание которой обеспечивает владение определенным ресурсом. Получив введенный пользователем логин и пароль, компьютер сравнивает их со значением, которое хранится в специальной базе данных и, в случае совпадения, пропускает пользователя в систему.

Различие авторизации и аутентификации заключается в том, что аутентификация -- это установление подлинности лица, а авторизация -- предоставление этому лицу некоторых прав или проверка их наличия (как правило -- следующий шаг системы после аутентификации).

Обоснование выбора метода аутентификации.

Проблемы аутентификации пользователя хорошо изучены, для их решения есть множество разных способов: от традиционного пароля до биометрических систем. Но все они основаны либо на знании чего-то, либо на владении чем-то. Наиболее распространены системы с использованием пароля. Они просты и удобны, в том числе, с точки зрения реализации, но при этом у систем защиты, основанных на паролях, есть ряд недостатков:

· логин не является "реальным" идентификатором пользователя в том смысле, что связь между человеком и идентификатором очень условна;

· пароли подбираются/взламываются.

Другой подход к проблеме аутентификации предлагают системы сертификатов, основанные на криптографии с открытым ключом. Эти системы позволяют не только проверить право входа, но и связать идентификатор с объектом реального мира. Однако и у них есть недостатки:

· необходимость наличия в инфраструктуре средств генерации/выдачи сертификатов (PKI);

· необходимость хранения в тайне секретного ключа из пары (его утечка требует немедленной смены ключей и сертификатов, поскольку его невозможно сменить, как обычный пароль). Вывод: наиболее приемлемой для системы доступа веб-портала является система аутентификации с использованием логина и пароля, поскольку она является более распространенной, проверенной временем, простой с точки зрения реализации, не требующей дополнительных ресурсов, необходимых для ее организации и обеспечения безопасности.

Механизм аутентификации сравнивает значения логина и пароля, введенные пользователем со значениями, хранящимися в базе данных «Реальных пользователей», и при совпадении значений происходит запуск механизма управления сессиями и скрипта распределения прав доступа пользователей к ИР веб-портала, и происходит вход пользователя в систему.

4.5 Реализация распределения прав доступа пользователей к информационным ресурсам веб-портала

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

Рассмотрим алгоритм выполнения скрипта распределения прав доступа.

1. Поиск соответствия по таблицам БД пользователей портала.

Производится поиск соответствия введенных значения логина и пароля значениям, которые хранятся в базе данных.

2. Определение группы пользователя в соответствии с принадлежностью найденной записи таблице БД.

Например, если пользователь найден в таблице «Методисты», то он относится к группе «Методист»

3. Формирование списка доступных ресурсов (страниц, функций)

На данном шаге формируется список всех доступных для данного пользователя ресурсов.

4. Формирование уникального набора функций «Личного кабинета» пользователя.

Для каждого пользователя, в зависимости от его прав доступа к ИР и информационных потребностей формируется свой уникальный набор функций.

5. Делегирование привилегий доступа к ресурсам.

На данном шаге происходит предоставление пользователю определенной степени доступа к ресурсам веб-портала.

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

Схематично эта последовательность показана на рисунке.

Наследование позволяет одному объекту приобретать свойства другого объекта.

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

Таким образом, делегирование прав доступа происходит после выполнения механизмов аутентификации, управления сессиями на завершающем этапе процедуры авторизации.

Рис. Общая последовательность выполнения применяемых в системе механизмов, скриптов во время прохождения процедуры авторизации.

4.6 Функции «Личного кабинета»

Функции «Личного кабинета» представляют собой запросы к базе данных на ввод, вывод информации.

Все сходные функции, предоставляемые пользователям, объединены в группы:

1. Личные функции

2. Групповые функции

3. Общие функции

Личные функции- это запросы к базе данных, которые оперируют только личной информацией данного конкретного пользователя. Примером функции, относящейся к группе личных функций является «Просмотр личных сообщений» и т.п.

К групповым функциям относятся запросы, которые необходимы всем пользователям определенной группы. Например, групповыми функциями для всех пользователей группы «Методист» будут:

§ «Просмотр личных дел учащихся»

§ «Учет посещаемости»

§ «Ход выполнения приказов»

К группе общих относятся функции, доступные всем пользователям.

Примером такой функции может служить «Библиотека».

Все функции «Личного кабинета» представляют собой ресурсы веб-портала.

5. ОБЕСПЕЧЕНИЕ БЕЗОПАСНОСТИ НФОРМАЦИОННЫХ РЕСУРСОВ

5.1 Методы защиты информации

Существует 3 метода защиты информации:

1) Физический

Данный метод заключается в ограничении физического доступа к серверу портала

2) Административный

Данный метод заключается в регламентировании порядка взаимодействия пользователей с системой, правил использования ресурсов ИС и т.д.

3) Программный

Представляет собой меры обеспечения защиты информации реализуемые в программном коде соответствующей ИС.

Физический и административный методы защиты информации выходят за рамки работы.

В данной работе применен программный метод защиты информации.

5.2 Программные меры защиты информации, реализованные в разработанной системе доступа

Защита информации в модуле системы доступа организована исходя из основных принципов защиты информации:

· Экономическая эффективность.

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

· Минимум привилегий.

Каждый пользователь должен иметь минимальный набор привилегий, необходимый для работы.

· Простота.

Система защиты тем более эффективна, чем проще с ней работать.

· Отключаемость защиты.

При нормальном функционировании ИС система защиты не должна отключаться. Ее может отключить только сотрудник со специальными полномочиями и только в особых случаях.

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

· Всеобщий контроль.

Любые исключения из множества контролируемых объектов и субъектов защиты снижают уровень защиты ИС.

· Независимость системы защиты от субъектов защиты.

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

· Отчетность и подконтрольность.

Система защиты должна предоставлять доказательства корректности своей работы.

· Ответственность.

Подразумевается личная ответственность лиц, занимающихся обеспечением информационной безопасности.

· Изоляция и разделение.

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

· Полнота и согласованность.

Надежная система защиты должна быть полностью специфицирована, протестирована и согласована.

· Параметризация.

Защита становится наиболее эффективной и гибкой, если допускает изменение своих параметров со стороны администратора безопасности.

· Принцип враждебного окружения.

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

· Привлечение человека.

Наиболее важные и критические решения должны приниматься человеком.

При разработке системы доступа были реализованы следующие меры защиты ИР:

ь Применяется паролирование «Личных кабинетов» пользователей системы

ь Пароли по сети передаются только в зашифрованном виде.

ь Используется алгоритм шифрования SHA1

ь Используется механизм аутентификации пользователей

ь Применяется механизм управления сессиями

В программном коде созданы специальные функции проверки вводимой пользователем информации.

Запрещен ввод специальных символов

Ограничена длина строк для ввода информации

Проверка переменной окружения веб-сервера

ь Реализована защита от автоматических регистраций, которая позволяет предотвратить заполнение базы данных ненужной информацией

ь Доступ к «Личному кабинету» возможен одновременно только с одного IP -адреса

ь При разработке использовалось ПО, которое соответствует промышленным стандартам

5.3 Алгоритм шифрования паролей SHA1

Для шифрования паролей используется алгоритм шифрования SHA1.

Secure Hash Algorithm 1 -- алгоритм криптографического хеширования. Описан в RFC 3174. Для входного сообщения произвольной длины (максимум 264 ? 1 бит, что равно 2 эксабайта) алгоритм генерирует

160-битное хеш-значение, называемое также дайджестом сообщения. Используется во многих криптографических приложениях и протоколах. Также рекомендован в качестве основного для государственных учреждений в США. Принципы, положенные в основу SHA-1, аналогичны тем, которые использовались Рональдом Ривестом при проектировании MD4.

Описание алгоритма.

SHA-1 реализует хеш-функцию, построенную на идее функции сжатия. Входами функции сжатия являются блок сообщения длиной 512 бит и выход предыдущего блока сообщения. Выход представляет собой значение всех хеш-блоков до этого момента. Иными словами хеш блока Mi равен

hi = f(Mi,hi ? 1).

Хеш-значением всего сообщения является выход последнего блока.

Рис. Одна итерация алгоритма SHA1

Инициализация.

Исходное сообщение разбивается на блоки по 512 бит в каждом. Последний блок дополняется до длины, кратной 512 бит. Сначала добавляется 1 а потом нули, чтобы длина блока стала равной (512 - 64 = 448) бит. В оставшиеся 64 бита записывается длина исходного сообщения в битах.

Если последний блок имеет длину более 448, но менее 512 бит, дополнение выполняется следующим образом: сначала добавляется 1, затем нули вплоть до конца 512-битного блока; после этого создается ещё один 512-битный блок, который заполняется вплоть до 448 бит нулями, после чего в оставшиеся 64 бита записывается длина исходного сообщения в битах. Дополнение последнего блока осуществляется всегда, даже если сообщение уже имеет нужную длину.

Инициализируются пять 32-битовых переменных.

Криптоанализ.

Криптоанализ хеш-функций направлен на исследование уязвимости к различного вида атакам. Основные из них:

*нахождение коллизий -- ситуация, когда двум различным исходным сообщениям соответствует одно и то же хеш-значение.

*нахождение прообраза -- исходного сообщения -- по его хешу.

При решении методом «грубой силы»:

*вторая задача требует 2160 операций.

*первая же требует в среднем 2160/2 = 280 операций

От устойчивости хеш-функции к нахождению коллизий зависит безопасность электронной цифровой подписи с использованием данного хеш-алгоритма. От устойчивости к нахождению прообраза зависит безопасность хранения хешей паролей для целей аутентификации.

В январе 2005 года Vincent Rijmen и Elisabeth Oswald опубликовали сообщение об атаке на усеченную версию SHA-1 (53 раунда вместо 80), которая позволяет находить коллизии меньше, чем за 280 операций.

В феврале 2005 года Сяоюнь Ван, Йицунь Лиза Йинь и Хунбо Ю представили атаку на полноценный SHA-1, которая требует менее 269 операций.

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

5.4 Применение CAPTCHA

CAPTCHA (от англ. «Completely Automated Public Turing test to tell Computers and Humans Apart» -- полностью автоматизированный публичный тест Тьюринга для различия компьютеров и людей) -- компьютерный тест, используемый для того, чтобы определить, кем является пользователь системы: человеком или компьютером.

В Интернете среди русскоязычных пользователей часто транскрибируется как капча.

Термин появился в 2000 году. Основная идея теста: предложить пользователю такую задачу, которую может решить человек, но которую несоизмеримо сложно предоставить для решения компьютеру. В основном это задачи на распознавание символов.

Применяются CAPTCHA для того, чтобы предотвратить множественные автоматические регистрации и отправления сообщений программами-роботами.

В модуле системы доступа на странице регистрации новых пользователей применяется captcha, которая представляет собой рисунок в искажённом виде, содержащий цифровой код, который необходимо ввести в поле «Код подтверждения».

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

Captca, применяемая при регистрации новых пользователей выглядит следующим образом:

Рис. Вид Captca (кода подтверждения)

В данном случае код подтверждения равен 616574

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

ЗАКЛЮЧЕНИЕ

Результатом работы является полностью завершенный модуль системы доступа к ресурсам веб-портала СПбГУТ, представляющий собой совокупность механизмов распределения прав доступа к информационным ресурсам вуза и предусматривающий возможность регистрации новых пользователей, прохождения механизма аутентификации и авторизации зарегистрированных пользователей в системе, создание групп пользователей и объединение пользователей в группы, обеспечивающий достаточный уровень безопасности информационных ресурсов веб-портала.

Разработанный модуль обеспечивает необходимый уровень доступа пользователей к информационным ресурсам и входит в состав образовательного веб-портала СПбГУТ , который должен стать инструментом повседневной деятельности студентов и сотрудников СПбГУТ, а также предоставлять определенную информацию для любых посетителей веб-портала.

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

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

ПРИЛОЖЕНИЯ

Приложение 1. Системные требования

Требования к серверному программному обеспечению.

Для корректной работы системы требуется следующее программное обеспечение:

· операционная система семейства Windows или Unix или MacOS;

· Apache v. 2.2 или выше;

· PHP v. 5.0 или выше;

· MySQL v. 5.0 или выше;

· ZendFramework 1.10 или выше/

Требования к клиентскому программному обеспечению.

Для корректной работы разработанной системы пользователю требуется:

· Доступ в Интернет

· Браузер

  • Приложение 2. Список файлов
    • Название папки

      Название файла

      Выполняемые функции

      Стр

      www

      auth. php

      выполняет авторизацию зарегистрированных польз.

      76

      AUTHform.html

      форма авторизации зарегистрированных польз.

      92

      DB_users.php

      создает БД REG и таблицу USERS

      77

      config.inc.php

      файл конфигурации с данными для MySQL

      79

      functions.inc.php

      файл с функциями (проверка/ отправка почты)

      80

      gut_acl.php

      Скрипт распределения прав доступа

      80

      output_login.php

      Скрипт для вывода логина авторизованного пользователя в «Личном кабинете»

      89

      output_users.php

      Вывод информации о зарегистрированных пользователях из БД REG (DB_users.php)

      89

      REGform.html

      форма регистрации пользователей

      92

      Registration.php

      осуществляет регистрацию пользователей

      86

      www/img

      capcha.php

      организация кода подтверждения

      91

      Addict.ttf

      файл шрифтов

      -

      1.jpeg

      Картинка для кода подтверждения

      -

      2.jpeg

      Картинка для кода подтверждения

      -

      3.jpeg

      Картинка для кода подтверждения

      -

      www/tpl

      default.php

      Шаблон

      92

      Название папки

      Название файла

      Выполняемые функции

      Стр

      www/real_users

      R_auth. php

      выполняет авторизацию зарегистированных польз.

      93

      R_AUTHform.html

      форма авторизации зарегистированных польз.

      -

      university8.php

      создает БД учета успеваемости

      -

      config.inc.php

      файл конфигурации с данными для MySQL

      -

      R_gut_acl.php

      Скрипт распределения прав доступа

      96

      sem_show.php

      Вывод данных о логинах/паролях пользователей из БД university8 (учета успеваемости)

      -

      R_output_login

      Скрипт для вывода логина авторизованного пользователя группы «Реальных пользователей» в «Личном кабинете»

      95

      www/ real_users/tpl

      default.php

      Шаблон

      -

      www/ real_users/resourses

      redakt_ocenki_metodist.php

      Ресурс редактирования оценок, доступный для подгруппы «Методист»

      -

      obzor_ocenki_prep.php

      Ресурс просмотра оценок группы, доступный для подгруппы «Преподаватель»

      -

      ocenki_stud.php

      Ресурс просмотра оценок, доступный для подгруппы «Студент»

      -

      www/ /library

      • Acl.php

      Role.php+Resource.php и др.

      Библиотека классов ZendFramework

      -

      • Листинг скрипта auth. php:
        • <?php
        • // Инициализируем начало сессии
        • session_start();
        • //Поключаем файл конфигурации
        • include("config.inc.php");
        • //Подключаемся к БД
        • $link = mysql_connect($DBSERVER, $DBUSER, $DBPASS)
        • or die("Не могу подключиться" );
        • // сделать $DB текущей базой данных
        • mysql_select_db($DB, $link) or die ('Не могу выбрать БД');
        • //Если нет сессий
        • if(md5(crypt($_SESSION['user'],$_SESSION['password'])) != $_SESSION['SID'])
        • {
        • //Если кнопка не нажата, отображаем форму
        • if(!$_POST['do']){
        • //Вывод ФОРМЫ авторизации
        • include("AUTHform.html");
        • }
        • //Если кнопка нажата
        • if($_POST['do']) {
        • //Проверяем данные
        • $login = $_POST['login'];
        • $upass = $_POST['password'];
        • if($login !='' AND $upass !='') {
        • //Создаем запрос
        • $q1=mysql_query("SELECT * FROM users WHERE nick='".$login."' AND password='".md5($upass)."' AND status=1");
        • //Проверяем существует ли хоть одна запись
        • if(mysql_num_rows($q1)===1) {
        • //Если есть, то создаем сессии и перенаправляем на эту страницу
        • $r=mysql_fetch_array($q1);
        • $_SESSION['user'] = $r['nick'];
        • $_SESSION['password'] = $r['password'];
        • $_SESSION['SID'] = md5(crypt($r['nick'],$r['password']));
        • //скрипт РАСПРЕДЕЛЕНИЯ ПРАВ ДОСТУПА
        • include("gut_acl.php");
        • //скрипт для вывода логина авторизованного пользователя+ кнопки управления
        • include("output_login.php");
        • @Header("Location: auth.php");
        • }
        • else {echo 'Неверный логин/пароль; Возможно Ваш аккаунт не активирован';}
        • }
        • else {echo 'Введите данные';}
        • }
        • }
        • else {
        • скрипт для вывода логина авторизованного пользователя+ кнопки управления
        • include("output_login.php");
        • блок для вывода шаблонов страниц портала
        • if($_GET['page'] !='') {
        • @include("tpl/".$_GET['page'].".php");
        • }
        • else { @include("tpl/default.php");}
        • }
        • if($_GET['exit']) {@session_destroy(); unset($_GET['exit']); mysql_close($link); @Header("Location: auth.php");}
        • ?>
        • Листинг скрипта DB_users.php:
        • <html>
        • <head>
        • <title>Create DataBase</title>
        • <meta charset=Windows-1251">
        • </head>
        • <body>
        • <?php
        • // Подключаемся к MySQL
        • define("SERVER", "localhost");
        • define("USERNAME", "root");
        • define("PASSWORD", "");
        • $link = mysql_connect (SERVER, USERNAME, PASSWORD);
        • if ( !$link ) die ("Couldn't connect to MySQL");
        • // Создаем базу данных REG
        • $DB= mysql_query('CREATE DATABASE if not exists REG');
        • if (!$DB)
        • {
        • printf("<br><b>Ошибка! Не удалось создать базу данных</b> %s", mysql_error()."<br>");
        • }
        • else
        • {
        • echo "<br><b> База данных создана успешно</b><br>";
        • }
        • //Сделаем REG текущей базой данных
        • $registr = mysql_select_db('REG', $link);
        • if (!$registr)
        • {
        • printf("<br><b>База данных недоступна</b> %s", mysql_error()."<br>");
        • }
        • else
        • {
        • echo "<br><b>Соединение с базой данных установлено</b><br>";
        • }
        • // Создаем таблицу users
        • $DB_t1 = mysql_query('CREATE TABLE users
        • ( id INT( 6 ) NOT NULL AUTO_INCREMENT PRIMARY KEY,
        • nick VARCHAR( 30 ) NOT NULL,
        • password VARCHAR( 50 ) NOT NULL,
        • email VARCHAR( 50 ) NOT NULL,
        • uniq_id VARCHAR( 50 ) NOT NULL,
        • status INT( 1 ) NOT NULL,
        • last_date INT( 8 ) NOT NULL,
        • date INT( 8 ) NOT NULL )
        • ');
        • if (!$DB_t1)
        • {
        • printf("<br><b>Не удалось создать таблицу users</b> %s", mysql_error()."<br>");
        • }
        • else
        • {
        • echo "<br><b>Таблица users создана успешно </b><br>";
        • }
        • //Завершаем работу с БД
        • if (!mysql_close($link))
        • {
        • echo "<br><b>Не удалось завершить соединение с базой данных</b><br>";
        • }
        • else
        • {
        • echo "<br><b>Соединение с базой данных завершено успешно</b><br>";
        • }
        • ?>
        • </body>
        • </html>
        • Листинг скрипта config.inc.php:
        • <?php
        • //Файл конфигурации с данными для MySQL:
        • //Сервер
        • $DBSERVER = "localhost";
        • //Пользователь
        • $DBUSER = "root";
        • // Пароль
        • $DBPASS = "";
        • //База данных
        • $DB = "REG";
        • ?>
        • Листинг скрипта functions.inc.php:
        • <?php
        • // Файл с функциями
        • //Функция проверки корректности введенного e-mail'а
        • function checkmail($mail) {
        • // удаляем крайние пробелы
        • $mail=trim($mail);
        • // если пусто - выход
        • if (strlen($mail)==0) return -1;
        • if (!preg_match("/^[a-z0-9_-]{1,20}+(\.){0,2}+([a-z0-9_-]){0,5}@(([a-z0-9-]+\.)+(com|net|org|mil|".
        • "edu|gov|arpa|info|biz|inc|name|[a-z]{2})|[0-9]{1,3}\.[0-9]{1,3}\.[0-".
        • "9]{1,3}\.[0-9]{1,3})$/is",$mail))
        • return -1;
        • return $mail;
        • }
        • //Функция отправки почты
        • function sendmail($mail,$subject,$message,$headers) {
        • if(mail($mail,$subject,$message,$headers))
        • { return TRUE;}
        • else {return FALSE;}
        • }
        • ?>
        • Листинг скрипта gut_acl.php:
        • <?php
        • // Путь к файлам с классами Zend'а
        • set_include_path('library');
        • // Подключаем необходимые классы
        • require_once 'Zend/Acl.php';
        • require_once 'Zend/Acl/Role.php';
        • require_once 'Zend/Acl/Resource.php';
        • // Создание списка контроля доступа ACL (объект Zend_Acl)
        • $acl = new Zend_Acl();
        • // ДОБАВЛЕНИЕ ПОЛЬЗОВАТЕЛЕЙ(РОЛЕЙ)
        • // Выполним добавление ГРУПП пользователей
        • //ГРУППА действующих(реальных) пользователей
        • $acl->addRole(new Zend_Acl_Role('users_group'))
        • //Подгруппа учащиеся=group_std
        • ->addRole(new Zend_Acl_Role('group_std'), 'users_group')
        • //Подгруппа сотрудники=group_sotrud
        • ->addRole(new Zend_Acl_Role('group_sotrud'),'users_group');
        • //ГРУППА возможных(потенциальных) пользователей
        • $acl->addRole(new Zend_Acl_Role('pt_users_group'))
        • //подгруппа потенциальные учащиеся=pt_group_std
        • ->addRole(new Zend_Acl_Role('pt_group_std'), 'pt_users_group')
        • //подгруппа потенциальные сотрудники=pt_group_sotrud
        • ->addRole(new Zend_Acl_Role('pt_group_sotrud'), 'pt_users_group');
        • // Добавление пользователей без наследования прав
        • // пользователь ГОСТЬ
        • $acl->addRole(new Zend_Acl_Role('guest'))
        • // АДМИНИСТРАТОР web-портала
        • ->addRole(new Zend_Acl_Role('admin'))
        • // Добавление ПОДГРУПП пользователей с наследованием прав от 3-х категорий
        • //Подгруппы действующих(реальных) пользователей:
        • //Подгруппа группы сотрудники МЕТОДИСТ=metodist
        • ->addRole(new Zend_Acl_Role('metodist'),array('guest','users_group', 'group_sotrud' ))
        • //Подгруппа группы сотрудники преподаватель=prepodavatel
        • ->addRole(new Zend_Acl_Role('prepodavatel'), array('guest','users_group', 'group_sotrud' ))
        • //Подгруппа группы сотрудники администрация(административная должность)=administration
        • ->addRole(new Zend_Acl_Role('administration'), array('guest','users_group', 'group_sotrud' ))
        • //Подгруппа группы учащиеся СТУДЕНТ=student
        • ->addRole(new Zend_Acl_Role('student'),array('guest','users_group', 'group_std' ))
        • //Подгруппа группы учащиеся АСПИРАНТ=aspirant
        • ->addRole(new Zend_Acl_Role('aspirant'), array('guest','users_group', 'group_std' ))
        • //Подгруппа группы учащиеся РОДИТЕЛИ=roditeli :-)
        • ->addRole(new Zend_Acl_Role('roditeli'), array('guest','users_group', 'group_std' ))
        • //Подгруппы возможных(потенциальных) пользователей (аналогично предыдущему блоку)
        • ->addRole(new Zend_Acl_Role('pt_metodist'),array('guest','pt_users_group', 'pt_group_sotrud' ))
        • ->addRole(new Zend_Acl_Role('pt_prepodavatel'), array('guest','pt_users_group', 'pt_group_sotrud' ))
        • ->addRole(new Zend_Acl_Role('pt_administration'), array('guest','pt_users_group', 'pt_group_sotrud' ))
        • ->addRole(new Zend_Acl_Role('pt_student'),array('guest','pt_users_group', 'pt_group_std' ))
        • ->addRole(new Zend_Acl_Role('pt_aspirant'), array('guest','pt_users_group', 'pt_group_std' ))
        • ->addRole(new Zend_Acl_Role('pt_roditeli'), array('guest','pt_users_group', 'pt_group_std' ));
        • // ДОБАВЛЕНИЕ РЕСУРСОВ
        • // defaultModule- МОДУЛЬ ПО УМОЛЧАНИЮ
        • $acl->add(new Zend_Acl_Resource('defaultModule'));
        • // UserController (общие функции)
        • $acl->add(new Zend_Acl_Resource('UserController'), 'defaultModule');
        • $acl->add(new Zend_Acl_Resource('registerAction'), 'UserController');
        • $acl->add(new Zend_Acl_Resource('loginAction') , 'UserController');
        • $acl->add(new Zend_Acl_Resource('logoutAction') , 'UserController');
        • // SiteController (страницы-разделы портала)
        • $acl->add(new Zend_Acl_Resource('SiteController'), 'defaultModule');
        • $acl->add(new Zend_Acl_Resource('news') , 'SiteController');
        • $acl->add(new Zend_Acl_Resource('about') , 'SiteController');
        • $acl->add(new Zend_Acl_Resource('history') , 'SiteController');
        • $acl->add(new Zend_Acl_Resource('structure'), 'SiteController');
        • $acl->add(new Zend_Acl_Resource('documrnts'), 'SiteController');
        • $acl->add(new Zend_Acl_Resource('education'), 'SiteController');
        • // UzoneController (личные кабинеты)
        • $acl->add(new Zend_Acl_Resource('UzoneController'), 'defaultModule');
        • $acl->add(new Zend_Acl_Resource('cabinet'), 'UzoneController');
        • // uchet_uspevModule- МОДУЛЬ УЧЕТА УСПЕВАЕМОСТИ
        • $acl->add(new Zend_Acl_Resource('uchet_uspevModule'));
        • // SpecController (должностные функции)
        • $acl->add(new Zend_Acl_Resource('SpecController'), 'uchet_uspevModule');
        • $acl->add(new Zend_Acl_Resource('redakt_ocenki_metodist') , 'SpecController');
        • $acl->add(new Zend_Acl_Resource('obzor_ocenki_prep') , 'SpecController');
        • $acl->add(new Zend_Acl_Resource('ocenki_stud') , 'SpecController');
        • //РАСПРЕДЕЛЕНИЕ РОЛЕЙ
        • $role='guest';
        • if(isset($_SESSION['SID']) )
        • {
        • //**подключить БД REG (в которой хранится таблица users- возможных(потенциальных) пользователей)
        • $db_REG=mysql_select_db('REG', $link) or die ('Can\'t use REG : ' . mysql_error());
        • if (!$db_REG)
        • {
        • printf("<br><b>Database REG connection error!</b> %s", mysql_error()."<br>");
        • }
        • else
        • {
        • echo "<br><b>Database POTENTIAL_USERS(=REG) online</b><br>";
        • }
        • $q00 = @mysql_query("SELECT * FROM users WHERE nick='".$_SESSION['user']."' AND password='".$_SESSION['password']."'");
        • if(@mysql_num_rows($q00)==1)
        • {$role='pt_users_group';
        • echo'Группа: ', $role, '<br />';}
        • }
        • //УСТАНОВКА ПРАВ ДОСТУПА К РЕСУРСАМ
        • // Разрешаем администратору портала все действия
        • $acl->allow('admin');
        • //Права доступа для гостя
        • // Разрешаем доступ к контроллеру UserController пользователю guest(гость)
        • $acl->allow('guest', 'UserController');
        • // Разрешаем доступ к контроллеру SiteController пользователю guest(гость)
        • $acl->allow('guest', 'SiteController');
        • // Запрещаем доступ к контроллеру UzoneController пользователю guest(гость)
        • $acl->deny('guest', 'UzoneController');
        • // Запрещаем доступ к контроллеру SpecController пользователю guest(гость)
        • $acl->deny('guest', 'SpecController');
        • //Права доступа для подгруппы УЧАЩИЕСЯ
        • // Разрешаем доступ к контроллеру UserController группе group_std(учащиеся)
        • $acl->allow('group_std', 'UserController');
        • // Разрешаем доступ к контроллеру SiteController группе group_std(учащиеся)
        • $acl->allow('group_std', 'SiteController');
        • // Разрешаем доступ к контроллеру UzoneController группе group_std(учащиеся)
        • $acl->allow('group_std', 'UzoneController');
        • // Запрещаем доступ к контроллеру SpecController группе group_std(учащиеся)
        • $acl->deny('group_std', 'SpecController');
        • //Права доступа для подгруппы СОТРУДНИКИ
        • // Разрешаем доступ к модулю 'defaultModule' группе group_sotrud(сотрудники)
        • $acl->allow('group_sotrud', 'defaultModule');
        • // Разрешаем доступ к контроллеру UzoneController группе group_sotrud(сотрудники)
        • $acl->allow('group_sotrud', 'UzoneController');
        • // Разрешаем доступ к ресурсу redakt_ocenki_metodist контроллера SpecController подгруппе metodist
        • $acl->allow('metodist', 'redakt_ocenki_metodist');
        • // Разрешаем доступ к ресурсу obzor_ocenki_prep контроллера SpecController подгруппе prepodavatel
        • $acl->allow('prepodavatel', 'obzor_ocenki_prep');
        • // Разрешаем доступ к ресурсу ocenki_stud контроллера SpecController подгруппе student
        • $acl->allow('student', 'ocenki_stud');
        • //ПРОВЕРКА ПРАВ ДОСТУПА
        • echo 'ACCESS CONTROL LIST:', '<br />';
        • echo 'Access to defaultModule for admin ', $acl->isAllowed('admin', 'defaultModule') ? "allowed" : "denied", '<br />';
        • echo 'Access to UserController for guest ', $acl->isAllowed('guest', 'UserController' ) ? "allowed" : "denied", '<br />';
        • echo 'Access to UzoneController for guest ',$acl->isAllowed('guest', 'UzoneController' ) ? "allowed" : "denied", '<br />';
        • echo 'Access to SpecController for group_std ',$acl->isAllowed('group_std','SpecController') ? "allowed" : "denied", '<br />';
        • echo 'Access to SpecController for group_sotrud ', $acl->isAllowed('group_sotrud','SpecController') ? "allowed" : "denied", '<br />';
        • echo 'Access to redakt_ocenki_metodist for metodist ', $acl->isAllowed('metodist','redakt_ocenki_metodist') ? "allowed" : "denied", '<br />';
        • echo 'Access to obzor_ocenki_prep for prepodavatel ', $acl->isAllowed('prepodavatel','obzor_ocenki_prep') ? "allowed" : "denied", '<br />';
        • echo 'Access to ocenki_stud for student ', $acl->isAllowed('student','ocenki_stud') ? "allowed" : "denied", '<br />';
        • //Вывод ресурсов
        • if ($acl->isAllowed($role, 'redakt_ocenki_metodist')) {
        • // код для вывода ссылки на ресурс
        • echo '<br/><br/><a href="resourses/redakt_ocenki_metodist.php">редактировать оценки</a>';
        • }
        • elseif ($acl->isAllowed($role, 'obzor_ocenki_prep')) {
        • // код для вывода ссылки на ресурс
        • echo '<br/><br/><a href="resourses/obzor_ocenki_prep.php">просмотр успеваемости</a>';
        • }
        • elseif ($acl->isAllowed($role, 'ocenki_stud')) {
        • // код для вывода ссылки на ресурс
        • echo '<br/><br/><a href="resourses/ocenki_stud.php">просмотр оценок</a>';
        • }
        • ?>
        • Листинг скрипта registration.php:
        • <?php
        • // Инициализируем начало сессии
        • session_start();
        • // Подключаем файл конфигурации и файл функций
        • include("config.inc.php");
        • include("functions.inc.php");
        • // Подключаемся к БД
        • $link = mysql_connect($DBSERVER, $DBUSER, $DBPASS)
        • or die("Не могу подключиться" );
        • // Делаем $DB текущей базой данных
        • mysql_select_db($DB, $link) or die ('Не могу выбрать БД');
        • if(!$_POST['do'] OR $_POST['do'] =='') {
        • // Генерируем шестизначный код для capcha(капчи)
        • if($_SESSION['uid'] =='') { $_SESSION['uid'] = mt_rand(100000,999999); }
        • //Вывод ФОРМЫ
        • include ("REGform.html");
        • }
        • //Если данные отправлены
        • if($_POST['do'] !='') {
        • //Начинаем проверять входящие данные
        • if($_POST['sid'] == $_SESSION['uid']) {
        • //Создаем запрос к базе для проверки существования Пользователя
        • $nick= $_POST['nick'];
        • mysql_query("SELECT * FROM users WHERE nick='".strtolower($nick)."'");
        • //Проверка результата запроса
        • if(mysql_affected_rows()==0) {
        • //Проверка введенных паролей
        • if($_POST['pass'] !='' AND $_POST['rpass'] !='' AND $_POST['pass'] === $_POST['rpass']){
        • //Проверяем адрес электронной почты
        • if(checkmail($_POST['mail']) !== -1) {
        • //Осуществляем регистарацию
        • //Генерируем uniq_id
        • $uniq_id = md5($_SERVER['REMOTE_ADDR'].$_SERVER['HTTP_USER_AGENT'].mktime());
        • $pass = $_POST['pass'];
        • $email = $_POST['mail'];
        • //Создаем запрос для записи данных в БД
        • $r = @mysql_query("INSERT INTO users VALUES(NULL,'".strtolower($nick)."','".md5($pass)."','".$email."','".$uniq_id."',0,'".date("dmY")."','".date("dmY")."')");
        • //После запроса отправляем письмо пользователю, для активации аккаунта
        • if($r) {
        • // Для отправки e-mail в виде HTML устанавливаем необходимый mime-тип и кодировку
        • $headers = 'MIME-Version: 1.0' . "\r\n";
        • $headers .= 'Content-type: text/html; charset=windows-1251' . "\r\n";
        • // Откуда пришло
        • $headers .= 'From:Сайт %sitename%' . "\r\n";
        • //Здесь указать e-mail, куда будут уходить сообщения
        • $mailto = $email;
        • $subject = "Подтверждение регистарции на веб-портале СпбГУТ";
        • $message = 'Для активации аккаунта пройдите по следующей ссылке
        • <a href="http://www.systemadostupa1.ru/registration.php?
        • activation='.$uniq_id.'" target="_blank">http://www.systemadostupa1.ru/registration.php?activation='.$uniq_id.'</a>';
        • $message .= 'или скопируйте ссылку в окно ввода адреса браузера и нажмите Enter.';
        • //Отправляем сообщение
        • if(sendmail($mailto,$subject,$message,$headers) !== FALSE) {
        • echo 'Регистрация завершена, на введеный Вами e-mail было отправлено сообщение для активации аккаунта';
        • }
        • else {echo 'Регистрация невозможна: Повторите запрос позднее';}
        • }
        • else {echo 'Регистрация невозможна: Повторите запрос позднее';}
        • }
        • else {echo 'Регистрация невозможна: Электронный адрес должен соответствовать шаблону <b>name@domen.com</b><br/><a href="registration.php"/>назад</a>';}
        • }
        • else {echo 'Регистрация невозможна: Введенные пароли не совпадают<br/><a href="registration.php"/>назад</a>';}
        • }
        • else { echo 'Регистрация невозможна: Пользователь с таким именем уже существует<br/><a href="registration.php"/>назад</a>';}
        • session_destroy();
        • }
        • else { echo 'Регистрация невозможна: код подтверждения введен не верно<br/><a href="registration.php"/>назад</a>';}
        • }
        • //Активация аккаунта
        • if($_GET['activation'] AND $_GET['activation']!='') {
        • $uniq_id = $_GET['activation'];
        • //Создаем запрос
        • $r=@mysql_query("UPDATE users SET status=1 WHERE uniq_id='".$uniq_id."' AND status=0");
        • if($r) {echo '<h2>Ваша учетная запись активирована.</h2><br/> Теперь вы можете <a href="auth.php">войти на сайт</a> используя данные
        • указанные при регистрации';}
        • else {echo 'Активация невозможна: профиль уже активирован';}
        • }
        • ?>
        • Листинг скрипта output_login.php:
        • <?php
        • $q2 = @mysql_query("SELECT * FROM users WHERE nick='".$_SESSION['user']."' AND password='".$_SESSION['password']."' AND status=1");
        • if(@mysql_num_rows($q2)==1){
        • $r2 = @mysql_fetch_array($q2);
        • echo 'Вы: '.ucfirst($r2['nick']).'<br/>';
        • echo '<a href="auth.php">главная</a> ';
        • echo '<br/><a href="auth.php?exit=1">выход</a>';
        • }
        • ?>
        • Листинг скрипта output_users.php:
        • <html>
        • <head>
        • <title>output info table USERS</title>
        • <meta charset=Windows-1251">
        • </head>
        • <body>
        • <?php
        • // Подключаемся к MySQL
        • define("SERVER", "localhost");
        • define("USERNAME", "root");
        • define("PASSWORD", "");
        • $link = mysql_connect (SERVER, USERNAME, PASSWORD);
        • if ( !$link ) die ("Couldn't connect to MySQL");
        • //Сделаем REG текущей базой данных
        • $registr = mysql_select_db('REG', $link);
        • if (!$registr)
        • {
        • printf("<br><b>База данных не доступна</b> %s", mysql_error()."<br>");
        • }
        • else
        • {
        • echo "<br><b>База данных создана успешно</b><br>";
        • }
        • // Выбираем значения из таблицы users
        • $query = "SELECT id,nick,password,email,uniq_id,status, last_date,date FROM users";
        • //Проверяем наличие информации
        • $db1_1 = mysql_query($query);
        • if (!$db1_1)
        • {
        • printf("<br><b>Нет данных</b> %s", mysql_error()."<br><br>");
        • }
        • else
        • {
        • echo "<br><b>Данные найдены</b><br><br>";
        • }
        • //Формируем цикл для последовательного вывода данных
        • $z1 = mysql_num_rows($db1_1);
        • for ($i = 0; $i < $z1; $i = $i + 1)
        • {
        • // Обрабатываем ряд результата запроса и возвращаем ассоциативный массив
        • $r1 = mysql_fetch_assoc($db1_1);
        • //Вывод данных
        • echo "<br>"."<b>Users #".$i."</b><br><br>";
        • echo "id: "."<b>".$r1["id"]."</b>"."<br>";
        • echo "nick: "."<b>".$r1["nick"]."</b>"."<br>";
        • echo "password: "."<b>".$r1["password"].""."</b>"."<br>";
        • echo "email "."<b>".$r1["email"]."</b>"."<br>";
        • echo "uniq_id "."<b>".$r1["uniq_id"]."</b>"."<br>";
        • echo "status "."<b>".$r1["status"]."</b>"."<br>";
        • echo "last_date "."<b>".$r1["last_date"]."</b>"."<br>";
        • echo "date "."<b>".$r1["date"]."</b>"."<br>";
        • }
        • //Завершаем работу с БД
        • if (!mysql_close($link))
        • {
        • echo "<br><br><b> Не удалось завершить соединение с базой данных</b><br>";
        • }
        • else
        • {
        • echo "<br><br><b>Соединение с базой данных завершено успешно</b><br>";
        • }
        • ?>
        • </body>
        • </html>
        • Листинг скрипта capcha.php:
        • <?php
        • //Инициализируем начало сессии
        • session_start();
        • //Создаем изображение из 3-х возможных вариантов фона
        • $im=ImageCreateFromJpeg(round(mt_rand(1,3)).".jpg");
        • //Генерируем цвет надписи
        • $color=ImageColorAllocate($im,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));
        • //Формируем надпись, используя шрифт
        • ImageTtfText($im, 23, mt_rand(-5,5), 3, 30, $color, "addict.ttf", $_SESSION['uid']);
        • //Указываем тип содержимого
        • Header("Content-type: image/jpeg");
        • //Создаем и выводим изображение
        • ImageJpeg($im);
        • //Разрушаем изображение
        • ImageDestroy($im);
        • ?>
        • Листинг формы AUTHform.html
        • <html>
        • <head>
        • <title>Авторизация</title>
        • </head>
        • <body>
        • <a href="registration.php">регистрация</a> <br/><br/>
        • <form name="1" action="" method="post">
        • <input name="login" type="text" value=""> <br/>
        • <input name="password" type="password" value=""> <br/>
        • <input name="do" type="submit" value="Войти">
        • </form>
        • </body>
        • </html>
        • Листинг формы REGform.html
        • <html>
        • <head>
        • <title>Регистрация</title>
        • </head>
        • <body>
        • <form action="" method="POST">
        • Логин: <input name="nick" type="text" value=""><br/>
        • Пароль: <input name="pass" type="password" value=""><br/>
        • Повторите пароль: <input name="rpass" type="password" value=""><br/>
        • Эл.адрес: <input name="mail" type="text" value="name@domen.com"><br/>
        • <img src="img/capcha.php?sid='.$_SESSION['uid'].'"/> <br/>
        • <input name="sid" type="text" value=""><br/><br/>
        • <input name="do" type="submit" value="зарегистрировать">
        • </form>
        • </body>
        • </html>
        • Листинг скрипта default.php:
        • <?php
        • echo 'ШАБЛОН.php';
        • ?>
        • Листинг скрипта R_auth.php:
        • <?php
        • // Инициализируем начало сессии
        • session_start();
        • //Поключаем файл конфигурации
        • include("R_config.inc.php");
        • //Подключаемся к БД
        • $link = mysql_connect($DBSERVER, $DBUSER, $DBPASS)
        • or die("Не могу подключиться" );
        • // сделать $DB текущей базой данных
        • mysql_select_db($DB, $link) or die ('Не могу выбрать БД');
        • //Если нет сессий
        • if(md5(crypt($_SESSION['user'],$_SESSION['password'])) != $_SESSION['SID'])
        • {
        • //Если кнопка не нажата, отображаем форму
        • if(!$_POST['do']){
        • //Вывод ФОРМЫ авторизации
        • include("R_AUTHform.html");
        • }
        • //Если кнопка нажата
        • if($_POST['do']) {
        • //Проверяем данные
        • $login = $_POST['login'];
        • $upass = $_POST['password'];
        • if($login !='' AND $upass !='') {
        • //Создаем запрос
        • $q1=mysql_query("SELECT * FROM students WHERE students_nick='".$login."' AND students_password='".$upass."' ");// добавить AND status=1 если будет проверка документов
        • $q2=mysql_query("SELECT * FROM teachers WHERE teachers_nick='".$login."' AND teachers_password='".$upass."' ");// добавить AND status=1 если будет проверка документов
        • $q3=mysql_query("SELECT * FROM metodist WHERE metodist_nick='".$login."' AND metodist_password='".$upass."' ");// добавить AND status=1 если будет проверка документов
        • //Проверяем существует ли хоть одна запись
        • if(mysql_num_rows($q1)===1 OR mysql_num_rows($q2)===1 OR mysql_num_rows($q3)===1) {
        • if (mysql_num_rows($q1)===1) {$zzz1=TRUE; echo 'НАЙДЕНА запись в табл студент','<br />';}
        • elseif (mysql_num_rows($q2)===1) {$zzz2=TRUE; echo 'НАЙДЕНА запись в табл преподаватель','<br />';}
        • elseif (mysql_num_rows($q3)===1) {$zzz3=TRUE; echo 'НАЙДЕНА запись в табл методист','<br />';}
        • //Если есть, то создаем сессии, запускаем скрипт прав доступа и перенаправляем на страницу
        • if ($zzz1)
        • {$r=mysql_fetch_array($q1);
        • $_SESSION['user'] = $r['students_nick'];
        • $_SESSION['password'] = $r['students_password'];
        • $_SESSION['SID'] = md5(crypt($r['students_nick'],$r['students_password']));
        • echo 'создана сессия для студента';
        • }
        • elseif ($zzz2)
        • {$r=mysql_fetch_array($q2);
        • $_SESSION['user'] = $r['teachers_nick'];
        • $_SESSION['password'] = $r['teachers_password'];
        • $_SESSION['SID'] = md5(crypt($r['teachers_nick'],$r['teachers_password']));
        • echo 'создана сессия для преп';
        • }
        • elseif ($zzz3)
        • {$r=mysql_fetch_array($q3);
        • $_SESSION['user'] = $r['metodist_nick'];
        • $_SESSION['password'] = $r['metodist_password'];
        • $_SESSION['SID'] = md5(crypt($r['metodist_nick'],$r['metodist_password']));
        • echo 'создана сессия для методиста';
        • }
        • //срипт РАСПРЕДЕЛЕНИЯ ПРАВ ДОСТУПА
        • include("R_gut_acl.php");
        • //скрипт для вывода логина авторизованного пользователя+ кнопки управления
        • include("R_output_login.php");
        • // указать страницу личного кабинета
        • @Header("Location: R_auth.php");
        • }
        • else {echo 'Неверный логин/пароль; Повторите попытку авторизации';}
        • }
        • else {echo 'Введите данные';}
        • }
        • }
        • else {
        • //блок для вывода шаблонов страниц портала
        • //if($_GET['page'] !='') {
        • // @include("tpl/".$_GET['page'].".php");
        • // }
        • //else { @include("tpl/default.php");}
        • //скрипт для вывода логина авторизованного пользователя+ кнопки управления
        • include("R_output_login.php");
        • }
        • if($_GET['exit']) {@session_destroy(); unset($_GET['exit']); mysql_close($link); @Header("Location: R_auth.php");}
        • ?>
        • Листинг скрипта R_output_login.php:
        • <?php
        • // Блок для вывода логина авторизованного пользователя( ВЫ: логин)
        • $qx1=mysql_query("SELECT * FROM students WHERE students_nick='".$login."' AND students_password='".$upass."' ");// добавить AND status=1 если будет проверка документов
        • $qx2=mysql_query("SELECT * FROM teachers WHERE teachers_nick='".$login."' AND teachers_password='".$upass."' ");// добавить AND status=1 если будет проверка документов
        • $qx3=mysql_query("SELECT * FROM metodist WHERE metodist_nick='".$login."' AND metodist_password='".$upass."' ");// добавить AND status=1 если будет проверка документов
        • if(mysql_num_rows($qx1)===1 OR mysql_num_rows($qx2)===1 OR mysql_num_rows($qx3)===1)
        • {
        • if (mysql_num_rows($qx1)===1) $zzzx1=TRUE;
        • elseif (mysql_num_rows($qx2)===1) $zzzx2=TRUE;
        • elseif (mysql_num_rows($qx3)===1) $zzzx3=TRUE;
        • if ($zzz1) {$r2=mysql_fetch_array($qx1); $nick='students_nick';}
        • elseif ($zzz2) {$r2=mysql_fetch_array($qx2); $nick='teachers_nick';}
        • elseif ($zzz3) {$r2=mysql_fetch_array($qx3); $nick='metodist_nick';}
        • echo 'Вы: '.ucfirst($r2[$nick]).'<br/>';
        • echo '<a href="R_auth.php">Главная</a>','<br/>';
        • echo '<br/><a href="R_auth.php?exit=1">Выход</a>';
        • }
        • Листинг скрипта R_gut_acl.php:
        • <?php
        • // Путь к файлам с классами Zend'а
        • set_include_path('library');
        • // Подключаем необходимые классы
        • require_once 'Zend/Acl.php';
        • require_once 'Zend/Acl/Role.php';
        • require_once 'Zend/Acl/Resource.php';
        • // Создание списка контроля доступа ACL (объект Zend_Acl)
        • $acl = new Zend_Acl();
        • // ДОБАВЛЕНИЕ ПОЛЬЗОВАТЕЛЕЙ(РОЛЕЙ)
        • // Выполним добавление ГРУПП пользователей
        • //ГРУППА действующих(реальных) пользователей
        • $acl->addRole(new Zend_Acl_Role('users_group'))
        • //Подгруппа учащиеся=group_std
        • ->addRole(new Zend_Acl_Role('group_std'), 'users_group')
        • //Подгруппа сотрудники=group_sotrud
        • ->addRole(new Zend_Acl_Role('group_sotrud'),'users_group');

Подобные документы

  • Понятие портала как Intranet системы. Технологии функционирования Web-портала. Особенности и функции портала учебного заведения. Использование Web-портала в учебном процессе. Структура образовательного Intranet/Internet-портала школы № 24 г.Нефтеюганска.

    дипломная работа [3,0 M], добавлен 02.05.2012

  • Разработка средств администрирования и безопасности, импорт информационного наполнения с Web-страницы. Отображение статических файлов HTML и вывод форматированных данных. Идентификация опасных и вредных факторов, сопутствующих созданию интернет-портала.

    дипломная работа [2,2 M], добавлен 02.06.2012

  • Создание базы данных, построение на ее основе информационной системы в виде веб-сайта. Обоснование и выбор системы управления базой данных. Датологическое проектирование, разработка алгоритма решения задачи, создание форм. Результаты обработки данных.

    отчет по практике [904,1 K], добавлен 13.04.2015

  • Построение модели корпоративного портала как платформы для разработки учебно-методической документации вуза. Состав, особенности использования учебно-методической документации вуза. Концептуальная модель корпоративного портала образовательного учреждения.

    дипломная работа [3,0 M], добавлен 18.03.2012

  • Проектирование портала записи на приём к специалистам узких специальностей. Составление методического руководства по использованию портала. Обзор требований к программному и аппаратному обеспечению. Электронная регистратура. Описание программных модулей.

    дипломная работа [1,9 M], добавлен 09.01.2015

  • Перечень защищаемых ресурсов на объекте информатизации. Выбор механизмов и средств защиты информации. Набор требований по безопасности. Описание реализации информационных сервисов. Разграничение доступа автоматизированной системы предприятия к ресурсам.

    реферат [24,7 K], добавлен 24.01.2014

  • Цель создания информационной системы. Описание программного обеспечения. Ввод и редактирование информации о поставщиках и поставках товара. Создание базы данных "Магазин по продаже одежды". Разработка механизмов доступа ко всем построенным объектам.

    курсовая работа [1,1 M], добавлен 16.11.2012

  • Анализ видов существующих корпоративных порталов. Разработка архитектуры и структуры корпоративного портала в соответствии с требованиями. Установка и настройка программного обеспечения. Общие настройки портала, управление меню и настройка виджетов.

    дипломная работа [4,8 M], добавлен 19.01.2017

  • Структура и история развития технологии AJAX. Устройство метода AJAX. Инструментарий разработки веб-приложений. Разработка и создание информационного портала по языкам программирования с использованием технологии AJAX. Информационное содержание портала.

    дипломная работа [3,2 M], добавлен 05.06.2011

  • Построение модели информационно-педагогической среды (ИПС) образовательного учреждения. Создание базы данных, обеспечение многопользовательского режима с разграничением прав доступа к информации. Автоматизация кадровой работы и формирование отчетов.

    курсовая работа [5,1 M], добавлен 01.06.2013

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.