Разработка защищенной системы тестирования

Обзор существующих решений построения систем взаимодействия. Классическая архитектура клиент-сервер. Защита от копирования и распространения материалов тестирования. Задачи ИБ компьютерных систем тестирования и обзор современных способов их реализации.

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

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

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

Размещено на http://www.allbest.ru/

ВВЕДЕНИЕ

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

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

1. Обзор существующих решений построения систем взаимодействия

Технология клиент-сервер по праву считается одним из "китов", на которых держится современный мир компьютерных сетей. Но те задачи, для решения которых она была разработана, постепенно уходят в прошлое, и на сцену выходят новые задачи и технологии, требующие переосмысления принципов клиент-серверных систем. Одна из таких технологий - World Wide Web.

Использование технологии гипертекстовых документов для построения внутренней информационной инфраструктуры компании стимулировало бурное развитие всевозможных систем типа клиент-сервер. Некоторые пытаются противопоставить web-технологию архитектуре клиент-сервер, однако это заблуждение, поскольку на самом деле web является развитием данной архитектуры. Можно сказать, что система web имеет архитектуру клиент-серверы, т. е. с помощью одного клиента можно подключиться ко многим серверам. web-браузер, который обеспечивает удобный интерфейс с пользователем для доступа к информации - это лишь вершина айсберга, самый верхний уровень системы web [1].

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

1.1 Классическая архитектура клиент-сервер

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

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

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

При разбиении алгоритмов обработки данных необходимо синхронизировать поведение обеих частей системы. Все разработчики должны иметь полную информацию о последних изменениях, внесенных в систему, и понимать эти изменения. Это создает большие сложности при разработке клиент-серверных систем, их установке и сопровождении, поскольку необходимо тратить значительные усилия на координацию действий разных групп специалистов. В действиях разработчиков часто возникают противоречия, а это тормозит развитие системы и вынуждает изменять уже готовые и проверенные элементы [2].

1.2 Плюсы и минусы архитектур

Чтобы избежать несогласованности различных элементов архитектуры, пытаются выполнять обработку данных на одной из двух физических частей либо на стороне клиента ("толстый" клиент), либо на сервере ("тонкий" клиент, или архитектура, называемая "2,5- уровневый клиент-сервер"). Каждый подход имеет свои недостатки.

В первом случае неоправданно перегружается сеть, поскольку по ней передаются необработанные, а значит, избыточные данные. Кроме того, усложняется поддержка системы и ее изменение, так как замена алгоритма вычислений или исправление ошибки требует одновременной полной замены всех интерфейсных программ, а иначе могут возникнуть ошибки или несогласованность данных [3].

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

Итак, рассмотренные выше модели имеют следующие недостатки:

1) "толстый" клиент:

· сложность администрирования;

· усложняется обновление ПО, поскольку его замену нужно производить одновременно по всей системе;

· усложняется распределение полномочий, так как разграничение доступа происходит не по действиям, а по таблицам;

· перегружается сеть вследствие передачи по ней необработанных данных;

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

2) "толстый" сервер:

· усложняется реализация, так как языки типа PL/SQL не приспособлены для разработки подобного ПО и нет хороших средств отладки;

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

· программы, написанные на СУБД - языках, обычно работают недостаточно надежно; ошибка в них может привести к выходу из строя всего сервера баз данных;

· получившиеся таким образом программы полностью непереносимы на другие системы и платформы [4].

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

2. Задачи ИБ компьютерных систем тестирования и обзор современных способов их реализации

Для этих систем характерны такие задачи по информационной безопасности, как разграничение прав пользователей всей системы, защита от модификации программного кода в интересах пользователя, сокрытие от пользователя части информации, контроль со стороны сервера, защита информации при ее передаче от клиента к серверу, защита логина и пароля пользователей, ограничение возможности подбора паролей, и ряд других. Так же на стороне клиента следует ограничить возможность использования ресурсов интернета, возможность копирования информации непосредственно из окна тестирования или любую другую попытку свернуть окно браузера при запущенной сессии тестирования. Многие из этих задач весьма актуальны в настоящее время [5].

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

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

· защита сообщений - закрытие от компрометации третьими лицами - посредством предоставления сетевого программного интерфейса к процедурам их шифрования;

· защита сообщений - целостности и аутентификации - посредством предоставления сетевого программного интерфейса к процедурам электронной цифровой подписи;

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

· защита почтового взаимодействия независимо от реализации системы электронной почты.

Сервер обеспечивает совместную работу с защищенным абонентским пунктом, шифрование и расшифрование данных и файлов, контроль целостности данных от случайных или преднамеренных изменений, вычисление значения хэш-функции и ЭЦП произвольных блоков данных, ведение журнала [6].

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

Чтобы предотвратить эту угрозу, можно использовать защищенный протокол, например использовать криптографический протокол SSL.

Протокол SSL обеспечивает защищенный обмен данными за счет сочетания двух следующих элементов. Первый из них Аутентификация. Цифровой сертификат привязан к конкретному домену сети Интернет, а центр сертификации проводит проверки, подтверждающие подлинность организации, а уже затем создает и подписывает цифровой сертификат для этой организации. Такой сертификат может быть установлен только на тот домен web-сервера, доля которого он прошел аутентификацию, что и дает пользователям сети Интернет необходимые гарантии.

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

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

В ходе этой процедуры web-браузер проверяет, чтобы:

- доменное имя в сертификате соответствовало тому домену, от которого идет запрос на защищенное соединение;

- сертификат не был просрочен;

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

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

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

Парный открытый ключ устанавливается на web-сервер и является частью цифрового сертификата. Открытый и секретный ключи связаны математической закономерностью, но не идентичны. Желающий установить защищенный сеанс (при помощи SSL протокола) клиент обращается к открытому ключу сертификата и с помощью открытого ключа шифрует посылаемую информацию. Этот процесс происходит мгновенно и незаметно для пользователя. Расшифровать информацию можно только с помощью секретного ключа сервера. Это дает гарантию клиенту, что никакая третья сторона не получит доступ к его информации [7].

Чтобы защитить пароли пользователей в настоящее время применяют хэш-функции от паролей. Хэширование превращает данные в набор строковых и целочисленных элементов. Это происходит благодаря одностороннему хэшированию. "Одностороннее" означает, что произвести обратное преобразование очень сложно или вовсе невозможно. Самая распространённая хэш функция это md5. Применяя md5 всегда будет получаться в качестве результата строка размером 32 символа. Но эти символы будут в шестнадцатеричном виде; технически хэш может представлять собой и 128-битовое целое. Можно помещать в функцию md5 строки и числа любой длины, но на выходе всегда будет получаться результат в 32 символа. Этот факт хорошее подтверждение тому, что это "односторонняя" функция [8].

клиент сервер пароль архитектура

3. Реализация методов защиты

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

3.1 Использовании хеш - функции пароля

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

Поэтому было предпринято реализовать защиту только логина и пароля учетных записей по следующей схеме - с помощью хэш функции. Когда администратор создает учетную запись, например, для учащегося, то в базе данных записывается md-5 хэш-функция от этой последовательности символов, т.е. в чистом виде пароль не сохраняется в базе данных. Затем, при авторизации, в базе данных производится поиск: зарегистрирован ли такой логин, и если да, то скрипт - обработчик хэширует введенный пароль. Затем скрипт находит запись в базе данных, и считывает значения пароля, который хранится в ней. Пароль из базы и пароль введённый пользователем сравниваются, и если они совпадают (в хэшированном виде), то пользователя впускают в систему. Значение хэш - функции записывается в cookies и оно каждый раз будет разным. После закрытия браузера и окончания сессии, значение сбрасывается и при следующем входе будет сгенерирована новая последовательность от пароля. Исходный код этой процедуры представлен в Приложении А.

3.2 Защита от копирования и распространения материалов тестирования

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

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

1) невозможность запуска нескольких сессий браузера;
2) запуск активного окна в полноэкранном режиме без лишних функций браузера - адресной строки, панели инструментов, полосы прокрутки, строки состояния;

3) активное окно нельзя свернуть никаким способом;

4) размеры активного окна нельзя изменить;

5) нельзя создать новую вкладку;

6) вывод предупреждающих сообщений при нарушении правил.

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

3.3 Разграничение полномочий

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

ЗАКЛЮЧЕНИЕ

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

- все вычисления, конфиденциальные данные, полномочия пользователей расположены на сервере;

- контрольно - измерительные материалы защищены от копирования, распространения, модификации;

- каждый пользователь имеет право доступа только к тем данным, которые ему необходимы для выполнения своей работы;

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

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

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

1 Защита информации в вычислительных архитектурах клиент/сервер [Электронный ресурс]. - 2009. - Режим доступа: http://www.infocity.kiev.ua/hack/content/hack054.phtml, свободный. - Загл. с экрана. - Яз. рус.

2 Галатенко В.Е. Информационная безопасность систем управления базами данных [Электронный ресурс]. - 2008. - Режим доступа: http://www.hardline.ru/2/22/941, свободный. - Статья. - Яз. рус.

3 Защита информации в системах клиент-банк на основе криптопротоколов [Электронный ресурс]. - 2012. - Режим доступа: http://dehack.ru/arts/zaschita_informatsii_v_sistemax_klient_bank, свободный. - Загл. с экрана. - Яз. рус.

4 Защита компьютерной информации от несанкционированного доступа [Электронный ресурс]. - 2011. - Режим доступа: http://www.supermegayo.ru/index.html, свободный. - Загл. с экрана. - Яз. рус.

5 Коржов В.А. Многоуровневые системы клиент-сервер [Электронный ресурс]. - 2007. - Режим доступа: http://www.osp.ru/nets/1997/06/142618/, свободный. - Статья. - Яз. рус.

6 Разработка автоматизированной информационной системы дистанционного обучения [Электронный ресурс]. - 2008. - Режим доступа: http://knowledge.allbest.ru/programming/2c0b65625b3bc68b53a89521216c7.html, свободный. - Загл. с экрана. - Яз. рус.

7 Абонентский Пункт [Электронный ресурс]. - 2011. - Режим доступа: http://www.top-cross.ru/Pki/TC/ph-ap.html, свободный. - Загл. с экрана. - Яз. рус.

8 КриптоПро УЦ Регламент [Электронный ресурс]. - 2010. - Режим доступа: http://www.cryptopro.ru, свободный. - Загл. с экрана. - Яз. рус.

СПИСОК СОКРАЩЕННЫХ ОБОЗНАЧЕННИЙ

WWW - World Wide Web, всемирная паутина

Md5- Message Digest 5, отпечаток сообщения пятой версии

SQL- Structured Query Language, язык структурированных запросов

ПО - Программное Обеспечение

SSL- Secure Sockets Layer, уровень защищённых сокетов

ПРИЛОЖЕНИЕ А

Исходный код авторизации пользователя

class Login_Session{

private $pdo;

private $passwd, $login;

protected $request;

private $user, $hash;

function __construct( $login, $passwd ){

$this->setLogin( $login );

$this->setPasswd( $passwd );

if( ! isset( $this->pdo ) ){

$this->pdo = Base_ApplicationRegistry::getDB();

if( is_null( $this->pdo ) ){ throw new Exception( 'Ошибка доступа к базе данных!' ); }

$this->pdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );

}

$this->user = $this->pdo->prepare( "SELECT * FROM auth, users WHERE auth.login=? AND auth.login=users.login" );

$this->hash = $this->pdo->prepare( "UPDATE auth SET hash=? WHERE login=?" );

}

public function setLogin( $login ){

$this->login = $login;

}

public function setPasswd( $passwd ){

$this->passwd = $passwd;

}

// проверка - вошел ли пользователь на сайт

public function auth( ){

$userData = $this->getUserLogin();

if( $userData['hash'] === $this->passwd ){

return true;

}

return false;

}

// вход на сайт ( авторизация )

public function login( ){

$password = md5( md5( $this->passwd ) );

$userData = $this->getUserLogin();

if( ! $userData ){

print "<h2>Пользователя <i>". $this->login ."</i> несуществует</h2>";

return false;

}

if( $password === md5( $userData['passwd'] ) ){

// если пароль верный, устанавливаем хеш в сессии и БД

$hash = md5( $this->getCodeString( ) );

$_SESSION["hash"] = $hash;

$_SESSION["login"] = $userData['login'];

$_SESSION["role"] = $userData['role'];

$this->hash->execute( array( $hash, $this->login ) );

return true;

}

print '<h2>Введен не верный пароль</h2>';

return false;

}

// "Выход" с сайта

static function logout( ){

session_unset();

header( "Location: /" );

}

// Находим данные пользователя в БД, по его логину

private function getUserLogin( ){

$this->user->execute( array( $this->login ) );

$res = $this->user->fetchAll( PDO::FETCH_ASSOC );

if( empty( $res ) ) return false;

return $res[0];

}

// Геренация случайного числа

public function getCodeString( $length = 10 ){

$chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPRQSTUVWXYZ0123456789";

$str = '';

$lenStr = $length - 1;

while( strlen( $str ) < $length ){

$str .= $chars[mt_rand( 0, $lenStr )];

}

return $str;

}

}

?>

ПРИЛОЖЕНИЕ Б

Исходный код верстки, запрещающий копирование и выделение текста

<body onselectstart="return false" oncontextmenu="return false">

onselectstart="return false" - запрет выделение текста

oncontextmenu="return false" - запрещает вызов контекстного меню правой кнопки мыши и соответствующей клавиши.

ПРИЛОЖЕНИЕ В

Исходный код для ограничения функционала браузера

/*переносимый способ регистрации обработчиков события onload. данный модуль определяет единственную функцию runOnLoad, выполняющую

регистрацию переносимым способом функций - обработчиков, которые могут вызываться только после полной загрузки документа, когда будет доступна структура DOM*/

function runOnLoad(f){

if(runOnLoad.loaded)f(); // если документ уже загружен просто

вызывать f();

else runOnLoad.funcs.push(f); // иначе сохранить для вызова позднее

}

runOnLoad.funcs=[]; // массив функция которые должны быть вызваны после

загрузки документа

runOnLoad.loaded=false; //функции еще не запускались

runOnLoad.run=function() {

if (runOnLoad.loaded) return; // если функции запускались, значит ни

чего не делаем

for (var i=0;i<runOnLoad.funcs.length;i++) {

try {

runOnLoad.funcs [i]();

} catch(e) {} // исключения вызванные в какой либо функции ни как не

должно повлиять на вызов остальных

}

runOnLoad.loaded=true; // запомнить факт запуска

delete runOnLoad.funcs; // Но не запоминать сами функции

delete runOnLoad.run // забываем о существовании данных функций

}

// регистрируем runOnLoad как обработчик событий onload

if (window.addEventListener) {

window.addEventListener("load",runOnLoad.run,false);

}

else if(window.attachEvent) {

window.attachEvent("onload",runOnLoad.run);

}

else window.onload=runOnLoad.run;

// вызываем регистрацию событий onload функции sizeBody

runOnLoad(sizeBody);

/* функция обработчик изменения размера окна, она показывает или

скрывает тег "закрытия текста" */

function sizeBody() {

var bodySize=document.documentElement.clientHeight; // высота браузера

if(parseFloat(bodySize)>=(screen.height-5)) { // screen.height-5

(высота монитора пользователя) "минус 5" сделано для совместимости с браузером Firefox, так как в полноэкранном режиме он почему то

"оставляет 5 пикселей верхнего тулбара"

document.getElementById("noTextBody").style.display="none"; //

скрываем тег "оповещения"

} else{ document.getElementById("noTextBody").style.display="block";

// делаем оповещение, путем добавления "видимости" тега в наш документ

}

}

Размещено на Allbest.ru


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

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