Автоматизация процесса тестирования, защита от изменения, подмены и перехвата при передаче данных и от беспрепятственного физического ко

Автор работы: Пользователь скрыл имя, 04 Сентября 2013 в 05:38, дипломная работа

Описание работы

Все эти проблемы позволяет решить разработанная мною система тестирования. Основное преимущество трёхзвенной структуры заключается в превосходной степени защиты (к базе данных нет прямого доступа из интернета, многоуровневая защита с различными алгоритмами шифрования).
Для проектирования и разработки базы данных использовались источники [1, 5, 6], для создания приложения тестирования [2, 3], а для обеспечения защиты данных [4, 7].

Содержание работы

Введение 5
1 Теоретические основы 6
1.1 Постановка задачи6
1.2 Проектирование баз данных10
1.3 Среда Firebird как средство разработки СУБД14
1.4 Разработка интерфейса пользователя18
1.5 Выбор средств защиты информации22
2 Разработка и апробация проекта 26
Заключение 39
Список использованных источников 40
Приложение А (обязательное) Код программы 41

Файлы: 1 файл

Диплом 2.docx

— 1.01 Мб (Скачать файл)

Статус:

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

«готово к старту» - приложение-сервер ждет сообщения от приложения-клиента  сообщения о начале экзамена.

«Экзамен (НЕ) сдан» - отображается результат  экзамена.

Если иконка рабочей станции  активна, то экзаменатор щелкая на строке клиента и нажимая на кнопку «назначить экзамен на выбранном компьютере», вызывает форму назначения экзамена.

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

Рисунок 5 -Форма приложения – «клиент».

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

Рисунок 6 - Форма приложения – «сервер».

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

Рисунок 7 - Форма приложения – «клиент».

Экзаменуемый имеет возможность  просмотреть неправильные ответы.

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

Рисунок 8 – Экзаменационный отчетный лист.

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

Если рассмотреть схему подробнее:

  • Определение свойства Port - чтобы к серверу могли нормально подключаться клиенты, нужно, чтобы порт, используемый сервером точно совпадал с портом, используемым клиентом (и наоборот);
  • Открытие сокета - открытие сокета и указанного порта. Здесь выполняется автоматическое начало ожидания подсоединения клиентов (Listen);
  • Подключение клиента и обмен данными с ним - здесь подключается клиент и идет обмен данными с ним.
  • Отключение клиента - Здесь клиент отключается и закрывается его сокетное соединение с сервером;
  • Закрытие сервера и сокета - По команде администратора сервер завершает свою работу, закрывая все открытые сокетные каналы и прекращая ожидание подключений клиентов.

Port - номер порта для установления соединений с клиентами. Порт у сервера и у клиентов должны быть одинаковыми. Рекомендуются значения от 1025 до 65535, т.к. от 1 до 1024 - могут быть заняты системой.

Установим TrueCrypt. Создадим зашифрованный том, на котором и будет храниться наша БД в соответствии с рисунками 9 и 10.

Рисунок 9 – Создание защищённого раздела.

Рисунок 10 – Шифрованные разделы алгоритмом AES.

После всего этого установим  ZeBeDee и приступим к его настройке. На сервере ZeBeDee запустим: ZeBeDee -s localhost:3050. На клиенте запустим: ZeBeDee 3051:адрес сервера:3050. Теперь ZeBeDee готова к работе!

Если не использовать приватные ключи, то ZeBeDee просто шифрует данные между двумя точками, при этом разрешая соединение с сервером любых клиентов ZeBeDee. Но даже без приватных ключей ZeBeDee снимает проблему открытости пакетов при использовании 'sniffer' (просмотрщика пакетов) - шифрование идет с самого начала, и username вместе с путем и именем базы данных будет зашифрован, значительно затрудняя работу потенциального взломщика. При использовании приватных ключей на сервере ZeBeDee включится аутентификация, позволяющая соединяться только тем клиентам, у которых есть файл ключа.

Для создания ключа используем команду: ZeBeDee –p. Получим нечто вроде: privatekey "410dea0cbd9c10da057848c43a610f6bb859b769". Результат будет разный при каждом выполнении команды, поэтому при повторах лучше перенаправлять вывод в файл: ZeBeDee -p >client1.key. Файл ключа должен тщательно оберегаться. При помощи этого ключа нужно создать fingerprint: ZeBeDee -P -f client1.key >client1.id. При этом в файле client1.id окажется примерно следующее: 135f04050961d37553731250d5c6f7495f088b32 client1. Текст 'client1' просто примечание, позволяющее помнить ссылку на оригинальный ключ. Теперь нужно изменить файл конфигурации клиента ZeBeDee и добавить в нем строку: include "path-to-dir/client1.key", где "path-to-dir" это каталог, где находится файл ключа (client1.key). Другими словами, данные client1.id используются любым сервером ZeBeDee для аутентификации клиента, имеющего ключ в client1.key. Типичный файл, содержащий все идентификаторы, выглядит так:

ba077f6a42bea502f517cab5685e476a713d9621 Client1

3ad38cb1f16957d5c535272ce27557bdaa4389c6 Client2

135f04050961d37553731250d5c6f7495f088b32 Client3

На сервере ZeBeDee нужно в файл конфигурации добавить строку: checkidfile "path-to-dir/clients.ids" (файл clients.ids содержит строки из всех файлов client.id, которым разрешено соединяться с сервером ZeBeDee). Теперь, если клиент без ключа попытается соединиться с сервером, то аутентификация не пройдет, и сервер откажет клиенту в соединении.

Важным свойством ZeBeDee для интернет-решений является возможность сжатия пакетов. В клиент-серверных приложениях часто передаются большие объемы данных, например для отчетов - для интернета это будет очень неэффективно и медленно. Для этого в конфигурационном файле раскомментируем compression zlib:9 (можно попробовать коэффициенты сжатия менее 9).

 

Заключение

 

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

Среди множества  средств для разработки систем тестирования была выбрана Embarcadero Delphi XE2, а система управления базами данных Firebird. Естественно, сравнивая используемые в настоящей работе программные продукты с их аналогами, в качестве основных достоинств можно отметить: цену (Firebird), быстродействие, надёжность, многоверсионность (Firebird), легкость установки, автоматическое восстановление после аварийных отказов и минимальные требования к администрированию (Firebird). Недостатками можно считать относительно большую цену на Embarcadero Delphi XE2, отсутствие встроенного шифрования трафика для подключений к базе данных, использование блокирующих сокетов.

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

В перспективе  планируется (и уже начата) перенос программы клиента и сервера в свободно распространяемую среду Lazarus на базе не блокирующих сокетов Synapse. В конце 2012 года также планируется выпуск Firebird 3.0. Всё это позволит избавится от всех недостатков данной системы.

 

Список использованных источников

 

  1. Мейер, М. Теория реляционных баз данных / М. Мейер. – М.: Мир, 1987. – 608 с.
  2. Фаронов, В. В. Программирование баз данных в Delphi 7. Учебный курс / В. В. Фаронов. – СПб.: Питер, 2006. – 459 с.
  3. Бобровский, С. И. Delphi 7. Учебный курс / С. И. Бобровский. – СПб.: Питер, 2004. – 736 с.
  4. Использование ZeBeDee с Firebird для шифрования и сжатия сетевого трафика [Электронный ресурс]. – Режим доступа: http://www.ibase.ru/devinfo/zebedee.htm
  5. Браунштейн, С. Л. Квантовые вычисления: учебное руководство / С. Л. Браунштейн. – И.: Удмуртский университет, 1999. – С. 10–11.
  6. Документация по СУБД Firebird [Электронный ресурс]. – Режим доступа: http://www.firebirdsql.org/manual/ru/firebird-database-documentation-ru.html
  7. Современные утилиты шифрования данных [Электронный ресурс]. – Режим доступа: http://ru.wikipedia.org/wiki/Современные_способы_шифрования_данных

 

Приложение  А (обязательное) Код программы

unit ExamUnit;

 

interface

 

uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Menus, Grids, DBGrids, DB, IBCustomDataSet, IBDatabase, StdCtrls, jpeg, ExtCtrls, Buttons, ToolWin, ComCtrls, ScktComp,  StrUtils, ActnList, DateUtils, IniFiles;

 

Type TServerExam = record

     ClientSocket: TClientSocket;

     ClientComputerName:string;

     ClientManName:string;

     Resultat: byte;

     Status:integer;

     ExamTeoryPK:longint;

     Time:integer;

     end;

 

type

  TFmExamServer = class(TForm)

    IBDsetEXAMTRwrite: TIBDataSet;

    WriteIBTransaction: TIBTransaction;

    Timer1: TTimer;

    ServerSocket1: TServerSocket;

    DataSourceEXAMtr: TDataSource;

    IBDataSetEXAMtr: TIBDataSet;

    ReadIBTransaction: TIBTransaction;

    Panel3: TPanel;

    Panel4: TPanel;

    ToolBar1: TToolBar;

    SpeedButton1: TSpeedButton;

    SpeedButton3: TSpeedButton;

    SpeedButton2: TSpeedButton;

    StringGrid1: TStringGrid;

    SpeedButton6: TSpeedButton;

    Image15: TImage;

    Label6: TLabel;

    Image14: TImage;

    Label7: TLabel;

    Image1: TImage;

    Label8: TLabel;

    Image2: TImage;

    Label9: TLabel;

    Image6: TImage;

    Label10: TLabel;

    BitBtn1: TBitBtn;

    Image5: TImage;

    Image4: TImage;

    IBDatabase1: TIBDatabase;

    Image3: TImage;

    Image7: TImage;

    SpeedButton5: TSpeedButton;

    SpeedButton4: TSpeedButton;

    procedure FormCreate(Sender: TObject);

    procedure StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;

      Rect: TRect; State: TGridDrawState);

    procedure ShowWorkPlases(InitiativeStantion:integer);

    function IntSecToStrTime(IntSec:integer):string;

    procedure Timer1Timer(Sender: TObject);

    procedure ClientSocket1Connect(Sender: TObject;

      Socket: TCustomWinSocket);

    procedure ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket;

      ErrorEvent: TErrorEvent; var ErrorCode: Integer);

    procedure ClientSocket1Disconnect(Sender: TObject;

      Socket: TCustomWinSocket);

    procedure StartNewExam(RowNom:integer;Speaker:boolean);

    procedure SpeedButton1Click(Sender: TObject);

    procedure ServerSocket1ClientRead(Sender: TObject;

      Socket: TCustomWinSocket);

    procedure Some(RecText:string);

    function FindNomberByTag(Tag:integer):integer;

    procedure SpeedButton3Click(Sender: TObject);

    procedure FinishExamAtAll(RowNom:integer;Speaker:boolean);

    function  StrTimeToIntSec(inpTime:TDateTime):integer;

    procedure EmercyFinishExam(RowNom:integer;Speaker:boolean);

    procedure SpeedButton2Click(Sender: TObject);

    function GetComputerNetName: string;

procedure AddAnAWorkPlace(Re,StantionNomber:integer);

    procedure SetWPtoNull(nom:integer);

    procedure SpeedButton6Click(Sender: TObject);

    procedure BitBtn1Click(Sender: TObject);

    procedure SpeedButton5Click(Sender: TObject);

    procedure SpeedButton4Click(Sender: TObject);

 

  private

    { Private declarations }

  public

    { Public declarations }

  end;

 

var

  FmExamServer: TFmExamServer;

  VOPR:byte=10;

  TTTime:integer=600;

  WorkPlaces:array of TServerExam;

  JustStartingStantion:integer;

  Stat:array[0..7] of string;

 

implementation

 

uses NewExam, ExamListUnit, Unit7, Settings;

{$R *.dfm}

 

procedure TFmExamServer.BitBtn1Click(Sender: TObject);

begin

FmExamServer.Close;

end;

 

function TFmExamServer.IntSecToStrTime(IntSec:integer):string;

var min,sec:string;

    i:integer;

begin

min:=inttostr(IntSec div 60);

sec:=inttostr(IntSec mod 60);

for i:=2 downto length(min)+1 do min:='0'+min;

for i:=2 downto length(sec)+1 do sec:='0'+sec;

result:=min+':'+sec;

end;

 

function  TFmExamServer.StrTimeToIntSec(inpTime:TDateTime):integer;

var StrTime:string;

begin

StrTime:=TimeToStr(inpTime);

if length(StrTime) = 7 then StrTime:='0'+StrTime;

if StrTime='' then result:=0

    else

    begin

    result:=strtoint(copy(StrTime,4,2))*60+strtoint(copy(StrTime,7,2));

    end;

end;

 

procedure TFmExamServer.FormCreate(Sender: TObject);

var Fname,tmpstr:string;

  IniFile:TIniFile;

 

begin

Stat[0]:= '';

Stat[1]:= 'ожидание ответа';

Stat[2]:= 'готово к старту';

Stat[3]:= 'идет экзамен';

Stat[4]:= 'просмотр результатов';

Stat[5]:= 'просмотр неправильных';

Stat[6]:= 'прервано администратором';

Stat[7]:= 'Завершено';

 

try

  IniFile:=TIniFile.Create(ExtractFilePath(ParamStr(0))+'settings.ini');

  Fname:=IniFile.ReadString('base','adress','localhost');

  tmpstr:=IniFile.ReadString('base','path','E:\Server\BASE.GDB');

  IniFile.Free;

  IBDatabase1.DatabaseName:=Fname+':'+tmpstr;

  IBDatabase1.Connected:=true;

 

  IBDataSetEXAMtr.Open;

  //AddAnAWorkPlace(-1,1);

except

  MessageDlg('Не удалось соединиться с базой данных!', mtError,      [mbOk], 0);

  FmExamServer.close;

end;

 

ShowWorkPlases(-1);

end;

 

procedure TFmExamServer.StartNewExam(RowNom:integer;Speaker:boolean);

var WpTag,nom:integer;

begin

JustStartingStantion:=-1;

if length(WorkPlaces)=0 then

begin

  if speaker then MessageDlg('Нет подключенных рабочих станций.'+#13+

                         'Нельзя назначить новый экзамен пока нет подключенных станций.', mtinformation,      [mbOk], 0);

  exit;

  end;

 

WpTag:=strtoint(StringGrid1.Cells[0,RowNom]);

nom:=FindNomberByTag(WpTag);

 

if nom=-1 then

BEGIN

   if speaker then MessageDlg('Компьютер не доступен.'+#13+

                 'Нельзя назначить новый экзамен на недоступный компьютер', mtinformation,      [mbOk], 0);

   exit;

   end;

 

if nom>=0 then

   if WorkPlaces[nom].ExamTeoryPK<>0 then

BEGIN

   if speaker then  MessageDlg('На указанный компьютер уже назначен экзамен.'+#13+

                 'Нельзя назначить новый экзамен  на занятый компьютер.', mtinformation,      [mbOk], 0);

   exit;

   end;

 

JustStartingStantion:=abs(WpTag);

Application.CreateForm(TFmNewExam, FmNewExam);

end;

 

procedure TFmExamServer.FinishExamAtAll(RowNom:integer;Speaker:boolean);

var nom:integer;

    stdate:String;

begin

if length(WorkPlaces)=0 then exit;

 

nom:=FindNomberByTag(strtoint(StringGrid1.Cells[0,RowNom]));

if nom=-1 then nom:=FindNomberByTag(-strtoint(StringGrid1.Cells[0,RowNom]));

 

if (WorkPlaces[nom].Status<>7) and (WorkPlaces[nom].Status<>4) and (WorkPlaces[nom].Status<>5) then     exit;

 

    WorkPlaces[nom].ClientSocket.Socket.SendText(inttostr(-2));

 

    IBDsetEXAMTRwrite.Close;

    IBDsetEXAMTRwrite.SelectSQL.Clear;

    IBDsetEXAMTRwrite.SelectSQL.Add('Select * from EXAMTR where PK='+inttostr(WorkPlaces[nom].ExamTeoryPK));

    IBDsetEXAMTRwrite.Open;

    IBDsetEXAMTRwrite.Edit;

    IBDsetEXAMTRwrite.FieldByName('STATUS').AsInteger:=8;

    IBDsetEXAMTRwrite.Post;

    stdate:=IBDsetEXAMTRwrite.FieldByName('STARTDATE').AsString;

    IBDsetEXAMTRwrite.Close;

    WriteIBTransaction.Commit;

Информация о работе Автоматизация процесса тестирования, защита от изменения, подмены и перехвата при передаче данных и от беспрепятственного физического ко