WEB-система контроля знаний учащихся по курсу “Программно-аппаратные средства обеспечения информационной безопасности”

advertisement
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ
ФЕДЕРАЦИИ
РЕКЛАМНО-ТЕХНИЧЕСКОЕ ОПИСАНИЕ
WEB-система контроля знаний учащихся по курсу
“Программно-аппаратные средства обеспечения
информационной безопасности”
.03524577.02313-01 99 01
Листов 18
Разработчики:
______________________/Ананченко И.В./
______________________/ Дубровский А.А./
20.01.2008 <пусто>
Санк-Петербург 2008
2
.03524577.02313-01 99 01
WEB-система контроля знаний учащихся по курсу “Программноаппаратные средства обеспечения информационной безопасности”
1. Функциональное назначение разработки, область применения и
ее ограничения
Система разработана для контроля знаний для студентов групп
изучающих основы информационной безопасности на кафедре морских
информационных технологий (МИТ) Российского государственного
гидрометеорологического
университета
(РГГУ).
Дисциплина
“Программно-аппаратные
средства
обеспечения
информационной
безопасности”.
Кроме скрипов на PHP, обеспечивающих техническую процедуру
тестирования, был разработан тест по курсу «Программно - аппаратные
средства обеспечения информационной безопасности» для специальности
090106 «Информационная безопасность телекоммуникационных систем».
Тест включает в себя более 100 вопросов. Система вопросов охватывает
наиболее важные разделы преподаваемого курса:
- средства и методы защиты информации в Интернет и интранет
сетях;
- принципы построения подсистем защиты в ОС, ВС и СУБД
различной архитектуры (понятие безопасности, критерии защищенности,
модели безопасности, механизмы обеспечения целостности, механизмы
обеспечения конфиденциальности);
- несанкционированный доступ (НСД) к ресурсам (программно аппаратные методы и средства ограничения к ресурсам и компонентам
ПЭВМ, защита программ);
- принципы функционирования современных систем идентификации и
аутентификации;
- реализация атак на сетевые ресурсы, использование межсетевых
экранов;
- построения систем адаптивной безопасности в вычислительных
сетях;
- построение виртуальных частных сетей.
Пользователю предоставляется возможность выбора одного варианта
ответа, затем происходит переход к следующему вопросу. При запросе
теста пользователем вопросы перемешиваются, то есть определяется
случайный выбор их выдачи. Варианты ответа также перемешиваются
случайным образом. Если пользователь не выбрал ни один из
предложенных вариантов ответа и перешел к следующему вопросу, то ему
засчитывается неверный результат.
Описание работы комплекса тестирования. Стартовой является
страница с кратким описанием комплекса тестирования, с которой можно
3
.03524577.02313-01 99 01
перейти в следующие разделы системы: вход существующего
пользователя, регистрация нового пользователя, просмотр статистики.
Рисунок 1. Стартовая страница комплекса тестирования.
При регистрации нового пользователя необходимо заполнить
следующие поля: логин, пароль, e-mail (используется для отправки
результатов и восстановления забытого пароля), фамилия, имя, отчество и
номер группы.
Рисунок 2. Регистрация нового пользователя.
Далее необходимо пройти процедуру авторизации (входа в систему).
4
.03524577.02313-01 99 01
Рисунок 3. Авторизация.
При желании тестируемый может изменить свои личные данные в
разделе «профиль Пользователя».
Рисунок 4 - Профиль пользователя.
После успешной авторизации пользователю становится доступно
меню тестов, предлагаемых для прохождения.
Рисунок 5 - Доступные тесты.
После выбора соответствующего
тестирования.
теста
начинается
сеанс
5
.03524577.02313-01 99 01
Рисунок 6 - Сеанс тестирования
После завершения тестирования (или про досрочном выходе из него)
выдаётся информация с результатами.
Рисунок 7 - Результаты тестирования
Доступна для просмотра общая статистика по всем группам, которая
включает в себя дату прохождения теста, количество попыток и
наилучший результат.
Рисунок 8 - Итоговая таблица с результатами тестирования.
Для управления БД используется программа phpMyAdmin. С её
помощью в БД заносится информация о тестах, контрольные вопросы и
ответы.
Вся информация (тесты, разделы тестов, результаты и т.д.) хранится
в базе данных. Благодаря этому факту она надежно защищена от
несанкционированного доступа. Если у пользователя нет соответствующих
прав, то он не сможет просмотреть, редактировать, удалить свои или
чужие результаты тестирования.
6
.03524577.02313-01 99 01
Рисунок 9 - Управление БД.
2. Используемые технические средства
Список ПО, необходимого для работы комплекса тестирования. В
скобках приведены названия программ, непосредственно участвующих в
разработке системы тестирования.
- WEB сервер. В качестве WEB сервера можно использовать как
Apache, так и MS Internet Information Server. Разработка велась с
использованием бесплатного сервера (Apache 2.0.54);
- PHP модуль для HTTP-сервера (PHP 5.1.6);
- Сервер БД (MySQL 4.1.16).
В комплекс включен тест по курсу «Программно-аппаратные средства
обеспечения информационной безопасности»
Для управления базами данных используется программа
phpMyAdmin 2.11.0.
Настройка системы. В файле config.cfg следует прописать
переменные окружения:
- $sys_email = admin@email.ru - адрес электронной почты webсервера. С этого адреса будут отсылаться пароли пользователям. Для
корректной рабо-ты почты необходимо настроить PHP модуль. В
частности в файле php.ini необходимо установить переменную SMTP в
соответствии с вашим почто-вым сервером. Подробнее об этом написано в
документации к PHP.
- $mysql_server = "localhost" - адрес MySQL сервера.
- $mysql_db = "dbtest" - рабочая БД на сервере.
Далее следует подготовить БД к использованию. Необходимо
создать следующие рабочие таблицы:
- Auth – таблица пользователей. Содержит поля: идентификатор (uid),
логин (login), пароль (password), имя (name), фамилия (lastname), отчество
(lastname2), почта (email), группа (gr). Заполняется автоматически при
реги-страции новых пользователей.
7
.03524577.02313-01 99 01
Для её создания используется запрос:
CREATE TABLE auth (
uid int(11) NOT NULL auto_increment,
login varchar(16) NOT NULL default '',
password varchar(16) NOT NULL default '',
name varchar(32) NOT NULL default '',
lastname varchar(32) NOT NULL default '',
lastname2 varchar(32) NOT NULL default '',
email varchar(255) NOT NULL default '',
gr varchar(16) NOT NULL default '',
PRIMARY KEY (uid)
) TYPE=MyISAM COMMENT='users';
- Tests – таблица информации о тестах. Содержит поля: название таблицы вопросов (qbase), название таблицы ответов (abase), название
таблицы результатов (ubase), название теста на русском языке (name),
короткое назва-ние теста (tab), количество вопросов в одном тесте (qintest),
общее число во-просов (qtotal). Эту таблицу следует заполнять вручную
при добавлении но-вых тестов или при удалении старых.
Для её создания используется запрос:
CREATE TABLE tests (
qbase varchar(32) NOT NULL default '',
abase varchar(32) NOT NULL default '',
ubase varchar(32) NOT NULL default '',
name varchar(128) NOT NULL default '',
tab varchar(128) NOT NULL default '',
qintest int(3) NOT NULL default '20',
qtotal int(5) NOT NULL default '0'
) TYPE=MyISAM COMMENT='Доступные тесты';
- Tаблицы тестов (по 3 на тест) – таблица с вопросами, таблица с ответами и таблица с результатами. Их названия должны соответствовать
назва-ниям, записанным в таблицу tests.
Таблица с вопросами содержит поля: номер вопроса (no), текст
вопроса (q), количество вариантов ответа (vars), путь к картинке (pic) .
Если картинки нет, то поле pic принимает нулевое значение. Эта таблица
заполняется вруч-ную.
Для создания таблицы с вопросами используется запрос:
CREATE TABLE basics_q (
no int(4) default NULL,
q text,
vars int(2) default '3',
pic varchar(255) default NULL
) TYPE=MyISAM;
Таблица с ответами содержит следующие поля: номер вопроса (no),
текст ответа (a), порядок ответа внутри одного вопроса (ord), правильность
ответа (ans). Таблица заполняется вручную.
8
.03524577.02313-01 99 01
Для создания таблицы с ответами используется запрос:
CREATE TABLE basics_a (
no int(4) default NULL,
a text,
ord int(2) default NULL,
ans int(16) default NULL
) TYPE=MyISAM;
Таблица результатов содержит результаты прохождения теста пользователями. Заполняется автоматически. Содержит поля: идентификатор
поль-зователя (uid), количество попыток сдачи теста (quantity), лучший
результат (result), дата последней сдачи (udate).
Для создания таблицы с результатами используется запрос:
CREATE TABLE basics_u (
uid int(4) default NULL,
quantity int(4) default NULL,
result int(4) default NULL,
udate date default NULL
) TYPE=MyISAM;
Для редактирования БД MySQL автор настоятельно рекомендует
вос-пользоваться программой phpMyAdmin, скачать последнюю версию
можно по адресу http://www.phpmyadmin.net .
Главной странице (index.php) передаётся параметр action, который
оп-ределяет, что надо отображать в информативной части страницы.
Значения переменной action:
0 – стартовая страница
1 - регистрация
2 - вход
3 - профиль
4 - выбор теста
5 – не используется
6 - результат регистрации
7 – таблица результатов.
При регистрации нового пользователя, ему выдаётся уникальный
иден-тификатор (uid), который в дальнейшем идентифицирует
пользователя в сис-теме статистики и тестирования.
При успешном прохождении авторизации переменная $auth
принимает значение 1. Специальный скрипт auth.php следит за значением
этой переменной, регулируя тем самым доступ к личным страницам.
Так как большая часть системы тестирования состоит из динамически
генерируемых документов, то целесообразно браузеру клиента посылать
заголовки, запрещающие кэширование страниц. В противном случае
компьютер клиента может "замусориться" ненужной информацией.
При прохождении теста пользователь из БД получает по одному
вопросы с вариантами ответов. Отметив ответы, пользователь отсылает
данные на сервер, где ещё раз идёт обращение к БД для проверки
9
.03524577.02313-01 99 01
правильности результата. После прохождения теста, результат
пользователя записывается в специальные таблицы.
Передача переменных основана на механизме сессий, позволяющем
хранить некоторые индивидуальные для каждого пользователя данные
между запусками сценария. Это позволяет однозначно идентифицировать
браузер и создающий для этого браузера файл на сервере, в котором
хранятся переменные сеанса.
Доступна система статистики, позволяющая получать подробную
информацию о конкретной группе или о конкретном тесте.
Описание структуры файлов. Ниже приводится список файлов и их
краткое описание.
Заголовочные файлы:
default.php – инициализация глобальных переменных
auth.php – регулирование доступа
checkuser.php – проверка наличия пользователя в БД
dbconnect.php – соединение с сервером БД
nocache.php – запрет кэширования страниц Системы Тестирования.
html_header.php – HTML заголовок
html_footer.php – Закрытие тэгов HTML
Основные файлы:
config.cfg – конфигурационный файл
index.php – главная страница системы
Авторизация:
unauthorized.php – сообщение о неавторизованном доступе
login_form.php – форма для ввода логина
login_form1.php – форма ввода логина (самостоятельный вариант)
login.php – авторизация пользователя
logoff.php – выход из системы
Регистрация:
reg_err.php – форма с ошибками при регистрации
reg_table.php – форма регистрации
new_user.php – регистрация нового пользователя
Тестирование:
test_selection.php – выбор теста
test_main.php – модуль прохождения теста
Профиль:
chuser.php – изменение профиля пользователя
deluser.php – удаление пользователя
get_prof.php – форма с профилем пользователя
spass.php – отправка пароля на почту пользователя
email_form.php – форма для отправки пароля
Статистика:
res_form.php – форма запроса статистики
get_res.php – запрос отображения статистики
Дополнительные файлы:
10
.03524577.02313-01 99 01
maininfo.php – текст, который показывается пользователям при
первом визи-те.
get_user_info.php – информация об IP адресе пользователя.
style.css – каскадная таблица стилей
Пример исходного кода нескольких разработанныз скриптов.
1. Изменение личных данных (файл othuser.php)
--------------------------------------<?
include ('def.php');
include ('dbcon.php');
$html_title = "Изменение профиля";
include ("html_header.php");
$result = mysql_query ("UPDATE auth SET name='$name',
ltname='$ltname', ltnam='$ltnam', group='$group', email='$email' WHERE
uid='$uid'");
if ($result)
{
echo 'Изменения успешно произведены!';
}
else
{
echo 'Произошла ошибка! Невозможно изменить личные
данные!';
}
echo "<p><a href='index.php?action=3'>вернуться</a></p>";
include ("html_foot.php");
?>
--------------------------------------2. Авторизация пользователя (файл chuser.php)
-----------------------------------<?
function CheckUser($login, $pass)
{
$table="auth";
$result = mysql_query ("SELECT * FROM auth WHERE login =
'$login'");
$row = mysql_fetch_array($result);
if (!isset ($row[1]))
{
//echo "Неправильный логин!";
return -1;
}
else if (strcmp ($row[2], $pass) != 0)
11
.03524577.02313-01 99 01
{
//echo "неправильный пароль!";
return -2;
}
else
{
$auth = 1;
$uid= $row[0];
//echo "Добро пожаловать, $row[3] $row[5]!";
return $uid;
}
mysql_free_result ($result);
}
?>
----------------------------------3. Соединение с БД (файл dbcon.php)
------------------------------------<?
include ("config.cfg");
$lRes = mysql_connect($mysql_server);
if ($lRes != true)
{
echo "Ошибка MySQL Server. Попробуйте повторить попытку
позже.";
exit;
}
$lRes = mysql_select_db($mysql_db);
if ($lRes != true)
{
echo "Невозможно открыть БД. Попробуйте повторить попытку
позже.";
exit;
}
?>
---------------------------------------4. Удаление пользователя (файл deluser.php)
------------------------------------<?
include ('def.php');
include ('dbcon.php');
$html_title = "Удаление пользователя";
include ("html_header.php");
$result = mysql_query ("SELECT pass,login FROM auth WHERE uid =
'$uid'");
$row = mysql_fetch_array($result);
12
.03524577.02313-01 99 01
if (strcmp ($row[0], $pass) != 0)
{
echo "<p>Пароль ошибочный! Необходим правильный
пароль!</p>";
echo "<p><a href='index.php?action=3'>вернуться</a></p>";
}
else
{
echo "<p>Идёт удаление пользователя...</p>";
$result = mysql_query ("SELECT usbase, name FROM tests");
$usbases = mysql_fetch_row ($result);
while ($usbases)
{
echo "Информация о тестах<b>".$usbases[1]."</b> - ";
$res2 = mysql_query ("DELETE FROM $usbases[0]
WHERE uid='$uid'");
if ($res2)
{
echo 'стёрта<br>';
}
else
{
echo '<b>ошибка!</b><br>';
}
$usbases = mysql_fetch_row ($result);
}
echo 'Общая информация о пользователе - ';
$res2 = mysql_query ("DELETE FROM auth WHERE
uid='$uid'");
if ($res2)
echo 'стёрта<br>';
else
echo 'ошибка!<br>';
$auth=0;
$action=0;
echo "<p>Пользователь
<b>".$row[1]."</b>
БД</p>";
echo "<p><a href='index.php'>вернуться</a></p>";
}
include ("html_foot.php");
?>
----------------------------------------
удалён
из
13
.03524577.02313-01 99 01
5. Страница приветствия с информацией о количестве пользователей
и тестов (файл contents.php)
---------------------------------------<p>Добро
пожаловать
в
центр
онлайн
тестирования
<b>РГГМУ</b></p>
<p><p>Для
прохождения
тестов
вам
необходимо
<a
href="index.php?action=1">зарегистрироваться</a>.</p>
<p>Если вы являетесь зарегистрированным пользователем, то
пройдите <a href="login_form1.php">авторизацию</a>.</p>
<p>
<?
include ("dbcon.php");
$result = mysql_query ("SELECT * FROM tests");
$iTotalTests = mysql_num_rows($result);
echo "Всего тестов в системе: ".$iTotalTests."<br>";
$result = mysql_query ("SELECT * FROM auth");
$iTotalUsers = mysql_num_rows($result);
echo "Пользователей: ".$iTotalUsers."<br>";
?>
</p>
---------------------------------------6. Авторизация пользователя (файл login.php)
---------------------------------------<?
include ("def.php");
include ("dbcon.php");
include ("ChUser.php");
if (!isset($login))
{
if ($auth != 1)
$uid = CheckUser ($login, $pass);
}
else
{
$uid = CheckUser ($login, $pass);
}
if ($uid > -1)
$auth = 1;
$action=2;
include ("index.php");
?>
---------------------------------------7. Выбор теста (файл select.php)
---------------------------------------<h1>Выберите тест для сдачи:</h1>
14
.03524577.02313-01 99 01
<?php
include ("dbcon.php");
$tab= NULL;
$iCurrNum = NULL;
$iTotalNum = NULL;
$iVerno = NULL;
$iQRow = NULL;
$result = mysql_query ("SELECT tab, name, usbase FROM tests");
if ($result)
{
$myrow = mysql_fetch_array($result);
echo "<table align='center' width=95% border=1>";
while ($myrow)
{
echo "<tr><td>\n";
echo "$myrow[1]";
echo "</td><td>";
echo "<a href=test.php?base=".$myrow[0].">Приступить к
выполнению</a><br>";
echo "</td><td>";
$result2 = mysql_query("SELECT result, quantity, udate
FROM $myrow[2] WHERE uid='$uid'");
if (($result2)&&($k>0))
{
$row = mysql_fetch_array($result2);
echo
"Лучший
результат:
$row[0]
%
<br>Попыток: $row[1]<br>Дата последней сдачи: $row[2]<br>";
}
else
{
echo "<br>Не пройден<br><br>";
}
$myrow = mysql_fetch_array($result);
echo "</td><tr>\n";
}
echo "</table>";
}
else
{
echo "<br>....";
}
?>
----------------------------------------
15
.03524577.02313-01 99 01
8. - Создание нового пользователя
--------------------------------------<!-- Добавление нового пользователя !-->
<?
include ("dbcon.php");
include ("ChUser.php");
$html_title = "Регистрация нового пользователя";
include ("html_header.php");
echo "<table width='450' border = 0> <tr><td><center>";
if (strcmp($pass , $pass2)!= 0)
{
$reason='bad_pass';
include ("reg_err.php");
exit;
}
if ((ereg("[^0-9A-Za-z]",$login))||
(ereg("[^0-9A-Za-z@_.-]",$email))||
(ereg("[^0-9A-Za-zА-Яа-я-]",$name))||
(ereg("[^0-9A-Za-zА-Яа-я-]",$ltname))||
(ereg("[^0-9A-Za-zА-Яа-я-]",$group))||
(ereg("[^0-9A-Za-zА-Яа-я-]",$ltnam)))
{
$reason = 'bad_symb';
include ("reg_err.php");
exit;
}
if (strlen($login) < 2)
{
$reason = 'no_login';
include ("reg_err.php");
exit;
}
else
{
$result = mysql_query ("SELECT * FROM auth WHERE login
= '$login'");
$k = mysql_num_rows($result);
if ($k > 0) {
$reason = 'bad_login';
include ("reg_err.php");
exit;
}
else
{
16
.03524577.02313-01 99 01
$result
=
mysql_query
("INSERT
INTO
auth
(login,pass,name,latname,ltname,email,group)
VALUES
('$login','$pass','$name','$latname','$ltname','$email','$group')");
if ($result)
{
echo "<h1>Регистрация успешно завершена.</h1>";
echo "$title $name $latname <br>";
echo "$name $ltname $latname <br>";
echo "Вы ввели: <br>";
echo "login: $login <br>";
echo "e-mail: $email <br>";
echo "группа: $group <br>";
echo "</center></tr></td></table>";
if (strlen ($email) > 3)
{
$message = "Здравствуйте, $name $ltname!\n\n
Вы зарегистрировались в системе\n
Ваш логин:\n$login\nВаш пароль:\n$pass\n";
$headers = "MIME-Version: 1.0\n";
$headers
.=
"Content-type:
text/plain;
charset=windows-1251\n";
$headers .= "X-Priority: 3\n";
$headers .= "X-MSMail-Priority: Normal\n";
$headers .= "X-Mailer: php\n";
$headers
.=
"From:
\"Система
тестирования\"<".$system_email.">\n";
if (mail ($email, "Регистрация в системе", $message,
$headers))
{
echo "<p>Вам отправлено письмо с логином
и паролем</p>";
}
else
{
echo "<p>Ваш пароль не был отослан из-за
проблем на сервере.
<br>Или вы ввели неправильный адрес.";
}
}
else
{
echo "<p>Вы не указали свой адрес электронной
почты.";
}
echo "<p>";
17
.03524577.02313-01 99 01
echo '<form action ="login.php" method ="post">';
echo '<input type = "hidden" name = "login" class=inputlo
value ='.$login.'>';
echo '<input type = "hidden" name = "pass" class=inputlo
value ='.$pass.'>';
echo '<input type = "submit" class=inputlo value ="
OK
">';
echo '</form>';
}
else
{
echo "<h1>Ошибка сервера. Попробуйте попозже.</h1>";
}
}
}
echo "</tr></td></table>";
echo "<br>";
echo "<hr>";
echo "<a href ='index.php'>вернуться на главную</a>";
include ("html_foot.php");
?>
3. Специальные условия применения и требования
организационного, технического и технологического характера
При отсутствии у организации собственного выделенного webсервера, можно использовать обычный хостинг, который предоставляет
услуги по использованию БД MySQL и PHP. Документацию по
использованию и установке этих продуктов можно найти на
специализированных сайтах и на русскоязычных сайтах, посвященных
этим продуктам. Место, необходимое для размещения скритов, не менее
60 кб. дискового пространства на сервере. Рекомендуемые версии ПО: php
5.2.4 и mysql 5.0.45
4. Условия передачи разработки и/или ее продажи
Система разработана для контроля знаний для студентов групп
изучающих основы информационной безопасности на кафедре морских
информационных технологий (МИТ) Российского государственного
гидрометеорологического
университета
(РГГУ).
Дисциплина
“Программно-аппаратные
средства
обеспечения
информационной
безопасности”.
Программное обеспечение имеет ”WEB-система контроля
знаний учащихся по курсу “Программно-аппаратные средства
обеспечения информационной безопасности” Copyright и свободно
18
.03524577.02313-01 99 01
распространяется под лицензией GNU GPL (GNU General Public License),
разработанной фондом Free Software Foundation. Суть этой лицензии
состоит в том, что исходные тексты программ доступны для пользователя.
Если некто использует фрагменты этих текстов в собственных
разработках, то эти разработки должны распространяться также под
лицензией GNU GPL. Согласно лицензии программы распространяются
без каких-либо гарантий. Разрешается распространять продукт как
бесплатно, так и за деньги, которыми оплачиваются услуги по
копированию, установке, консультации, сопровождению и т.п.
Разрешается продавать собственно продукт, защищенный этой лицензией,
а не только услуги по его распространению, но при условии непременного
ознакомления покупателя с лицензией GNU GPL и предоставления ему
всех прав свободного приобретения продукта с исходными текстами.
Лицензия GNU GPL это объемный тщательно разработанный документ.
Точные исчерпывающие сведения об этой лицензии дает ее собственный
текст,
подробности
можно
посмотреть
здесь
http://ru.wikipedia.org/wiki/GPL (GNU General Public License).
Разработчики:
 Игорь Викторович Ананченко - к.т.н., доцент, доцент кафедры
информационных
систем
Санкт-Петербургского
Технологического института,
доцент кафедры морских
информационных
технологий
(МИТ)
Российского
государственного гидрометеорологического университета (Email aiv@aiv.spb.ru);
 Алексей Александрович Дубровский
- дипломник,
завершающий обучение в 2008 г. на
кафедре морских
информационных
технологий
(МИТ)
Российского
государственного гидрометеорологического университета (Email dubrovsky@rshu.ru).
Download