Событие - это какое-либо действие, осуществляемое пользователем либо браузером. Например, когда мы щелкаем (кликаем) на ссылке - осуществляется событие, его перехватывает специальный обработчик и перенаправляет нас на нужную страницу; при наведении курсора (указателя мыши) на ссылку в строке состояния (обычно находится в нижней части окна браузера) отображается адрес, так как обработчик "наведения курсора на объект (в данном случае на ссылку)" помещает туда этот адрес и так далее...
а). onmouseout и onmouseover
Для начала наведем курсор на кнопку "Сброс" или "Отправить" и обратим внимание на строку состояния. Вы должны увидеть там надпись с объяснением значения кнопки. Теперь отведите курсор и строка состояния очистится.
Содержимое строки состояния хранится в переменной window.status. Переменная это некоторый объект (можно представить себе ящик), значение которого (содержимое которого) можно изменять. Изменение значения осуществляется операцией присваивания (=), а выглядит она следующим образом:
имя_переменной = "значение"; (какие использовать кавычки: одинарные или двойные значения не имеет)
Поэтому для того, чтобы изменить надпись в строке состояния, нам нужно присвоить переменной window.status нужное нам значение (подсказку к кнопке), а когда курсор будет убран - присвоить пустую строку("").
Вся задача сводится к тому, чтобы определить когда пользователь наводит курсор на кнопку, а когда убирает его. Для этого нужно "сказать" обработчикам этих событий выполнить нужное нам действие. Обработчик события "наведение курсора" - onmouseover, а "отведение курсора" - onmouseout.
Очень многие тэги имеют атрибуты, начинающиеся с on (onclick, onmouseout, onfocus и т. д.). Значение этих атрибутов и есть, задача которую необходимо выполнить соответствующему обработчику. То есть для обработчика onmouseout есть атрибут onmouseout, для onmouseover - onmouseover. И в итоге мы получаем следующее определение кнопок:
Как Вы видите, атрибут onmouseover имеет в качестве значения JavaScript-код: window.status='Щелкните для отправки данных', как только курсор достигает кнопки, обработчик события mouseover - onmouseover, смотрит, что хранится в атрибуте onmouseover и выполняет необходимое действие(присвоение значения переменной window.status). Аналогично действует и обработчик события onmouseout: как только курсор уводиться от кнопки (то есть выполняется событие mouseout), то обработчик события - onmouseout выполняет код, содержащийся в атрибуте onmouseout.
То же самое и со второй кнопкой.
б). <a href="Java Scriptfunction()">Function</a>
Теперь щелкните на ссылке и откроется окошко с подсказкой. Но заметьте, что окно небольших размеров и у него нет панели инструментов - такого силами html не сделаешь! В данном примере мы имеем окно размером 300x200, без панелей инструментов, содержащее документ help.html.
Для того чтобы создать такое окошко существует следующий JavaScript-код:
где:
1. helpWindow - это имя переменной (как window.status, только в данном случае имя выбирается произвольно). Эта переменная нужна для последующей работы с окном (например, закрыть его нестандартным способом - с помощью JavaScript-сценария).
- Зачем? Не проще ли указывать просто имя открывающейся страницы, например help.html?
- А если у нас две копии одной и той же страницы? Или две страницы с одинаковым именем(например, в разных папках)? Вот для того, чтобы не перепутать страницы и свободно работать именно с тем окном с которым предполагаешь и сделанно, так чтобы "окно" присваивалось переменной, так как имя переменной можно выбрать любое.
2. window.open(что-то) - это функция. Функции выполняют определенную задачу, в данном случае window.open() открывает новое окно.
3. help.html - это страница, которую нужно открыть.
4. "" - В кавычках должно быть имя окна, но оно нам не пригодится, поэтому там нулевая строка. В следующих кавычках указываются "параметры открываемого окна": оно не должно содержать панели инструментов (toolbar=0) и должно быть шириной 300 пикселей, а высотой - 200 (width=300,height=200, соответственно).
Теперь все, что нужно это по событию "щелчка" выполнить этот код, однако есть два "но". Во-первых строка очень длинная, чтобы присвоить ее какому-либо атрибуту - будет некрасиво смотреться, да и вызывать неудобства при чтении кода страницы. Во-вторых, первоначальное предназначение ссылки - это переход на другую страницу, но нам переходить никуда не нужно, нам нужно выполнить вместо этого JavaScript-код.
Первое решается написанием функции. Как я уже говорил функция выполняет некоторую задача, причем для использования функции достаточно указать ее имя. Можно не только использовать предопределенные(функции, которые имеется в языке и без нас), но и писать их самому. Обычно функции определяются(пишутся) в разделе HEAD документа, в котором используются:
"function" значит, что дальше будет написана наша функция; help() - это имя функции (оно будет указываться вместо тела функции (между { и })).
Вторая проблема решается тоже довольно просто. Адрес страницы указывается в атрибуте href, а нам надо выполнить JavaScript код вместо перехода по ссылке:
"Java Script" означает, что дальше должен идти JavaScript-код, и что он должен выполняться вместо стандартного перехода по ссылке. В данном случае наш JavaScript-код - это созданная нами функция help().
в). onclick
Нам не остается ничего более, как закрыть окно со справкой. Для этого воспользуемся кнопкой "Закрыть". Но нас интересует то, как работает эта кнопка, а имеет она следующий вид:
Дабы закрыть окно мы сделали щелчок(Click) на кнопке "Закрыть", а щелчок это нажатие и отпускание кнопки мыши, причем и то и другое должно быть произведено на одном и том же элементе (например, на кнопке). Кликая, на кнопке мы активируем обработчик события onClick, который выполняет для нас JavaScript-код, прописанный в атрибуте onclick нашей кнопки. Помните мы открывали окно? Мы писали window.open(), а здесь тоже самое только window.close(). window - это текущее окно, а close() - закрыть.
Это одно из наиболее частоупотребляемых событий.
г). onfocus и onblur
Ну что ж будем ближе подбираться к вводу требуемой от нас информации.
Как я уже говорил: элемент получает фокус когда на нем происходит нажатие кнопки мыши, или на него осуществляется переход посредством клавиши табуляции (Tab), а теряет, когда фокус получает другой элемент. Наше поле для ввода получит фокус тогда, когда пользователь решиться ввести информацию. При этом было бы удобно, чтобы текст с подсказкой ("Введите Ваше имя") автоматически выделялся и посетитель мог его удалить одним нажатием на del, а не удалять по одному символу, или выделять текст вручную. Удобство пользователя свято. Итак, для этого мы воспользуемся событием focus. Для выделения текста используется метод select(). То есть атрибутом к полю надо прописать: onfocus="this.select();", this обозначает, что выделение должно происходить именно в этом текстовом поле (а можно прописать путь и к другому, но это не целесообразно).
А теперь попробуйте ничего не изменяя (или все удалив) убрать фокус (например, щелкнув в любом месте окна, или нажав Tab). Это событие blur, я прописал в нем выполнение функции: onblur="check();". Сама же функция имеет следующий вид (в разделе head страницы с формой между <script> и </script>):
document.forms[0].name.value - это то, что введено в текстовое поле. document - это текущий документ, forms[0] - первая форма на нашей страницы (отсчет с нуля), name = имя поля (задается атрибутом name (<input name="name">)), а value это и есть нужное нам значение (то, что введенно в текстовое поле, к которому м ы и написали путь). Введенное в поле мы присваиваем переменной val (var значит, что дальше идет имя переменной), чтобы в дальнейшем каждый раз не писать весь путь целиком.
Следующее это оператор if(если). Он выглядит следующим образом:
Мы сравниваем содержание переменной val с пустой строкой ('') и с начальной строкой ('Введите Ваше имя'). Обратите внимание, что сравнение не как в математике(с одним =), а сравниваются двума ==. || - или. Функция alert выводит окно с ошибкой (то, что в скобках - это текст ошибки). То есть:
И на всякий случай приведу целиком строку с кодом поля input:
д). onreset и onsubmit
Допустим, что пользователь заполнил форму неправильно, и он хочет очистить все поля формы одновременно: для этого он воспользуется стандартной кнопкой reset. Но что если пользователь щелкнет на ней по случайности (рука дрогнет, или в суете спутает с кнопкой submit), а форма была огромная, и он долго мучился ее заполнять..., ему будет грустно, и еще он будет долго материться. Поэтому хорошо бы у него дополнительно спросить: действительно ли он хочет очистить форму.
Вообще событие reset обрабатывается до очистки формы. А чтобы отменить очистку вообще, нам просто напросто надо вернуть обработчику события значение false, то есть прописать в соответствующем атрибуте: "return false;", а чтобы продолжить очистку: "return true;". А теперь вспомним функцию, которая выдает вопрос пользователю на подтверждение чего-либо, эта функция: "confirm('Вопрос?');". При нажатии "Ok", эта функция заменяется на true, а при нажатии "Cancel" на false. То есть все что от нас требуется, это прописать в теге <form> атрибут: onreset="return confirm('Вы действительно хотите сбросить форму?');". Тогда при нажатии "Ok" там на самом деле будет "return true;", и форма будет очищена, а если "Cancel", то "return false;" и очистка формы будет отменена.
Подобным образом действует событие submit, которое возникает при попытке отправить форму. Поскольку в нашем случае форму отправлять никуда не надо, то у меня просто написано: onsubmit="return false;". И сколько бы Вы не щелкали ничего не изменится (разве что Вы JavaScript отключите).
Обычно же обработчик onsubmit используется для верификации формы (то есть проверки на заполнение всех необходимых полей, правильность их заполнения, скажем, проверка по определенному шаблону и т. п.), для этого создается функция, которая выполняет все действия. Функция должна содержать операторы "return true" и "return false", которые позволяют, заменить функцию на true или false, соответственно, в зависимости от результатов проверки (если успешно, то true, если нет false). Но верификация данных это обширная тема, которая не может быть рассмотрена здесь. Один из примеров базовой верификации я привел, когда объяснял событие blur - подобную функцию можно использовать и здесь. Тогда <form> будет содержать атрибут: onsubmit="return function();".
Но не забывайте, что нельзя ограничиваться одной лишь проверкой языком JavaScript, ибо его поддержка может быть отключена у посетителя, и тогда все Ваши труды по защите...
е). onmousedown и onmouseup
Еще одна пара событий не нашла достойного места на странице, но я ее реализовал в виде кнопки "Button". Причем это не обычная html-кнопка, она реализована в виде двух картинок. Исходная кнопка хранится в файле с именем npressed.jpg, а нажатая - pressed.jpg. Чтобы достичь эффекта нажатия кнопки нам необходимо, чтобы при при щелчке на ней(this) значение атрибута src (путь к картинке) тега <img> менялось на pressed.jpg, а при отпускании обратно на npressed.jpg. Нажатие кнопки обрабатывает onmousedown, а отпускание - onmouseup, то есть здесь все просто:
ж). onload, onunload и onabort
Обработчик события onload активируется, когда начинает загружаться графическая часть страницы (все тексты, графика и т.п.). onload является атрибутом тега <body>. Если честно я не вижу сколько бы реального применения этому событию, зато я нашел, что можно сделать с onunload. onunload это тоже атрибут тега <body>. Событие unload происходит когда мы пытаемся покинуть данную страницу (переходим по ссылке на другую, закрываем окно браузера, обновляем страницу и т. д.). Откройте еще раз окошко справки. Допустим, что пользователь прочитал справку, и хочет отправить форму, или уйдет с нашего сайта, но при этом он забыл закрыть это маленькое окошко с подсказкой, мы на выходе закроем его сами. А для этого тег <body> (у начального документа) у нас будет выглядеть следующим образом:
Вы должны бы помнить, что helpWindow это имя нашего окна (ведь именно этой переменной мы присваивали его открытие: helpWindow = window.open("help.html", "", "toolbar=0,width=300,height=200")), а метод close() закрывает это окно. Некоторые нехорошие люди используют это событие, чтобы когда посетители уходили с его страницы, появлялись какие-либо окна, так называемые pop-up.
onabort - атрибут тега <img>. Когда пользователь отменяет загрузку изображения происходит событие abort. Но отмена загрузки изображения может не входить в наши плане. И в качестве предупреждения у нас может быть написано нечто похожее на
ЗАКЛЮЧЕНИЕ
Есть некоторые события о которых я здесь нарочно не упомянул, потому что не нашел им достойного применения, но Вам они возможно пригодятся, поэтому я уделю им немного внимания.
onchange - обработчик события, который активируется, когда Вы изменяете содержимое текстового элемента или текстовой области (<TEXTAREA>) (например, когда Вы вводите или удаляете очередную букву какого-либо текстового поля).
onselect - обработчик события выбора текста. То есть это событие происходит, когда пользователь пытается выделить текст в текстовом элементе или текстовой области.
onerror - обработчик события error, которое возникает при ошибке загрузки документа или изображения (то есть onerror это атрибут тегов <body> и <img>). Оно возникает при синтаксической ошибке JavaScript-кода (но Вы ведь не будете специально делать в нем ошибки), либо ошибкой времени выполнения (например, если Ваш скрипт выполняет какие-либо вычисления и у Вас по ошибке получится так, что некое число будет делиться на ноль, а это недопустимо - это и есть одна из ошибок времени выполнения).
Так же не забывайте, что я привел лишь по одному примеру из десятков возможных на каждое событие. Здесь главное Ваша фантазия и навыки. Например, события mouseout, mouseover, mouseup, mousedown часто используются для создания выпадающих меню и других визуальных эффектов, но это весьма трудный материал, который требует более глубоких знаний, причем не одного JavaScript.
В этой статье описываются полезные функции и процедуры, помогающие эффективно работать с различными типами данных в системе "1С:Предприятие 7.7".
Форматирование данных в 1С
Список значений в 1С
Таблица значений в 1С
Таблица или печатная форма в 1С
Периоды и даты в 1С
Календари и праздники в 1С
[pagebreak]
Справочники в 1С
Документы в 1С
Предопределённые функции и процедуры в 1С
Налоговый учёт и первое событие в 1С
Резюме
В статье описаны функции и процедуры, используемые в программе "1С:Предприятие 7.7" для работы со справочниками, документами, списками значений, таблицами значений и с прочими агрегатными типами данных. Образцы практического применения описанных средств Вы сможете найти в статьях "Отчёты для 1С" и "Обработки для 1С".
Жесткие диски (винчестеры), как электромеханические устройства, являются одним из самых ненадежных компонентов современного компьютера. Несмотря на то, что в большинстве случаев срок службы последних соизмерим, и даже превосходит время их эксплуатации до момента морального устаревания и замены более новыми моделями, все же отдельные экземпляры выходят из строя в течение первых месяцев эксплуатации. Выход жесткого диска из строя - самое худшее, что может случиться с вашим компьютером, так как при этом часто необратимо теряются накопленные на нем данные. Если резервная копия по какой-то причине отсутствует, то суммарный ущерб от поломки заметно превышает номинальную стоимость современных винчестеров.
Многие фирмы, пользуясь ситуацией, предлагают свои услуги по восстановлению информации с вышедшего из строя накопителя. Очевидно, это обходится недешево и целесообразно только тогда, когда на диске находилось что-то действительно ценное. В противном случае легче просто смириться с потерей.
Ремонт жестких дисков требует специального оборудования и практически невозможен в домашних условиях. Так, например, для вскрытия контейнера необходима особо чистая от пыли комната. Казалось бы, положение безнадежно и нечего даже помышлять о восстановлении поломанного диска в домашних условиях. Но, к счастью, не все поломки настолько серьезны, и во многих случаях можно обойтись для ремонта подручными (а иногда чисто программными) средствами.
Один из самых частых отказов винчестеров фирмы western digital (а также и некоторых других) выглядит следующим образом: жесткий диск не опознается bios, а головки при этом отчетливо стучат. Скорее всего, по какой-то причине не работает блок термокалибровки, и устройство не может обеспечить нужный зазор между головкой и рабочей поверхностью "блина". Обычно это происходит при отклонении от нормального температурного режима эксплуатации, например, в зимнее время, когда жесткие диски в плохо отапливаемых помещениях "выстывают" за ночь (при температуре 18...210С жесткий диск часто может исправно функционировать и с испорченным механизмом термокалибровки). Попробуйте дать поработать винчестеру в течение нескольких часов, чтобы он прогрелся, при этом рано или поздно винчестер попадает в необходимый диапазон температур и работоспособность (возможно, временно) восстанавливается. Разумеется, первым делом нужно скопировать всю информацию, поскольку работоспособность такого диска уже не гарантируется. То же можно рекомендовать и в отношении устаревших моделей без термокалибровки; часто они оказываются зависимыми от температурного режима, и с ростом износа винчестера эта зависимость проявляется все сильнее.
Вторым по распространенности отказом является выход из строя модуля диагностики при полной исправности остальных компонентов. Как это ни покажется парадоксальным, но полностью рабочий винчестер не проходит диагностику. При этом в регистре ошибок (порт ox1f1 для первого жесткого диска) могут содержаться значения, приведенные ниже:
Диагностические ошибки
Бит Содержимое Источник ошибки
7 0 Ошибка master диска
1 Ошибка slave диска
2-0 011 Ошибка секторного буфера
100 Ошибка контрогльной суммы, не устранимая избыточным кодированием
101 Ошибка микроконтроллера
Разные biosы могут различно реагировать на такую ситуацию, но все варианты сводятся к одному - жесткий диск не определяется и не "чувствуется". Однако на уровне портов ввода/вывода устройство функционирует отлично. Заметим, что существуют такие материнские платы (особенно среди новых моделей), которые, обнаружив ошибку микроконтроллера винчестера, просто отключают питание жесткого диска. Несложно написать для испорченного таким образом винчестера драйвер, который обеспечит работу с диском через высокоуровневый интерфейс int 0x13. Например, следующая процедура обеспечивает посекторное чтение и запись через порты ввода/вывода для первого жесткого диска в chs режиме.
lba mode для упрощения понимания не поддерживается. Необходимую техническую информацию обычно можно найти на сайте производителя вашего жесткого диска.
Этот фрагмент может служить вполне работоспособным ядром для драйвера 16-ти разрядного режима. Для упрощения понимания не включена задержка после каждого обращения к порту. В зависимости от соотношений скорости вашего процессора и контроллера диска эта задержка может и не потребоваться (в противном случае рекомендуется читать регистр статуса ox1f7, дожидаясь готовности контроллера). При этом не следует спешить с заменой такого жесткого диска на новый, с подобной неисправностью можно успешно работать не год и не два. Последнее, правда, лишь при условии, что все используемое программное обеспечение не будет конфликтовать с нестандартным драйвером. Писать драйвер, скорее всего, придется вам самому, поскольку не известно ни одной коммерческой разработки в этом направлении, а все любительские разработки выполнены в основном "под себя". Так, например, драйвер от kpnc hddfix3a поддерживает только винчестеры primary master до пятисот мегабайт и не работает в среде windows 95 (разработан на год раньше ее появления).
Более легкий, но не всегда осуществимый путь - запретить тестирование жестких дисков biosом или, по крайней мере, игнорировать результаты такового. Как это осуществить, можно прочесть в руководстве на материнскую плату (или обратиться за помощью к службе технической поддержки фирмы-производителя, поскольку в руководствах пользователя такие тонкости нередко опускают). Например, попробуйте установить "halt on" в "never" или перезаписать flach bios, модифицировав его так, чтобы тот не выполнял подобную проверку. Если Вам повезет, жесткий диск заработает! Однако иногда все же происходят и аппаратные отказы. Например, у винчестеров фирм samsung и conner отмечены случаи отказа модуля трансляции мультисекторного чтения/записи. Если это не будет обнаружено внутренним тестом устройства, то такой жесткий диск вызовет зависание операционной системы на стадии ее загрузки. Для предотвращения этого достаточно добавить в config.sys ключ multi-track=off и отключить аналогичные опции в blose. При этом, проиграв в скорости, все же можно заставить жесткий диск сносно работать. Понятно, что эксплуатировать восстановленный таким образом диск длительное время нерационально по причине потери быстродействия. Лучше приобрести новый, на который и скопировать всю информацию. С другой стороны, такой жесткий диск все же остается полностью рабочим и успешно может служить, например, в качестве резервного.
На том же connere эпизодически выходит из строя блок управления позиционированием головок, так что последние уже не могут удержаться на дорожке и при обращении к следующему сектору немного "уползают". При этом считывание на выходе дает ошибочную информацию, а запись необратимо затирает соседние сектора. Бороться с этим можно позиционированием головки перед каждой операцией записи/чтения, обрабатывая за один проход не более сектора. Понятно, что для этого необходимо вновь садиться за написание собственного драйвера. К счастью, он достаточно простой (можно использовать аппаратное прерывание от жесткого диска int 0x76 irq14, вставив в тело обработчика команду сброса контроллера. В данном случае подразумевается, что контроллер используемого жесткого диска проводит рекалибровку головки во время операции сброса. Некоторые модели этого не делают. В этом случае придется прибегнуть к операции позиционирования головки (функция ОхС дискового сервиса 0x13). Первые модели от вторых можно отличить временем, требуемым на сброс контроллера. Понятно, что электроника "сбрасывается" мгновенно, а позиционирование головки требует хоть и не большого, но все же заметного времени. Современные модели с поддержкой кэширования этого часто не делают или "откладывают" операции с головкой до первого к ней обращения. Разумеется, в этом случае кэширование придется выключить. Большинство bios позволяет это делать без труда, и нет нужды программировать контроллер самостоятельно. В другом случае вышедший из строя блок позиционирования (трансляции) подводит головки вовсе не к тому сектору, который запрашивался. Например, головки могли физически сместиться с оси, "уползая" в сторону. Разумеется, этот дефект можно скорректировать программно, достаточно проанализировать ситуацию и логику искажения трансляции. Многие модели позиционируют головку, используя разметку диска, что страхует от подобных поломок (к сожалению, сейчас от такого подхода большинство фирм отказались, выигрывая в скорости).
Конечно, все описанные программные подходы в действительности не устраняют неисправность, а только позволяют скопировать с казалось бы уже нерабочего винчестера ценные и еще не сохраненные данные. При этом ни к чему писать универсальный драйвер для win32 и защищенного режима. Вполне можно ограничиться dos-режимом. Для копирования файлов последнего должно оказаться вполне достаточно, конечно за исключением тех случаев, когда диск был отформатирован под ntsf или другую, не поддерживаемую ms-dos, систему. К счастью, для многих из них есть драйверы, которые позволяют "видеть" подобные разделы даже из "голой" ms-dos. В крайнем случае, можно ограничиться посекторным копированием на винчестер точно такой же топологии. При этом совершенно не имеет значения используемая файловая система и установленная операционная система.
Посекторно скопировать диск на винчестер с иной топологией трудно, но возможно. Дело в том, что многие современные контроллеры жестких дисков позволяют пользователю менять трансляцию произвольным образом. Для этого необходимо приобрести винчестер, поддерживающий lba-режим (а какой из современных жестких дисков его не поддерживает?). При этом он может быть даже большего объема, нежели исходный, но это никак не помешает копированию. Другой вопрос, что без переразбиения скопированный таким образом диск не "почувствует" дополнительных дорожек и следует запустить norton disk doctor, который устранит эту проблему.
Достаточно часто нарушается вычисление зон предком-пенсации. Дело в том, что плотность записи на разных цилиндрах не одинакова, так как линейная скорость растет от центра диска к периферии. Разумеется, гораздо легче постепенно уплотнять записи, нежели искать некий усредненный компромисс. На всех существующих моделях плотность записи изменяется скачкообразно и на последних моделях программно доступна через соответствующие регистры контроллера. При этом значения, выставленные в bios, практически любой жесткий диск (с интерфейсом ide) просто игнорирует. Предыдущие модели не имели с этим проблем, и только винчестеры, выпущенные в течение последних двух лет, склонны к подобным поломкам. Скорее, даже не к поломкам, а к сбоям, в результате которых искажается хранимая где-то в недрах жесткого диска информация. Если контроллер позволяет ее программно корректировать, то считайте, что ваш жесткий диск спасен. Конечно, придется пройти сквозь мучительные попытки угадать оригинальные значения, однако это можно делать и автоматическим перебором до тех пор, пока винчестер не начнет без ошибок читать очередную зону. Помните, что любая запись на диск способна нарушить низкоуровневую разметку винчестера, после чего последний восстановлению не подлежит и его останется только выкинуть. Производите только чтение секторов!
Если же контроллер не позволяет программно управлять предкомпенсацией, то еще не все потеряно. Попробуйте перед каждым обращением делать сброс контроллера, а точнее, его рекалибровку (команда ixh). В некоторых случаях это срабатывает, поскольку с целью оптимизации скорости обмена предкомпенсацией обычно управляет не один блок. И, кроме того, иногда контроллер кэша не учитывает предкомпенсацию, а его сброс реализует последнюю аппаратно. К сожалению, это по большей части догадки и результаты экспериментов автора, так как техническая документация фирм-производителей по этому поводу не отличается полнотой, а местами содержит противоречия. Можно испытать и другой способ - попробовать перезаписать микрокод контроллера (команда 92h). Конечно, это доступно только для специалистов очень высокого класса, но ведь доступно! Заметим, что не все контроллеры поддерживают такую операцию. С другой стороны, это и хорошо, так как уменьшает вероятность сбоя и не дает некорректно работающим программам (вирусам в том числе) испортить дорогое устройство. Жесткие диски от samsung обладают еще одной неприятной особенностью - часто при подключении шлейфа "на лету", при включенном питании, они перестают работать. Внешне это выглядит так: индикатор обращения к диску постоянно горит, но диск даже не определяется biosom, или определяется, но все равно не работает. Близкое рассмотрение показывает, что на шине пропадает сигнал готовности устройства. В остальном контроллер остается неповрежденным. Разумеется, если не обращать внимание на отсутствие сигнала готовности, то с устройством можно общаться, делая вручную необходимые задержки (поскольку физическую готовность устройства уже узнать не представляется возможным, приходится делать задержки с изрядным запасом времени). При этом, к сожалению, придется отказаться от dma-mode (а уж тем более ultra-dma) и ограничиться pio 1 (с небольшим риском - pio 2) режимом. Конечно, писать соответствующий драйвер вам придется опять самостоятельно. Разумеется, скорость обмена в режиме pio 1 по сегодняшним меркам совершенно неудовлетворительна и не годится ни для чего другого, кроме как копирования информации со старого на новый винчестер, но некоторые "нечистоплотные" продавцы компьютерной техники как-то ухитряются устанавливать подобные экземпляры на продаваемые машины. Будьте осторожны! Учитывая, что написание подобных драйверов для win32 - трудоемкое занятие, большинство ограничивается поддержкой одной лишь ms-dos, и вовсе не факт, что компьютер, демонстрирующий загрузку win95, содержит исправный, а не реанимированный подобным образом жесткий диск.
У жестких дисков фирмы samsung при подключении "налету" может появляться другой неприятный дефект - при запросах на чтение контроллер периодически "повисает" и не завершает операцию. В результате "замирает" вся операционная система (впрочем, windows nt с этим справляется, но, вероятно, не всегда). На первый взгляд может показаться, что с этого винчестера несложно скопировать ценные файлы, но при попытке выполнить это выясняется, что диск "зависает" все чаще и чаще и копирование растягивается до бесконечности. Однако если выполнить сброс контроллера, то можно будет повторить операцию. Это можно сделать аппарат -но, подпаяв одну кнопку на линию сброса и статуса. Последнее нужно для указания на ошибочную ситуацию, чтобы операционная система повторила незавершенную операцию. Если этого не сделать, то часть секторов не будет реально прочитана (записана). Или можно выполнять сброс автоматически, например, по таймеру. Чтобы не сталкиваться с подобной ситуацией, никогда не следует подсоединять/отсоединять винчестер при включенном питании. Очень часто это приводит к подобным ошибкам, хотя производители других фирм, по-видимому, как-то от этого все же защищаются, ибо аналогичной ситуации у них практически не встречается. Все же не стоит искушать судьбу... От аппаратных ошибок теперь перейдем к дефектам поверхности. Заметим сразу, что последнее встречается гораздо чаще и проявляется намного коварнее. Обычно это ситуация, в которой мало что можно предпринять. Но достичь главной цели - спасти как можно больше уцелевших данных - довольно часто удается. Возьмем такую типичную ситуацию как ошибка чтения сектора. Маловероятно, чтобы сектор был разрушен целиком. Чаще всего "сыплется" только какая-то его часть, а все остальные данные остаются неискаженными. Существуют контроллеры двух типов. Первые, обнаружив расхождение контрольной суммы считанного сектора, все же оставляют прочитанные данные в буфере и позволяют их извлечь оттуда, проигнорировав ошибку чтения. Вторые либо очищают буфер, либо просто не сбрасывают внутренний кэш, в результате чего все равно прочитать буфер невозможно. На практике обычно встречаются последние. При этом сброс кэша можно инициировать серией запросов без считывания полученных данных. Кэш при этом переполняется, и наиболее старые данные будут вытолкнуты в буфер. Остается их только прочесть. Конечно,-это крайне медленно, но, к сожалению, универсальной команды сброса кэша не существует. Разные разработчики реализуют это по-своему (впрочем, иногда это можно найти в документации на чипы, используемые в контроллере). western digital сообщает в техническом руководстве что при длинном чтении сектора без повтора контроль сектора не выполняется и он будет-таки целиком помещен в буфер. Кстати, так и должно быть по стандарту. Увы, остальные фирмы от него часто отклоняются по разным соображениям. Остается определить, какие же из прочитанных данных достоверные, а какие нет (если этого не видно "визуально" - например, в случае текстового или графического файлов)? Разумеется, в подобных рамках задача кажется неразрешимой, но это не совсем так. Дело в том, что можно произвести не только короткое, но и длинное чтение (ox22h req ploin long with retry), для чего можно использовать следующую процедуру. При этом кроме собственно данных читаются также и корректирующие коды. Автоматическая коррекция не выполняется (хотя некоторые контроллеры это реализуют аппаратно и не могут отключить автокоррекцию; в документации этот момент, кстати, не уточняется). Как правило, используются корректирующие коды Рида-Соломона, хотя последнее не обязательно. Математические законы позволяют не только определить место возникновения сбоя, но и даже восстановить несколько бит. При больших разрушениях можно определить только место сбоя, но достоверно восстановить информацию не удается.
Модуляция при записи такова, что все биты, стоящие справа от сбойного, уже не достоверны. Точнее, не все, а только в пределах одного пакета. Обычно за один раз записывается от 3 до 9 бит (необходимо уточнить у конкретного производителя) и содержимое остальных пакетов, как правило, остается достоверным. Самое интересное, что зачастую сбойный пакет можно восстановить методом перебора! При этом можно даже рассчитать, сколько вариантов должно получиться. Учитывая хорошую степень "рассеяния" корректирующих кодов можно сказать, что не очень много. И таким образом можно восстановить казалось бы безнадежно испорченные сектора, а вместе с ними и файлы, расположенные "поверх" последних.
Выше были перечислены наиболее типичные случаи отказов жестких дисков, которые поддавались чисто программному восстановлению если уж не винчестера, то хотя бы хранимых на нем данных. Разумеется, что иногда жесткий диск выходит из строя полностью (например, при неправильно подключенном питании, скачках напряжения) от вибрации или ударов, а то и просто из-за откровенного заводского брака. Есть один старый проверенный способ - найти жесткий диск такой же точно модели и заменить электронную плату. К сожалению, последнее из-за ряда конструктивных особенностей все реже и реже бывает возможно, а уж дефекты поверхности этот способ и вовсе бессилен вылечить. Поэтому, берегите свой жесткий диск и почаще проводите резервное копирование. Помните, что самое дорогое это не компьютер, а хранимая на нем информация!
Потоки всегда создаются в контексте какого-либо процесса, и вся их жизнь проходит только в его границах. На практике это означает, что потоки исполняют код и манипулируют данными в адресном пространстве процесса. Если два или более потока выполняются внутри одного процесса, они делят одно адресное пространство.
Любой поток (thread) состоит из двух компонентов:
объекта ядра, через который ОС управляет потоком. Там же хранится статистическая информация о потоке.
Стека потока, который содержит параметры всех функций и локальные переменные, необходимые потоку для выполнения кода.
Потоки могут выполнять один и тот же код, манипулировать одними и теми же данными, а также совместно использовать описатели объектов ядра, поскольку таблица описателей создается не в отдельных потоках, а в процессах.
Потоки используют намного меньше ресурсов системы, чем процессы, поэтому все задачи, требующие параллельного выполнения нескольких подзадач, стоит решать по возможности с помощью потоков, не прибегая к созданию нескольких процессов.
Обычная структура многопоточного приложения рассчитана на одновременное исполнение нескольких подзадач. Однако стоит помнить, что, создавая многопоточное приложение, нам придется заботиться о сохранности и ликвидности, общих для всех потоков, данных.
Создание потока.
Первичный поток, который присутствует в программе, начинает свое выполнение с главной функции потока типа WinMain.
Для создания вторичного потока необходимо создать и для него входную функцию, которая выглядит примерно так:
Имя у функции вторичного потока, в отличии от первичного, может быть любым однако, при наличии нескольких разных потоков, назвать функции необходимо по-разному, иначе система создаст разные реализации одной и той же функции.
Когда поток закончит свое исполнение, он вернет управление системе, память, отведенная под его стек, будет освобождена, а счетчик пользователей его объекта ядра "поток" уменьшится на 1. Когда счетчик обнулится, этот объект ядра будет разрушен.
Для создания своего потока необходимо использовать функцию CreateThread:
При каждом вызове этой функции система создает объект ядра (поток). Это не сам поток, а компактная структура данных, которая используется операционной системой для управления потоком и хранит статистическую информацию о потоке.
Система выделяет память под стек потока из адресного пространства процесса. Новый поток выполняется в контексте того же процесса, что и родительский поток. Поэтому он получает доступ ко всем описателям объектов ядра, всей памяти и стекам всех потоков в процессе. За счет этого потоки в рамках одного процесса могут легко взаимодействовать друг с другом.
CreateThread - это Windows-функция, создающая поток. Если вы пишете код на С/С++ не вызывайте ее. Вместо нее Вы должны использовать _beginthreadex из библиотеки Visual C++. Почему это так важно в наших следующих выпусках.
Параметры функции CreateThread.
LpThreadAttributes - является указателем на структуру LPSECURITY_ATTRIBUTES. Для присвоения атрибутов защиты по умолчанию, передавайте в этом параметре NULL.
DwStackSize - параметр определяет размер стека, выделяемый для потока из общего адресного пространства процесса. При передаче 0 - размер устанавливается в значение по умолчанию.
LpStartAddress - указатель на адрес входной функции потока.
LpParameter - параметр, который будет передан внутрь функции потока.
DwCreationFlags - принимает одно из двух значений: 0 - исполнение начинается немедленно, или CREATE_SUSPENDED - исполнение приостанавливается до последующих указаний.
LpThreadId - Адрес переменной типа DWORD в который функция возвращает идентификатор, приписанный системой новому потоку.
Завершение потока
Поток можно завершит четырьмя способами:
функция потока возвращает управление (рекомендуемо);
поток самоуничтожается вызовом функции ExitThread;
другой поток процесса вызывает функцию TerminateThread;
завершается процесс, содержащий данный поток.
Все способы , за исключением рекомендуемого, являются нежелательными и должны использоваться только в форс-мажорных обстоятельствах.
Функция потока, возвращая управление, гарантирует корректную очистку всех ресурсов, принадлежащих данному потоку. При этом:
любые С++ объекты, созданные данным потоком, уничтожаются соответствующими деструкторами;
система корректно освобождает память, которую занимал стек потока;
система устанавливает код завершения данного потока. Его функция и возвращает;
счетчик пользователей данного объекта ядра (поток) уменьшается на 1.
При желании немедленно завершить поток изнутри используют функцию ExitThread(DWORD dwExitCode).
При этом освобождаются все ресурсы ОС, выделенные данному потоку, но С С++ ресурсы (например, объекты классов С++) не очищаются. Именно поэтому не рекомендовано завершать поток, используя эту функцию.
Если же вы ее использовали, то кодом возврата потока будет тот параметр, который вы передадите в данную функцию.
Как и для CreateThread для библиотеки Visual C++ существует ее аналог _endthreadex, который и стоит использовать. Об причинах в следующем выпуске.
Если появилась необходимость уничтожить поток снаружи, то это моет сделать функция TeminateThread.
Эта функция уменьшит счетчик пользователей объекта ядра (поток) на 1, однако при этом не разрушит и не очистит стек потока. Стек будет существовать, пока не завершится процесс, которому принадлежит поток. При задачах, постоянно создающих и уничтожающих потоки, это приводит к потере памяти внутри процесса.
При завершении процесса происходит следующее.
Завершение потока происходит принудительно. Деструкторы объектов не вызываются, и т.д. и т.д.
При завершении потока по такой причине, связанный с ним объект ядра (поток) не освобождается до тех пор, пока не будут закрыты все внешние ссылки на этот объект.
В этом разделе вы создадите два новых приложения OLE. Первое - простая программа-сервер OLE, второе - пример простого контейнера OLE. Эти программы предназначены для демонстрации минимальных затрат программирования, необходимых для создания приложений OLE 2.
В любом случае, для создания оболочки программы следует воспользоваться приложением AppExpert. Сначала необходимо сгенерировать основу приложения в AppExpert, затем модифицировать созданные файлы для создания законченного рабочего примера.
При написании своих версий этих программ необходимо иметь в виду несколько моментов. Во-первых, в этой главе приводятся листинги только исходных, немодифицированных файлов.
Во-вторых, CLSID этих программ будет отличаться от CLSID программ, которые вы сгенерируете с помощью AppExpert. Это нормально и даже необходимо, поскольку с помощью CLSID одни серверные приложения в Windows отличаются от других.
В-третьих, эти примеры содержат минимум необходимых средств для того, чтобы начать программировать с OLE. Вы можете использовать эти примеры в качестве начального кода для создания своего действительно полезного сервера или контейнера. В этой главе просто не хватает места для описания реализации функциональных сервера и контейнера - в этом случае вам понадобился бы грузоподъемник, чтобы положить эту книгу на стол.
Создание сервера OLE
Первое приложение OLE в этой главе - сервер. В этом примере вы построите полный сервер - сервер, который может использоваться и как автономное приложение, и как сервер. Создавая автономный сервер (т.е. в виде исполняемой программы .ЕХЕ, а не в виде динамически подключаемой библиотеки DLL), вы упрощаете процесс регистрации сервера в Windows.
Начальный процесс разработки сервера прост. Сначала из интегрированной среды Borland C++ версии 4.5 запустите AppExpert. Задайте каталог и имя вашего проекта. Я поместил свой проект в каталог \BC45\SOURCE\OLESVR. Проект я назвал OLESVR (я всегда называю проекты и каталоги проектов одним и тем же именем, это облегчает запоминание). Ниже приводится последовательность действий, в результате которых был создан проект OLESVR.
Запустите AppExpert. В первом диалоговом окне следует задать имя и каталог проекта. Как уже отмечалось, я использовал OLESVR для задания обоих.
После выбора ОК в диалоговом окне имени и каталога проекта следующий раздел АррЕхреrt - диалоговое окно Application General Options (основные опции приложения). Это диалоговое окно позволяет задать конфигурацию приложения, генерируемого AppExpert. Вам придется модифицировать несколько опций для проекта OLESVR.
Первая опция, которую необходимо изменить, находится в блоке Application: Summary. Замените параметр по умолчанию Multiple document interface на Single document interface. Это изменение согласуется с призывом Microsoft делать ставку на однодокументные приложения для Windows. На рис. 21.1 демонстрируется модифицированный блок Application: Summary.
Второе изменение, которое необходимо внести, - указать AppExpert, что ваша программа будет сервером OLE. Это изменение вносится в пункт Application: OLE 2 Options, имеющий ряд опций OLE 2, которые можно задавать. Поскольку вы создаете сервер OLE, вы будете оперировать только элементами блока группы OLE 2 Server: (поищите его в правой верхней части диалога). Выберите кнопку ячейки пометки Server EXE. На рис. 21.2 демонстрируются изменения, проведенные в пункте Application:OLE 2 Options.
При желании вы можете заполнить элементы пункта Application: Admin Options блока диалога AppExpert. С его помощью вы можете задать в приложении заметку об авторском праве, имя и информацию о версии. Все элементы в Application: Admin Options необязательны, и вы можете их не задавать.
Подпункты пункта Main Window не нуждаются в модификациях, их следует оставить заданными значениями по умолчанию. Для данного приложения нет необходимости менять что-либо в этих подпунктах. Пункт MDI Child/View неприменим для этого проекта, поэтому нет нужды в нем что-нибудь менять.
После задания всех необходимых модификаций следует выбрать кнопку Generate в нижней части блока диалога AppExpert Application General Options. AppExpert запросит у вас подтверждение, действительно ли вы собираетесь создать проект; после принятия подтверждения AppExpert сгенерирует приложение. На рис. 21.3 приводится конечный проект, загруженный в интегрированную среду Borland C++ версии 4.5.
Теперь, когда программа сгенерирована, в нее следует добавить код, задающий функциональность сервера OLE. Необходимо включить код, рисующий изображение, а также провести другие незначительные изменения.
К счастью, помимо Borland C++ версии 4.5 можно воспользоваться программой ClassExpert, что облегчит внесение большей части изменений. Предположим, вы хотите сперва заняться вопросами отображения. Как и в любой созданной с помощью AppExpert программе, основная часть рисования выполняется классом отображения, производным от класса OWL TOleView. Файл, в котором содержится реализация отображения, имеет имя LSVROLVW.CPP. В листинге 21.1 приводится первоначальный файл OSROLVW.CPP.
Листинг (файл реализации класса отображения OLESVR, OSVROLVW.CPP)
Такие типы данных, как int, float, char и long, являются неотъемлемой частью C/C++ и вам не нужно писать никакого кода, чтобы сообщить компилятору о том, что означают эти слова. C/C++ позволяет вам также объ-являть свои собственные, специальные типы данных. В следующем разделе вы узнаете, как объявлять структуры, которые можно отнести к специальным типам данных.
Как вы уже знаете, переменная в C/C++ объявляется следующим образом:
В приведенном операторе iMyVariable объявлена как целая переменная. А вот объявление переменной типа char:
Напишите следующий исходный код:
В коде, который вы написали, имеются два оператора #include:
Файл iostream.h включен в код, поскольку в main(void) используется cout. Файл string.h включается потому, что в main(void) используется функция strcpy() (объявленная в файле string.h). Затем вы объявляете структуру:
Обратите внимание на синтаксис объявления структуры. Оно начинается с ключевого слова struct, за которым следует имя типа-структуры. В этой программе типу структуры присвоено имя MYSTRUCTURE. Затем следует собственно определение структуры, заключенное в фигурные скобки. Не забудьте поставить точку с запятой после закрывающей фигурной скобки. Теперь посмотрите на код внутри фигурных скобок:
Это означает, что MYSTRUCTURE состоит из строки с именем sName и целого с именем iAge, sName и iAge называются элементами данных структуры; Вы объявили их "Внутри" cтруктуры MYSTRUCTURE. Код в main(void) объявляет переменную с именем MyStructure типа MYSTRUCTURE:
Вспомните, что в объявляли переменную iNum1 следующим образом:
Когда вы объявляете MyStructure , которая будет структурой типа MYSTRUCTURE, рассматривайте переменную MyStructure аналогично переменной iNum1. MyStructure - это имя переменной, а ее типом является MYSTRUCTURE точно так же, как типом переменной iNum1 является int. (Обратите внимание, что по традиции имя структуры составлено из символов нижнего регистра или в нем смешаны символы нижнего и верхнего регистров, как, например, в имени MyStructure, но в имени типа структуры используются только символы верхнего регистра, как, например, в MYSTRUCTURE.)
Следующий оператор в main(void) копирует строку 'Andy' в элемент данных MyStructure.sName:
В этом операторе обращение к элементу данных sName записано как MyStructure.sName Следующий оператор присваивает значение 13 элементу данных iAge cтруктуры MyStructure: MyStructure.iAge - 13; Затем выполняется ряд операторов вывода cout:
Сложив все вместе, мы видим, что программа MyStruct выводит сообщение My name is Andy and I am 13 years old. (Меня зовут Andy и мне 13 лет)
В состав библиотеки MFC входит ряд классов, представляющих стандартные диалоговые панели. Эти классы позволяют легко реализовать такие часто используемые операции, как открытие и сохранение файла, выбор цвета, выбор шрифта и т.д. Все эти классы наследуются от CCommonDialog, который в свою очередь является производным по отношению к базовому классу CDialog.
Приведем классы стандартных диалоговых панелей и их назначение:
CColorDialog - Панель для выбора цвета
CFileDialog - Панель выбора файлов для открытия и сохранения на диске
CFindReplaceDialog - Панель для выполнения операции поиска и замены
CFontDialog - Панель для выбора шрифта
CPrintDialog - Панель для вывода документа на печать
CPageSetupDialog - Панель выбора формата документа
COleDialog - Панель для управления технологией OLE
Классы, управляющие стандартными диалоговыми панелями, определены в файле afxdlgs.h. Поэтому при использовании этих классов в приложении необходимо включить этот файл в исходный текст при помощи директивы #include.
Панель выбора цвета (класс CColorDialog)
Чтобы отобразить на экране стандартную диалоговую панель выбора цвета, надо создать объект класса CColorDialog, а затем вызвать метод DoModal. При создании объекта класса СColorDialog используется следующий конструктор:
Все параметры конструктора необязательны, однако в некоторых случаях использование этих параметров может помочь.
Первый параметр clrInit позволяет указать цвет, выбранный по умолчанию сразу после открытия диалоговой панели. Если параметр не будет указан, в качестве цвета, выбранного по умолчанию, будет использоваться черный цвет.
Параметр dwFlags содержит набор флагов, управляющих диалоговой панелью выбора цвета. При помощи него блокировать или разрешать работу некоторых элементов управления диалоговой панели выбора цвета. Если при создании объекта класса CColorDialog не указать параметр dwFlags, тем не менее можно выполнить настройку диалоговой панели, обратившись непосредственно к элементу m_cc данного класса. Параметр dwFlags, указанный в конструкторе, используется для инициализации m_cc. Изменения в элемент m_cc должны быть внесены до того, как панель будет отображаться на экране.
Последний параметр pParentWnd можно использовать, чтобы указать родительское окно диалоговой панели.
Методы класса CСolorDialog
Чтобы вывести диалоговую панель выбора цвета на экран, необходимо использовать метод DoModal. После отображения панели на экране пользователь может выбрать из нее цвет и нажать кнопки OK или Cancel для подтверждения выбора цвета или отказа от него. Когда диалоговая панель закрывается, метод DoModal возвращается значения IDOK и IDCANCEL, в зависимости от того, какую кнопку нажал пользователь:
На экране появится стандартная диалоговая панель выбора цвета Color. В верхней половине диалоговой панели расположены 48 прямоугольников, имеющих различные цвета. Они представляют так называемые основные цвета (Basic colors). Можно выбрать один из этих цветов и нажать кнопку OK. После того, как диалоговая панель закрыта (метод DoModal завершил свою работу), можно воспользоваться методами класса CColorDialog, чтобы узнать цвета, выбранные пользователем.
Для определения цвета, выбранного пользователем, можно обратиться к методу GetColor класса CColorDialog. Данный метод возвращает значение COLORREF, соответствующее выбранному цвету.
Если пользователю недостаточно основных цветов, представленных в диалоговой панели Color, он может выбрать до 16 дополнительных цветов. Для этого он должен нажать кнопку DefineCustom Colors. Диалоговая панель изменит свой внешний вид - появятся дополнительные органы управления, позволяющие выбрать любой из 16 777 216 цветов. Когда цвет выбран, нужно нажать кнопку Add Custom Colors. Выбранный цвет будет добавлен к дополнительным цветам (Custom colors) - один из свободных прямоугольников окрасится соответствующим цветом.
При помощи метода GetSavedCustomColors класса CColorDialog можно определить дополнительные цвета, выбранные пользователем в диалоговой панели Color. Этот метод возвращает указатель на массив из 16 элементов типа COLORREF. Каждый элемент массива описывает один дополнительный цвет.
Когда диалоговая панель Color отображается приложением первый раз, все прямоугольники, отображающие дополнительные цвета, имеют белый цвет. Дополнительные цвета, выбранные пользователем, сохраняются во время работы приложения. После перезапуска приложения дополнительные цвета сбрасываются.
Панель выбора файлов (класс CFileDialog)
Среди стандартных диалоговых панелей, для которых в библиотеке MFC создан специальный класс, есть панели для работы с файловой системой - Open и Save As. Диалоговая панель Open позволяет выбрать один или несколько файлов и открыть их для дальнейшего использования. Диалоговая панель Save As позволяет выбрать имя файла для записи в него документа.
Для управления диалоговыми панелями Open и Save As предназначен один класс CFileDialog. Рассмотрим конструктор класса CFileDialog более подробно:
Объекты класса CFileDialog представляют диалоговые панели Open или Save As в зависимости от параметра bOpenFileDialog. Если параметр bOpenFileDialog содержит значение TRUE, то создается объект, управляющий диалоговой панелью Open, а если FALSE - диалоговой панелью Save As.
Параметр bOpenFileDialog является единственным обязательным параметром, который необходимо указать. Остальные параметры конструктора класса CFileDialog задают различные режимы работы панели и могут не указываться.
Чтобы создать объект класса CFileDialog , представляющий диалоговую панель для открытия файлов (mFileOpen), и объект, представляющий диалоговую панель для сохранения файлов (mFileSaveAs), можно воспользоваться следующими вызовами конструктора класса:
Во многих случаях имена файлов, которые нужно открыть или закрыть, имеют определенное расширение. Параметр lpszDefExt позволяет задать расширение файлов, используемое по умолчанию. То есть, если пользователь при определении имени файла не укажет расширение, имени файла автоматически присваивается расширение, принятое по умолчанию. Если при определении свойств диалоговой панели программист присвоит параметру lpszDefExt значение NULL, то расширение файлов должно задаваться пользователем явно.
В некоторых случаях требуется, чтобы диалоговые панели отображались с уже выбранным именем файла. Чтобы указать имя файла, используемое по умолчанию, применяется параметр lpszFileName. Если параметр lpszFileName имеет значение NULL, данная возможность не реализуется.
С помощью флага dwFlags можно изменить внешний вид и некоторые другие характеристики стандартных диалоговых панелей класса CFileDialog. В него можно записать комбинацию флагов, управляющих различными характеристиками этих панелей. Например, флаг OFN_HIDEREADONLY означает, что из диалоговой панели удаляется переключатель "Read Only", а флаг OFN_OVERWRITEPROMPT (используемый для панели Save As) - что необходимо выводить диалоговую панель с предупреждением, если пользователь выбирает для сохранения имя уже существующего файла.
Диалоговые панели выбора файлов обычно имеют список так называемых фильтров, включающих названия типов файлов и расширения имен файлов данного типа. Выбрав фильтр, пользователь указывает, что он желает работать только с файлами определенного типа, имеющими соответствующее расширение. Файлы с другими расширениями в диалоговых панелях не отображаются.
Список фильтров можно указать через параметр lpszFilter. Одновременно можно указать несколько фильтров. Каждый фильтр задается двумя строками - строкой, содержащей имя фильтра, и строкой, в которой перечислены соответствующие ему расширения имен файлов. Если одному типу соответствует несколько расширений, они разделяются символом ;. Строка, содержащая имя фильтра, отделяется от строки с расширениями файлов символом |. Если используется несколько фильтров, то они также отделяются друг от друга символом |. Например, в качестве строки, задающей фильтры, можно использовать строку вида:
Диалоговые панели, представленные объектами класса CFileDialog, могут иметь или не иметь родительского окна. Чтобы указать родительское окно, нужно передать конструктору CFileDialog указатель на него через параметр pParentWnd.
Методы класса CFileDialog
Создание объекта класса CFileDialog еще не вызывает отображения соответствующей диалоговой панели. Для этого необходимо воспользоваться методом DoModal класса CFileDialog.При вызове метода DoModal для ранее созданного объекта класса CFileDialog на экране открывается соответствующая диалоговая панель. После того, как пользователь завершает работу с диалоговой панелью, метод DoModal вернет значение IDOK или IDCANCEL в случае успешного завершения и нуль - в случае возникновения ошибок:
После того, как пользователь закроет диалоговую панель и метод DoModal вернет управление, можно воспользоваться другими методами класса CFileDialog , чтобы определить имена выбранных файлов:
GetPathName - Определяет полный путь файла
GetFileName - Определяет имя выбранного файла
GetFileExt - Определяет расширение имени выбранного файла
GetFileTitle - Позволяет определить заголовок выбранного файла
GetNextPathName - Если диалоговая панель позволяет выбрать сразу несколько файлов, то этот метод можно использовать для определения полного пути следующего из выбранных файлов
GetReadOnlyPref - Позволяет узнать состояние атрибута "только для чтения" (read-only) выбранного файла
GetStartPosition - Возвращает положение первого элемента из списка имен файлов
Наиболее важный метод - GetPathName. Он получает полный путь файла, выбранного из диалоговых панелей Open или Save As. Если диалоговая панель позволяет выбрать сразу несколько файлов, тогда метод GetPathName возвращает массив строк, состоящий из нескольких строк, заканчивающихся двоичным нулем. Первая из данных строк содержит путь к каталогу, в котором расположены выбранные файлы, остальные строки содержат имена выбранных файлов. Выделение строки, содержащей путь к каталогу, проблем не вызывает, а чтобы получить имена выбранных файлов, необходимо воспользоваться методами GetStartPosition и GetNextPathName.
[pagebreak]
Метод GetStartPosition возвращает значение типа POSITION. Оно предназначено для передачи методу GetNextPathName и получения очередного имени выбранного файла. Если пользователь не выбрал ни одного файла, метод GetStartPosition возвращает значение NULL. Значение, полученное этим методом, следует записать во временную переменную типа POSITION и передать ссылку на нее методу GetNextPathName. Метод GetNextPathName вернет полный путь первого из выбранных в диалоговой панели файлов и изменит значение переменной pos, переданной методу по ссылке. Новое значение pos можно использовать для последующих вызовов метода GetNextPathName и получения путей всех остальных выбранных файлов. Когда метод GetNextPathName вернет имена всех выбранных файлов, в переменную pos записывается значение NULL.
В панелях Open и Save As имеется переключатель "ReadOnly". По умолчанию этот преключатель не отображается. Если есть необходимость воспользоваться этим переключателем, то нужно отказаться от использования флага OFN_HIDEREADONLY.
Метод GetReadOnlyPref позволяет определить положение переключателя "ReadOnly". Если переключатель включен, то метод GetReadOnlyPref возвращает ненулевое значение. В противном случае GetReadOnlyPref возвращает нуль.
Панель выбора шрифта (класс CFontDialog)
Стандартная диалоговая панель Font предназначена для выбора шрифта. Эта панель отображает список шрифтов, установленных в системе, и позволяет выбрать название шрифта, его начертание и другие параметры.
Для управления диалоговой панелью Font в библиотеку классов MFC включен класс CFontDialog. Методы этого класса можно использовать для отображения панели Font и определения характеристик шрифта, выбранного пользователем. Конструктор класса CFontDialog:
Все параметры конструктора являются необязательными. Настройка стандартной панели выбора шрифта, которая выполняется конструктором класса CFontDialog по умолчанию, удовлетворяет большинству пользователей.
Параметр lplfInitial является указателем на структуру LOGFONT, описывающую логический шрифт. Если этот параметр используется, то в диалоговой панели по умолчанию будет выбран шрифт, наиболее соответствующий шрифту, описанному в структуре LOGFONT.
Параметр dwFlags задает набор флагов, управляющий различными режимами работы панели. Например, флаг CF_EFFECTS позволяет пользователю создавать подчеркнутые и перечеркнутые буквы, определять цвет букв, а флаг CF_SCREENFONTS - разрешает выбирать только экранные шрифты.
Через параметр pdcPrinter можно передать конструктору контекст отображения принтера, шрифты которого будут представлены в диалоговой панели Font. Данный параметр используется только в том случае, если в параметре dwFlags указаны флаги CF_PRINTERFONTS или CF_BOTH.
Через параметр pParentWnd можно указать родительское окно для диалоговой панели Font.
Методы класса CFontDialog
Для отображения диалоговой панели Font предназначен виртуальный метод DoModal. Если пользователь выбрал шрифт и нажал кнопку OK, метод DoModal возвращает идентификатор IDOK, если пользователь отменил выбор шрифта, метод DoModal возвращает идентификатор IDCANCEL:
Остальные методы класса предназначены для определения характеристик выбранного пользователем шрифта.
Метод GetCurrentFont позволяет сразу определить все характеристики выбранного шрифта, записав их в структуру LOGFONT.
Остальные методы класса позволяют определить только отдельные характеристики выбранного шрифта:
GetFaceName - Возвращает имя выбранного шрифта
GetStyleName - Возвращает имя стиля выбранного шрифта
GetSize - Возвращает размер выбранного шрифта
GetColor - Возвращает цвет выбранного шрифта
GetWeight - Возвращает плотность выбранного шрифта
IsStrikeOut - Определяет, является ли шрифт выделенным перечеркнутой линией
IsUnderline - Определяет, является ли шрифт выделенным подчеркиванием
IsBold - Определяет, является ли шрифт жирным
IsItalic - Определяет, является ли шрифт наклонным
Панель для вывода документов на печать (класс CPrintDialog)
Класс CPrintDialog можно использовать для создания двух видов диалоговых панелей, предназначенных для печати документов и выбора форматов документов. Кроме класса CPrintDialog можно также использовать класс CPageSetupDialog. Он позволяет создать диалоговую панель для выбора формата документа, имеющую несколько иной вид.
В приложениях, подготовленных с использованием средств MFC AppWizard и построенные по модели документ-облик, по умолчанию встроена возможность вывода редактируемого документа на печать.
В меню File такого приложения находятся три строки (Print, Print Preview и Print Setup), которые управляют процессом печати документов, подготовленных в приложении. Чтобы распечатать документ, достаточно выбрать из меню File строку Print. На экране появится диалоговая панель Print. В ней можно выбрать печатающее устройство для печати документов (группа Name), указать, будет печататься весь документ либо его часть (группа Print range), а также сколько копий документа будет напечатано (группа Copies). Также можно настроить различные характеристики печатающего устройства, если нажать кнопку Properties в группе Printer.
Если требуется определить только печатающее устройство и формат документа, из меню File следует выбрать строку Printer Setup. В группе Printer можно указать печатающее устройство и настроить его соответствующим образом. Группа Paper задает формат бумаги и режим подачи бумаги в печатающее устройство. Группа Orientation включает только один переключатель, определяющий ориентацию бумаги. Он принимает положение Portrait для вертикальной ориентации изображения на бумаге (режим "портрет") или Landscape для горизонтальной ориентации изоборажения на бумаге (режим "ландшафт").
Строка Print Preview меню File выбирается для предварительного просмотра документа перед печатью. При этом главное окно приложения изменит свой внешний вид и можно будет просмотреть, как будет выглядеть документ после печати.
Если не требуется выполнять специфическую обработку документа перед печатью, то вряд ли понадобится самостоятельное добавление программного кода, отвечающего за процесс печати. Просто следует отметить, что процедура создания панелей, связанных с печатью документа, практически ничем не отличается от создания выше описанных стандартных диалоговых панелей.
Панель для выполнения поиска и замены (класс CFindReplaceDialog)
Класс CFindReplaceDialog предназначен для управления диалоговыми окнами Find и Replace. Диалоговая панель Find используется для поиска известных строк в документе приложения, а панель Replace позволяет замену одной строки на другую.
Важным отличием диалоговых панелей Find и Replace от других стандартных диалоговых панелей является то, что они представляют собой немодальные диалоговые панели. Поэтому процесс создания этих панелей значительно отличается от процесса создания стандартных панелей для выбора цвета, шрифта и имен файла.
Данная публикация предназначена для тех кто делает первые шаги в PHP-программировании.
В статье приводятся примеры часто используемых методов работы с текстом.
После каждого примера идет краткое описание используемых функций.
Данная публикация предназначена для тех кто делает первые шаги в PHP-программировании. В статье приводятся примеры часто используемых методов работы с текстом. После каждого примера идет краткое описание используемых функций, описания взяты из официального руководства PHP. Примеры будут пополнятся по мере поступления вопросов от читателей.
Урок №1
Заменяем {text}, например на слово "студёную", строгий регистр, т.е. заменится только {text}, но не {TexT}:
str_replace (search, replace, subject)
Эта функция возвращает строку или массив со всеми вхождениями search в subject, заменёнными данным значением replace.
Урок №2
Заменяем "летнюю", например на слово "зимнюю", нестрогий регистр, т.е. заменится "летнюю", "ЛЕТНЮЮ", "Летнюю", "леТНюю" и т.д.
preg_replace (pattern, replacement, subject)
Эта функция выполняет поиск и замену регулярного выражения.
Ищет в subject совпадения с pattern и замещает их replacement, где pattern - это регулярное выражение, с которыми мы познакомся позже.
Урок №3
Считываем первые 5 символов из текста:
substr (string, start [, length])
Substr возвращает часть строки string, специфицированную параметрами start и length.
Если start положительный, возвращаемая строка начинается со start'овой позиции в string, отсчитываемой от нуля. Например, в строке 'abcdef' символ в позиции 0 это 'a', символ в позиции 2 это 'c', и так далее.
Урок №4
Считываем последние 5 символов из текста:
Урок №5
Удаляем первые 5 символов из текста:
Урок №6
Удаляем последние 5 символов из текста:
Урок №7
Считываем символы с 3-го по 7-ой:
Урок №8
Заменяем все буквы в тексте на маленькие:
strtolower (string)
Возвращает string со всеми алфавитными символами, конвертированными в нижний регистр.
Урок №9
Заменяем все буквы в тексте на большие:
string strtoupper (string)
Возвращает string со вмеси алфавитными символами, конвертированными в верхний регистр.
Урок №10
Меняем все буквы в тексте на маленькие и делаем самую первую букву заглавной:
ucfirst (string)
Возвращает строку с первым символом в верхнем регистре, если это алфавитный символ.
Урок №11
Замена нескольких пробелов на один:
Урок №12
Удаление лишних пробелов по левому и правому краю текста:
trim (string)
Эта функция возвращает строку с вырезанными в начале и конце строки string пробелами.
Урок №13
Удаление лишних пробелов по левому краю текста:
ltrim (string)
Эта функция возвращает строку с вырезанными пробелами в начале string.
Урок №14
Удаление лишних пробелов по правому краю текста:
rtrim (string)
Эта функция возвращает строку с вырезанными пробелами в конце string.
Урок №15
Удаление всех тэгов:
strip_tags (str [, allowable_tags])
Эта функция пытается вернуть строку str с вырезанными тэгами HTML и PHP. Выдаёт ошибку с предупреждением в случае наличия неполных или ложных тэгов.
Вы можете использовать необязательный второй параметр для специфицирования тэгов, которые не должны вырезаться.
Урок №16
Удаление всех тэгов, кроме <b> и <i>:
Урок №17
Проверяем, есть ли в тексте слово "разогнём", нестрогий регистр, т.е. ищется и "РаЗогНЁМ", и "РАЗОГНЁМ" и "разогнём" и т.д.:
preg_match (pattern, subject)
Ищет в subject совпадения с регулярным выражением, заданным в pattern.
Урок №18
Проверяем, есть ли в тексте слово "надо", строгий регистр, т.е. ищется только слово "надо":
strstr (haystack, needle)
Возвращает часть строки haystack от первого вхождения needle до конца haystack.
Если needle не найден, возвращает FALSE (ложь).
Урок №19
Считываем первые 6 слов из текста:
explode (separator, string)
Возвращает массив строк, каждая из которых является подстрокой строки string и сформирована путём разделения строки по границам образованными сепаратором строки separator.
Операция .= добавляет к строковой переменной новые символы.
Урок №20
Конвертируем текст с кодировком windows-1251 в кодировку koi8-r:
convert_cyr_string (str, from, to)
Эта функция возвращает данную строку, конвертированную из одного набора символов кириллицы в другой.
Аргументы from и to это односимвольные аргументы, представляющие исходный и целевой наборы кириллицы. Поддерживаются типы:
k - koi8-r
w - windows-1251
i - iso8859-5
a - x-cp866
d - x-cp866
m - x-mac-cyrillic
Урок №21
Используем в качестве разделителя "||" (две вертикальных черты):
Урок №22
Заменяем <b> на <b> и </b> на </b>:
htmlspecialchars (string string)
Некоторые символы имеют в HTML специальное значение и должны быть представлены мнемониками HTML для сохранения своего значения.
Эта функция возвращает строку с выполненной конвертацией.
Используется для того, чтобы всякие нехорошие человеки не написали в вашей гостевой (например) нежелательных тегов, испортив тем самым её внешний вид.
Хотя эти и не единственное где можно применить данную функцию, мы поговорим об этом при случае 1
& (амперсанд) становится &
" (двойная кавычка) становится "
' (одинарная кавычка) становится '
< (меньше) становится <
> (больше) становится >
В состав версий Windows Server 2003 Service Pack 1 (SP1) и Windows XP SP2 входит размещаемый в системе брандмауэр Windows Firewall, гораздо более эффективный, чем его предшественник, Internet Connection Firewall (ICF). В отличие от ICF, который поставлялся с Windows 2003 и XP, Windows Firewall подходит для развертывания в масштабах предприятия благодаря возможности управлять политиками брандмауэра из единого центра, нескольким интерфейсам настройки и множеству новых функций безопасности. В этой статье я расскажу о том, как лучше подойти к планированию, настройке конфигурации и применению брандмауэра на предприятии.
Подготовительный этап
Важно помнить о выбираемом по умолчанию режиме Windows Firewall. В XP SP2 брандмауэр Windows Firewall активен по умолчанию, а в Windows 2003 SP1 его стандартное состояние — выключенное, если только SP1 не развертывается на системе с запущенным ICF. В этом случае режим брандмауэра не изменяется. Если пакет SP1 размещен на установочном компакт-диске с операционной системой, то Windows Firewall всегда активизируется в режиме включения по умолчанию, когда в процессе установки происходит соединение со службой Windows Update для получения последних обновлений. Поэтому, если развернуть XP SP2, не уделяя должного внимания настройке Windows Firewall, и опрометчиво принять стандартные параметры, можно лишиться доступа к инструментарию для дистанционного управления настольными компьютером. Если администратор не готов использовать Windows Firewall или работает с брандмауэром независимого поставщика, то можно спокойно отключить Windows Firewall и развернуть SP2 без него.
Если для аутентификации пользователей применяется Active Directory (AD), а настольные компьютеры являются членами домена с соответствующими учетными записями, то самый простой способ настроить Windows Firewall — задействовать объекты групповой политики Group Policy Object (GPO). После установки XP SP2 на настольных компьютерах параметры брандмауэра настраиваются при перезагрузке машин и каждый раз при обновлении политики. Если используется продукт управления каталогами независимого поставщика или на предприятии имеются не управляемые администратором компьютеры, которые не входят в состав домена AD, то для настройки Windows Firewall вместо объектов GPO можно использовать пакетные файлы или сценарии. Настроить конфигурацию брандмауэра можно и в ходе автоматизированных или интерактивных процедур установки XP SP2.
Настройка Windows Firewall
Приступая к настройке конфигурации Windows Firewall, следует помнить об основных характеристиках брандмауэра:
* Windows Firewall не выполняет фильтрации исходящего трафика, то есть не ограничивает его. Если предприятие нуждается в фильтрации исходящего трафика, следует использовать брандмауэр независимого поставщика.
* Возможности Windows Firewall шире, чем у ICF: в Windows Firewall можно настраивать исключения, чтобы разрешить входящий трафик с учетом не только транспортного протокола (TCP или UDP) и номера порта, но и приложения (например, одноранговой программы обмена файлами).
* Можно уточнить исключения по области действия, то есть разрешить соединения от всех компьютеров, от компьютеров в указанных подсетях, только из локальной подсети или от компьютеров с определенными IP-адресами.
* Windows Firewall активизируется по умолчанию для всех сетевых соединений, но для каждого сетевого интерфейса можно настроить разные правила брандмауэра.
* Настраивать Windows Firewall может только администратор. Если управление брандмауэром централизованное (через AD или GPO), то можно лишить локальных администраторов права изменять параметры.
* С помощью Windows Firewall можно ограничить трафик IPv4 и IPv6.
* Windows Firewall располагает двумя профилями, Domain и Standard. Профиль Domain активизируется, если компьютер подключен к сети с контроллерами домена (DC), членом которого он является. Профиль Standard применяется, если компьютер подключен к другой сети, например общедоступной беспроводной сети или скоростному соединению в номере отеля. Рекомендуется настроить профили Domain и Standard для серверов и настольных компьютеров, а также для ноутбуков.
Прежде чем настраивать конфигурацию Windows Firewall, следует провести инвентаризацию приложений на рабочих станциях и серверах, которые могут организовать оконечные точки соединений; портов, используемых приложениями и операционной системой; источников трафика для каждой хост-машины с Windows Firewall. Для мобильных систем, таких как ноутбуки, в ходе инвентаризации следует учитывать различную природу сетевого трафика при подключении системы к корпоративной сети с контроллерами домена и активным профилем Domain брандмауэра Windows Firewall, в отличие от системы, подключенной к общедоступной сети с активным профилем Standard. Нужно всегда выбирать профиль Standard и разрешать только необходимый входящий трафик через брандмауэр, чтобы свести к минимуму угрозу для подключенных к сети мобильных машин.
В Windows Firewall определены четыре встроенные административные службы, представляющие типовые исключения для любой политики брандмауэра: File and Print, Remote Administration, Remote Desktop и Universal Plug and Play (UpnP). Remote Administration обеспечивает управление системой через типовые административные интерфейсы и подсистемы, такие как Windows Management Instrumentation (WMI) и вызов удаленных процедур (remote procedure call — RPC). Remote Desktop позволяет подключиться к одной системе с другой через RDP и используется при запросе на поддержку Remote Assistance. Администраторы часто применяют Remote Desktop для подключения к удаленным серверам, которыми они управляют. Протокол UpnP обеспечивает корректную работу устройств, которые обнаруживают и динамически настраивают друг друга с учетом активных приложений и служб. Типовой пример использования UpnP — взаимодействие XP с UPnP-совместимым широкополосным маршрутизатором при запуске MSN Messenger, в результате которого аудио и видеосоединения устанавливаются через встроенный брандмауэр маршрутизатора.
При настройке профилей Domain и Standard брандмауэра Windows Firewall рекомендуется задать исключения для конкретных приложений. Благодаря исключению приложение сможет установить любые нужные оконечные точки и принимать через них трафик. Существуют две веские причины, чтобы назначать исключения для приложений. Во-первых, проще определить и описать приложения, нежели отдельные используемые ими порты, особенно потому, что порты, используемые многими приложениями, документированы не полностью или назначаются динамически. Во-вторых, многие приложения, в том числе несанкционированные, используют те же порты, что и легальные приложения; указав приложения вместо портов, можно лишить неутвержденные приложения возможности установить оконечные точки соединения. Всегда, когда возможно, рекомендуется не делать исключений для профиля Standard и отклонять все входящие соединения.
Windows Firewall для серверов
Microsoft не дает специальных рекомендаций по настройке Windows Firewall для серверов. По умолчанию брандмауэр блокирован, если только пакет Windows Server 2003 SP1 не устанавливается на системе с активным ICF, однако брандмауэром можно воспользоваться для укрепления безопасности сервера Windows 2003. Применяя брандмауэр на сервере, следует помнить, что серверы по своей природе служат для размещения приложений и служб, с которыми устанавливают соединения приложения и службы на других серверах, настольных компьютерах и ноутбуках. Прежде чем активизировать Windows Firewall на сервере, следует продумать его конфигурацию.
Для некоторых серверов настроить Windows Firewall не составляет труда. Например, неуправляемому автономному Web-серверу в демилитаризованной зоне (DMZ) требуется принимать только входящие соединения через порт 80/TCP (HTTP) или 443/TCP (HTTP Secure-HTTPS), если установлен сертификат и активизирована защита SSL (Secure Sockets Layer).
На сервере с двумя или несколькими интерфейсами, из которых один интерфейс подключен к Internet, а другие — к корпоративным сетям, можно активизировать Windows Firewall, а затем отключить его на всех интерфейсах, кроме Internet, и настроить брандмауэр, разрешив только необходимые входящие соединения на интерфейсе Internet.
В простых файл- и принт-серверах корпоративной сети, входящих в состав домена, можно активизировать Windows Firewall и задействовать встроенную службу File and Printer Sharing для подключения пользователей к этим серверам. Можно также использовать Windows Firewall для защиты сервера, службы которого прослушивают известные порты, например сервера базы данных Microsoft SQL Server 2000. Для этого следует разрешить в брандмауэре трафик через соответствующие порты.
Настроить Windows Firewall на сервере можно с помощью мастера Security Configuration Wizard (SCW). SCW, факультативный компонент Windows 2003 SP1, уменьшает поверхность атаки сервера, задавая роль или роли для сервера. SCW содержит ролевую информацию для DC и других серверов инфраструктуры; он блокирует необязательные службы и ограничивает входящий трафик через Windows Firewall.
Windows Firewall не следует размещать на некоторых серверах, в том числе контроллерах домена AD и некоторых серверах приложений, которые прослушивают большой диапазон портов или используют динамические порты, таких как серверы Exchange Server 2003. В последнем случае можно развернуть Windows Firewall, если серверы и клиенты, подключенные к серверам Exchange, входят в состав домена. Брандмауэр настраивается на передачу аутентифицированного трафика IPsec в обход Windows Firewall (этот прием будет рассмотрен ниже), а клиенты настраиваются на использование IPsec.
На многих серверах, в том числе таких, на которых выполняется множество приложений и служб, необходима выборочная настройка Windows Firewall. Требуется указать порты, прослушиваемые приложениями и службами, отбросить необязательные порты и настроить Windows Firewall для необходимых портов. Определить открытые порты и прослушивающие их приложения и службы можно с помощью команды Netstat (netstat.exe), усовершенствованной в последних пакетах обновлений. Указав в командной строке
netstat -a -b
можно увидеть все открытые порты TCP (независимо от состояния) и порты UDP в системе, идентификатор процесса (PID) для каждого активного соединения (образец выходной информации приведен на экране 1). Как уже упоминалось, Windows Firewall можно настроить на разрешение входящего трафика для поименованных приложений, независимо от прослушиваемых ими портов. Единственный недостаток Netstat заключается в том, что команда выдает лишь «моментальный снимок» системы. С ее помощью нельзя идентифицировать приложения, службы и их порты, если эти приложения неактивны в момент запуска Netstat. Чтобы получить достоверную картину, можно сделать несколько снимков в разное время.
Более простая альтернатива Netstat — инструмент Port Reporter, который можно получить по адресу http://support.microsoft.com/?kbid=837243. Программа устанавливается как служба и регистрирует сетевую активность, в том числе подробные сведения об активных программах и службах, и даже учетную запись пользователя, с которой работает приложение или служба. С помощью сопутствующего инструмента Port Reporter Parser (http://www.support.microsoft.com/?kbid=884289) можно извлечь данные из журналов, генерируемых Port Reporter. Правильно настроив и запуская Port Reporter в течение определенного промежутка времени, можно идентифицировать приложения, которые открывают порты сервера и должны быть настроены в Windows Firewall по приложениям или отдельным портам. Длительность применения Port Reporter зависит от приложений и особенностей работы пользователей. Предостережение: Port Reporter может слегка снизить производительность системы, а журналы очень велики. Файлы журналов следует записывать на быстрый диск с достаточным количеством свободного места.
Рекомендуется активизировать функции протоколирования Windows Firewall после завершения настройки серверов. Можно записывать сведения об успешных и неудачных соединениях. Если после настройки и активизации Windows Firewall возникают проблемы при выполнении некоторых приложений, то с помощью информации из журналов можно определить дополнительные порты, которые следует открыть. Для настройки функций протоколирования следует открыть панель управления, запустить утилиту Windows Firewall, щелкнуть на вкладке Advanced, а затем на кнопке Settings в разделе Security Logging. Откроется диалоговое окно Log Settings (экран 2). Журнал Windows Firewall следует сохранять на быстром диске, а максимальный размер журнала должен быть достаточным для записи необходимой информации в течение длительного времени. Проверив корректность настройки Windows Firewall, можно отключить протоколирование.
Экран 2. Настройка протоколирования в Windows Firewall
Windows Firewall можно настроить и таким образом, чтобы передавать аутентифицированный трафик IPsec от доверенных машин в обход брандмауэра. В этот режим можно перевести серверы и рабочие станции, чтобы они пропускали только необходимый клиентский трафик, одновременно обеспечивая неограниченный доступ для администрирования рабочих станций и серверов.
Полная готовность
После завершения подготовки к развертыванию Windows Firewall рекомендуется активизировать брандмауэр сначала для пилотной группы пользователей. Если в процессе пробного развертывания возникнут трудности, следует активизировать режим протоколирования; в журналах содержится информация, которая поможет определить причину проблем. После устранения неполадок и успешного развертывания Windows Firewall брандмауэр станет неоценимым компонентом системы безопасности предприятия.
Волоконная оптика дороже кабелей с медными жилами, но с каждым годом спрос на нее растет. Отчасти это происходит из-за того, что технология монтажа стала намного проще, а стоимость необходимого инструментария постоянно снижается. Без преувеличения можно сказать, что оптическое волокно получило массовое распространение в телекоммуникациях.
Одно из серьезных ограничений в использовании волоконно-оптических кабелей — необходимость особого, аккуратного отношения к их укладке, разделке, соединению и оконцовке, т. е. абсолютно ко всем элементам технического процесса монтажа кабельной линии. Ошибки обходятся весьма дорого — от замены испорченного соединителя до установки соединительной муфты на месте поврежденного кабеля. Тем не менее оптическое волокно активно вытесняет медь не только на магистральных участках сетей связи общего пользования, где почти все новые линии строятся на основе волоконно-оптических линий связи, но даже и на магистральных (вертикальных) участках СКС.
Некоторые особенности работы с волоконно-оптическими кабелями (ВОК) рассматривались в предыдущих номерах, в разделах, посвященных вопросам укладки кабеля. В основном они сводились к набору специальных приемов для захвата кабеля при втягивании в канал, чтобы обеспечить равномерность приложенного тягового усилия, ограничить его максимально допустимым уровнем, а также строго выдержать норму минимального радиуса изгиба. Для успешного выполнения этих задач создан целый набор монтажных приспособлений: кабельные чулки и захваты, электрические и гидравлические тяговые лебедки с электронным управлением и ограничителем усилия, а также защитные устройства, смазка и т. п. «мелочи». Теперь настал черед уделить внимание инструментарию для всех прочих операций.
Основные трудности, которые приходится преодолевать при резке волоконно-оптических кабелей, — броневой покров (стальная лента или стальная проволока) и внутренние силовые элементы (стальной трос). Поскольку оптическое волокно чувствительно к осевым и радиальным деформациям, то волоконно-оптические кабели имеют их в большем количестве, чем медножильные. Это касается не только кабелей для внешней прокладки, но и тех, что предназначены для укладки в зданиях. Правда, последние не всегда содержат силовой элемент из стали. Бронирование, если таковое имеется, осуществляется тонкой стальной или алюминиевой гофрированной фольгой. А так называемые мини-кабели, которые используются для изготовления коммутационных шнуров и выполнения горизонтальных участков СКС, представляют собой одиночное или двойное оптическое волокно в буферном покрытии с одним или двумя защитными слоями полимерной изоляции. Так или иначе, но для большинства волоконно-оптических кабелей недорогие кабелерезы для медных кабелей непригодны. Для них требуется более дорогой инструмент, лезвия которого рассчитаны на резку стали. Впрочем, такой же инструмент необходим и для резки бронированных медножильных.
Первые этапы разделки волоконно-оптических кабелей (удаление верхнего слоя защитных и броневых покровов) выполняются теми же инструментами, что и разделка медножильных кабелей. Никаких особенностей здесь нет — полимерная изоляция и фольга вскрываются резаками, а стальная проволока выкусывается бокорезами. Однако без применения нескольких специальных инструментов не обойтись. Во-первых, это ножницы с керамическими лезвиями или кусачки для удаления нитей из кевлара, которые часто применяются для упрочнения кабеля. Обычные ножницы эти тонкие, гибкие и прочные волокна не режут, а выдавливают или гнут. Во-вторых, это приспособление для снятия полимерной изоляции с мини-кабелей. При выполнении работы не универсальным, а специализированным инструментом риск повреждения оптического волокна существенно снижается, так как его рабочие поверхности имеют фиксированную настройку.
Стоит отметить, что важно хорошо знать конструкцию разделываемого кабеля, так как последний слой защитного покрытия кабеля или изоляцию модулей (групповых элементов, содержащих несколько волокон) нужно удалять с особенной аккуратностью. После удаления всех защитных слоев открывается доступ к одиночным оптическим волокнам в буферном покрытии. На этом сходство заканчивается, и далее работать с волоконно-оптическими кабелями можно только специальным инструментом.
Разделка кабеля может выполняться для оконцовки (монтажа разъемных соединителей) или сращивания (сварки или монтажа неразъемных соединителей).
Разъемные соединители монтируются на мини-кабели или на оптическое волокно в буферном покрытии; для оптического волокна их существует великое множество (ST, SC, SMA, FC, LC, FJ, MT и др.). Некоторые из них выпускаются еще и в нескольких разновидностях, предназначенных для оконцовки различного оптического волокна (многомодового, одномодового, разного диаметра, с различной толщиной оболочки) и отличающихся некоторыми деталями конструкции и технологии монтажа. Такое разнообразие не слишком осложняет работу монтажников. Грамотная техническая политика позволяет резко уменьшить число разновидностей кабелей и соединителей для волоконно-оптических линий связи. Иногда ограничения вытекают из особенностей применяемого оборудования, иногда — оформляются в виде внутреннего стандарта организации. Подобные ограничения и правила просто необходимы, если помнить, что существенная часть достаточно дорогого инструмента и приспособлений предназначена только для оптического волокна или соединителей определенного вида. А в силу высочайших требований к точности обработки и монтажа использование непредусмотренного технологией инструментария почти всегда заканчивается браком в работе. В значительной степени результат зависит и от качества расходных материалов: клеев, растворителей, безворсовых салфеток, шлифовальной и полировальной бумаги.
Итак, после разделки кабеля по шаблону до оптического волокна в буферном покрытии наступает наиболее ответственный момент. С помощью особого инструмента, рассчитанного на оптическое волокно определенного размера, с него удаляют буферное покрытие. Основная проблема — не повредить при этом само волокно, так как при небольшом задире или сколе всю работу придется выполнять еще раз. Поскольку внешне инструменты для этой операции выглядят абсолютно одинаково, производители используют для их маркировки различные цвета.
Затем производится сборка соединителя. Оптическое волокно продевается сквозь отверстие наконечника соединителя и фиксируется с помощью различных видов клея: термоклея (становится пластичным при нагреве), эпоксидного компаунда (полимеризуется благодаря реакции между двумя смешанными компонентами), универсального клея (твердеет после испарения растворителя) или клея с отвердением под воздействием ультрафиолета. Отверстие заполняется клеем с помощью шприца (исключение составляет термоклей, который наносится в процессе производства разъемов). Однокомпонентный клей поставляется уже расфасованным в шприцы, а двухкомпонентный — в отдельной таре. Полученная сборка нагревается в печке (для ускорения процесса отвердения эпоксидного компаунда или разогрева термоклея) или облучается ультрафиолетом.
После склеивания излишки оптического волокна удаляются, а торец сердечника шлифуется и полируется. Для удаления излишков на поверхности волокна резаком (скрайбером) наносится царапина. Резаки могут иметь различный профиль: лезвие (металл, карбид или керамика) либо конус (алмаз или корунд). После нанесения риски волокно отламывается.
Дальнейшая обработка торца выполняется на мате или стекле на нескольких листах наждачной бумаги с убывающим размером абразивного элемента (шлифовальная, полировальная, доводочная). Для фиксации сердечника строго перпендикулярно к поверхности наждака применяется оправка, в которую устанавливается обрабатываемый соединитель. При больших объемах эта операция может быть автоматизирована за счет использования шлифовальной машины.
Качество обработки проверяется с помощью микроскопа. Выпускаемые модели контрольных микроскопов отличаются степенью увеличения и конструкцией. Особенно удобен защитный фильтр для глаз — для блокирования излучения на случай, если оно окажется в подключенном волокне.
Все инструменты для работы с волоконно-оптическими кабелями можно приобрести по отдельности, но чаще всего они поставляются в специально составленных комплектах, куда входит не только инструмент, но и вся необходимая для проведения работ тара, дозаторы, распределители, расходные материалы и защитные средства. Для удобства хранения все это упаковано в органайзер (сумку или чемодан). Восполнение расходных материалов также осуществляется подобранными комплектами.
В зависимости от поставленных задач предлагается как скромный набор минимально необходимых для обработки одного типа оптического волокна средств, так и полный набор для работы с любым оптическим волокном. А вот комплектов, универсальных с точки зрения обрабатываемых разъемных соединителей, очень мало. Объясняется это просто — часть инструмента для их монтажа поставляется только производителями самих соединителей.
Несколько слов тем, кому придется выполнять работы с волоконно-оптическими кабелями на улице. Для защиты от пыли и осадков, а также создания необходимого микроклимата используются теплоизолированные палатки и боксы. Первые легко переносятся и собираются в любом месте; вторые устанавливаются на шасси автомобиля и прицепа.
Модель безопасности Windows XP Professional основана на понятиях аутентификации и авторизации. При аутентификации проверяются идентификационные данные пользователя, а при авторизации - наличие у него прав доступа к ресурсам компьютера или сети. В Windows XP Professional также имеются технологии шифрования, которые защищают конфиденциальные данные на диске и в сетях: например, EFS (Encrypting File System), технология открытого ключа.
Аутентификация
Регистрируясь на компьютере для получения доступа к ресурсам локального компьютера или сети, пользователь должен ввести свое имя и пароль. В Windows XP Professional возможна единая регистрация для доступа ко всем сетевым ресурсам. Таким образом, пользователь может войти в систему с клиентского компьютера по единому паролю или смарт-карте и получить доступ к другим компьютерам домена без повторного ввода идентификационных данных. Главный протокол безопасности в доменах Windows 2000 - Kerberos версии 5. Для аутентификации на серверах под управлением Windows NT 4.0 и доступа к ресурсам доменов Windows NT клиенты Windows XP Professional используют протокол NTLM. Компьютеры с Windows XP Professional, не принадлежащие к домену, также применяют для аутентификации протокол NTLM. Используя Windows XP Professional в сети с активным каталогом (Active Directory), можно управлять безопасностью регистрации с помощью параметров политики групп, например, ограничивать доступ к компьютерам и принудительно завершать сеансы работы пользователей спустя заданное время. Можно применять предварительно сконфигурированные шаблоны безопасности, соответствующие требованиям к безопасности данной рабочей станции или сети. Шаблоны представляют собой файлы с предварительно сконфигурированными параметрами безопасности, которые можно применять на локальном компьютере или импортировать в групповые политики активного каталога. Эти шаблоны используются в неизменном виде или настраиваются для определенных нужд.
Авторизация
Авторизация позволяет контролировать доступ пользователей к ресурсам. Применение списков управления доступом (access control list, ACL) и прав доступа NTFS гарантирует, что пользователь получит доступ только к нужным ему ресурсам, например, к файлам, дискам (в том числе сетевым), принтерам и приложениям. С помощью групп безопасности, прав пользователей и прав доступа можно одновременно управлять безопасностью как на уровне ресурсов, так и на уровне файлов, папок и прав отдельных пользователей.
Группы безопасности
Группы безопасности упрощают управление доступом к ресурсам. Можно приписывать пользователей к группам безопасности, а затем предоставлять этим группам права доступа. Можно добавлять пользователей к группам безопасности и удалять их оттуда в соответствии с потребностями этих пользователей. Оснастка MMC Computer Management позволяет создавать учетные записи пользователей и помещать их в локальные группы безопасности. Можно предоставлять пользователям права доступа к файлам и папкам и определять действия, которые пользователи могут выполнять над ними. Можно разрешить и наследование прав доступа. При этом права доступа, определенные для каталога, применяются ко всем его подкаталогам и находящимся в них файлам. Среди групп безопасности, локальных для домена и компьютера, имеется ряд предварительно сконфигурированных групп, в которые можно включать пользователей.
Администраторы (Administrators) обладают полным контролем над локальным компьютером и правами на совершение любых действий. При установке Windows XP Professional для этой группы создается и назначается встроенная учетная запись Администратор (Administrator). Когда компьютер присоединяется к домену, по умолчанию к группе Администраторы добавляется группа Администраторы домена (Domain Administrators).
Опытные пользователи (Power Users) обладают правами на чтение и запись файлов не только в личных папках, но и за их пределами. Они могут устанавливать приложения и выполнять многие административные действия. У членов этой группы такой же уровень прав доступа, что и у групп Пользователи (Users) и Опытные пользователи (Power Users) в Windows NT 4.0.
Пользователи (Users) в отношении большей части системы имеют только право на чтение. У них есть право на чтение и запись только файлов их личных папок. Пользователи не могут читать данные других пользователей (если они не находятся в общей папке), устанавливать приложения, требующие модификации системных каталогов или реестра, и выполнять административные действия. Права пользователей в Windows XP Professional более ограниченны по сравнению с Windows NT 4.0.
Гости (Guests) могут регистрироваться по встроенной учетной записи Guest и выполнять ограниченный набор действий, в том числе выключать компьютер. Пользователи, не имеющие учетной записи на этом компьютере, или пользователи, чьи учетные записи отключены (но не удалены), могут зарегистрироваться на компьютере по учетной записи Guest. Можно устанавливать права доступа для этой учетной записи, которая по умолчанию входит во встроенную группу Guests. По умолчанию учетная запись Guest отключена. Можно сконфигурировать списки управления доступом (ACL) для групп ресурсов или групп безопасности и по мере необходимости добавлять/удалять из них пользователей или ресурсы, что облегчает управление правами доступа и их аудит. Это также позволяет реже изменять ACL. Можно предоставить пользователям права на доступ к файлам и папкам и указать действия, которые можно выполнять с ними. Можно также разрешить наследование прав доступа; при этом права доступа к некоторой папке применяются и к ее подкаталогам и находящимся в них файлам. При работе с Windows XP Professional в составе рабочей группы или в изолированном режиме вам предоставляются права администратора, и у вас есть все права по отношению ко всем функциям безопасности ОС. Если компьютер под управлением Windows XP Professional включен в сеть, параметры безопасности определяет сетевой администратор.
Политика групп
Параметры политики групп позволяют назначать ресурсам права доступа, а также предоставлять права доступа пользователям. Это нужно для того, чтобы требовать запуска определенных приложений только в заданном контексте безопасности (тем самым снижая риск воздействия на компьютер нежелательных приложений, например, вирусов) и конфигурировать различные права доступа для множества клиентских компьютеров. Можно сконфигурировать права доступа на эталонном компьютере, который будет использован как базовый образ для установки на другие рабочие станции, гарантируя, таким образом, стандартизованное управление безопасностью даже в отсутствие Active Directory. Функции аудита позволяют обнаруживать попытки отключить или обойти защиту ресурсов. Можно задействовать предварительно сконфигурированные шаблоны безопасности, соответствующие требованиям безопасности для данной рабочей станции или сети. Шаблоны безопасности - это файлы с предварительно установленными параметрами безопасности, которые применяют к локальному компьютеру или импортируют в групповые политики активного каталога (Active Directory). Шаблоны безопасности используются в неизменном виде или настраиваются в соответствии с определенными задачами.
Шифрование
EFS (Encrypting File System) позволяет зашифровать данные на жестком диске. Риск кражи портативных компьютеров особенно велик, а с помощью EFS можно усилить безопасность путем шифрования данных на жестких дисках портативных компьютеров компании. Эта предосторожность защищает информацию и идентификационные данные от несанкционированного доступа.
2. Корпоративная безопасность
Windows XP Professional поддерживает ряд функций защиты избранных файлов, приложений и других ресурсов. В их числе списки управления доступом (ACL), группы безопасности и групповая политика, а также средства конфигурирования и управления этими функциями. В совокупности они обеспечивают мощную, но гибкую инфраструктуру управления доступом в корпоративных сетях. Windows XP поддерживает тысячи относящихся к безопасности параметров конфигурации, которые можно применять и по отдельности. В Windows XP также есть предопределенные шаблоны безопасности, обычно используемые без изменений или как основа для особой настройки конфигурации безопасности. Эти шаблоны безопасности применяются при: создании ресурса, такого как общая папка или файл; при этом вы вправе воспользоваться заданными по умолчанию ACL или настроить их в соответствии со своими потребностями; распределении пользователей по стандартным группам безопасности, таким как Users, Power Users и Administrators, и принятии заданных по умолчанию параметров ACL; использовании предоставляемых ОС шаблонов групповой политики - Basic (основной), Compatible (совместимый), Secure (безопасный) или Highly Secure (высокобезопасный). Каждая из особенностей системы безопасности Windows XP - списки ACL, группы безопасности и групповая политика - имеет параметры по умолчанию, которые разрешается изменять в соответствии с требованиями организации. Предприятия также вправе применять соответствующие средства для реализации и настройки управления доступом. Многие из этих средств, такие как оснастки Microsoft Management Console, представляют собой компоненты Windows XP Professional, другие поставляются в составе комплекта ресурсов Windows XP Professional Resource Kit.
3. Управляемый доступ к сети
Windows XP содержит встроенную подсистему безопасности для предотвращения вторжений. Ее работа базируется на ограничении прав любого, кто пытается получить доступ к компьютеру из сети до привилегий гостевой учетной записи. Взломщикам или вообще не удастся получить доступ к компьютеру и перебором паролей получить дополнительные привилегии, или они получат только ограниченный гостевой доступ.
Управление сетевой проверкой подлинности
Все большее число систем под управлением Windows XP Professional подключается к Интернету напрямую, а не через домены. Поэтому продуманная система управления доступом (в том числе устойчивыми паролями и разрешениями, сопоставленными учетными записями) важна как никогда ранее. Для обеспечения безопасности следует избегать анонимных параметров управления доступом, обычно связанных с открытыми средами, подобными Интернету. Вот почему в Windows XP Professional по умолчанию все пользователи, вошедшие по сети, работают под учетной записью Guest. Это исключает для злоумышленника возможность войти в систему через Интернет под локальной учетной записью Администратор (Administrator), у которой нет пароля.
4. Упрощенное совместное использование ресурсов
Модель совместного использования и безопасности для локальных учетных записей позволяет выбрать модель безопасности на основе применения исключительно гостевой учетной записи (Guest) либо классическую (Classic) модель безопасности. В гостевой модели при любых попытках войти в систему локального компьютера через сеть применяется только гостевая учетная запись. В классической модели пользователи при доступе через сеть входят в систему локального компьютера под своими учетными записями. На компьютерах в составе домена эта политика не применяется, а по умолчанию используется гостевая учетная запись. Если гостевая учетная запись существует и ей назначен пустой пароль, сетевые пользователи смогут войти в систему и получить доступ к любому ресурсу, разрешенному для доступа учетной записи Guest. При включенной политике "force network logons using local accounts to authenticate as Guest" локальные учетные записи должны аутентифицироваться как учетная запись Guest при доступе через сеть. Эта политика служит для ограничения разрешений локальной учетной записи, обращающейся к системным ресурсам на другом сетевом компьютере. Кроме того, на компьютерах, поддерживающих модель упрощенной защиты общих ресурсов, диалоговое окно Security Properties заменено упрощенным диалоговым окном Shared Documents Properties.
5. Ограничение на учетные записи с пустыми паролями
Для безопасности пользователей, не защитивших свою учетную запись паролем, в Windows XP Professional такие учетные записи разрешено применять только для входа в систему компьютера с его консоли. По умолчанию учетные записи с пустыми паролями запрещено применять для входа в систему удаленно по сети и вообще для любых других действий по входу в систему, кроме как с физической консоли компьютера. Например, нельзя задействовать службу вторичного входа в систему (RunAs - запуск от имени) для запуска программ под учетной записью с пустым паролем локального пользователя. Назначение пароля локальной учетной записи устраняет указанное ограничение на вход через сеть, а также предоставляет ей доступ по сети к любым ресурсам, на которые у нее есть права. Если ваш компьютер не расположен в физически защищенном помещении, рекомендуется назначать пароли всем локальным учетным записям пользователей. Несоблюдение этого требования ведет к тому, что любой пользователь, получивший физический доступ к компьютеру, может войти в систему под учетной записью без пароля. Это особенно важно для переносных компьютеров, на которых следует предусмотреть устойчивые пароли для всех локальных учетных записей пользователей. Указанное ограничение не относится к доменным учетным записям, а также к локальной гостевой учетной записи. Если учетная запись Guest с пустым паролем существует, под ней можно войти в систему и обратиться к любому ресурсу, разрешенному ей для доступа. Если требуется отключить ограничение на вход через сеть без пароля, надо соответствующим образом настроить локальную политику безопасности (Local Security Policy).
Шифрованная файловая система
Дополнительные функции шифрованной файловой системы (Encrypting File System, EFS) существенно обогатили Windows XP Professional, обеспечив дополнительную гибкость для корпоративных пользователей при развертывании решений безопасности, основанных на шифровании файлов с данными. Любой злоумышленник, имеющий физический доступ к компьютеру, может загрузить на нем другую ОС, обойти защиту основной ОС и получить доступ к конфиденциальным данным. Шифрование конфиденциальных файлов средствами EFS обеспечивает дополнительную защиту. Данные зашифрованного файла останутся недоступными, даже если атакующий получит полный доступ к среде хранения данных компьютера. Только полномочные пользователи и назначенные агенты восстановления данных в состоянии расшифровывать файлы. Пользователи с другими учетными записями, обладающие разрешениями для файла - даже разрешением на передачу прав владения (Take Ownership), не в состоянии открыть его. Администратору доступ к содержимому файла также закрыт, если только он не назначен агентом восстановления данных. При попытке несанкционированного доступа к зашифрованному файлу система откажет в доступе.
Архитектура EFS
EFS базируется на технологии шифровании с открытым ключом и использует архитектуру CryptoAPI. Стандартная (по умолчанию) конфигурация EFS не требует никакого административного вмешательства: вы вправе выполнять шифрование файлов сразу же после установки системы. EFS автоматически создает пару ключей шифрования и сертификат пользователя, если они не были созданы ранее. В качестве алгоритма шифрования EFS использует DESX (Expanded Data Encryption Standard) или 3DES (Triple-DES). Поставщики услуг криптографии поддерживают два алгоритма: RSA Base и RSA Enhanced - для создания сертификатов EFS и для шифрования симметричных ключей шифрования. Если зашифровать папку, все файлы и подпапки в ней шифруются автоматически. Рекомендуется шифрование именно на уровне папок, чтобы в процессе работы не появлялись незашифрованные временные файлы.
[pagebreak]
EFS и NTFS
Шифрованная файловая система (EFS) защищает конфиденциальные данные в файлах на томах NTFS. EFS - основная технология шифрования и расшифровки файлов на томах NTFS. Открывать файл и работать с ним может только пользователь, его зашифровавший. Это чрезвычайно важно для пользователей переносных компьютеров: даже если взломщик получит доступ к потерянному или украденному компьютеру, он не сможет открыть зашифрованные файлы. В Windows XP шифрованная файловая система также поддерживает автономные файлы и папки (Offline Files and Folders). Зашифрованный файл останется недоступным для просмотра в исходном виде, даже если атакующий обойдет системную защиту, например, загрузив другую ОС. EFS обеспечивает устойчивое шифрование по стандартным алгоритмам и тесно интегрирована с NTFS. EFS в Windows XP Professional предоставляет новые возможности совместного использования зашифрованных файлов или отключения агентов восстановления данных, а также облегчает управление посредством групповой политики и служебных программ командной строки.
Как работает EFS
EFS позволяет сохранить конфиденциальность информации на компьютере в условиях, когда люди, имеющие физический доступ к компьютеру, могут преднамеренно или неумышленно скомпрометировать ее. EFS чрезвычайно удобна для обеспечения конфиденциальности данных на мобильных компьютерах или на компьютерах, на которых работают несколько пользователей, т. е. таких системах, которые могут подвергаться атакам, предусматривающим обход ограничений списков ACL. В совместно используемой системе атакующий обычно получает несанкционированный доступ, загружая другую ОС. Злоумышленник также может захватить компьютер, вынуть жесткий диск, поместить его на другой компьютер и получить доступ к файлам. Однако если у него нет ключа расшифровки, зашифрованный средствами EFS файл будет выглядеть как бессмысленный набор символов. Поскольку EFS тесно интегрирована с NTFS, шифрование и расшифровка выполняются незаметно ("прозрачно") для пользователя. При открытии файла EFS автоматически расшифровывает его по мере чтения данных с диска, а при записи - шифрует данные при записи на диск. Работая с зашифрованным файлом, вы можете даже не догадываться, что он зашифрован (при условии, что у вас есть соответствующие права). В стандартной конфигурации EFS позволяет зашифровать файл прямо из Проводника Windows без какого-либо вмешательства администратора. С точки зрения пользователя шифрование файла или папки - это просто назначение ему определенного атрибута.
Конфигурирование EFS
По умолчанию система поддерживает работу EFS. Разрешается шифровать файлы, для которых имеется разрешение на изменение. Поскольку в EFS для шифрования файлов применяется открытый ключ, нужно создать пару ключей открытый/закрытый и сертификат с открытым ключом шифрования. В EFS разрешены сертификаты, подписанные самим владельцем, поэтому вмешательство администратора для нормальной работы не требуется. Если применение EFS не соответствует требованиям организации или если есть файлы, которые нельзя шифровать, существует много способов отключить EFS или нужным образом конфигурировать ее. Для работы с EFS всем пользователям требуются сертификаты EFS. Если в организации нет инфраструктуры открытого ключа (Public Key Infrastructure, PKI), применяются подписанные самим владельцем сертификаты, которые автоматически создаются ОС. При наличии центров сертификации сертификаты EFS обычно выпускают именно они. Если вы используете EFS, обязательно предусмотрите план восстановления данных при сбое системы.
Что разрешается шифровать
На томах NTFS атрибут шифрования разрешается назначать отдельным файлам и папкам с файлами (или подпапками). Хотя папку с атрибутом шифрования и называют "зашифрованной", сама по себе она не шифруется, и для установки атрибута пары ключей не требуется. При установленном атрибуте шифрования папки EFS автоматически шифрует: все новые файлы, создаваемые в папке; все незашифрованные файлы, скопированные или перемещенные в папку; все вложенные файлы и подпапки (по особому требованию); автономные файлы.
Шифрование базы данных автономных файлов
В Windows XP можно шифровать базу данных автономных файлов для локальной защиты кэшируемых документов от воровства компьютера, а также обеспечения дополнительной безопасности локально кэшируемых данных. В Windows 2000 этой функции не было - она предусматривает шифрование кэшируемых файлов. Например, вы вправе активно использовать автономные файлы, при этом конфиденциальность данных обеспечивается автоматически. Как администратор отдела технической поддержки вы можете задействовать эту возможность, чтобы обезопасить все локально кэшируемые документы. Автономные файлы - превосходная защита от потери конфиденциальных данных при захвате мобильного компьютера. Указанная функция поддерживает шифрование и расшифровку всей автономной базы данных. Для конфигурирования порядка шифрования автономных файлов нужны административные привилегии. Чтобы зашифровать автономные файлы, откройте папку Мой компьютер (My Computer) и в меню Сервис (Tools) выберите команду Свойства папки (Folder Options), в открывшемся окне свойств на вкладке Автономные файлы (Offline Files) установите флажок Шифровать автономные файлы для защиты данных (Encrypt Offline Files To Secure Data) .
Удаленные операции EFS на общих файлах и Web-папках
Можно шифровать и расшифровывать файлы, расположенные в Web-папках Web Distributed Authoring and Versioning (распределенная система хранения файлов с доступом через Web), или WebDAV. У Web-папок много преимуществ по сравнению с общими файлами, и Microsoft рекомендует максимально широко применять их для удаленного хранения шифрованных файлов. Web-папки требуют меньше внимания от администраторов и безопаснее, чем общие файлы. Web-папки также обеспечивают безопасное хранение и доставку шифрованных файлов через Интернет средствами стандартного протокола HTTP. Чтобы использовать общие файлы для удаленных операций EFS, требуется доменная среда Windows 2000 или более поздних версия Windows, так как при шифровании и расшифровке пользовательских файлов EFS работает от имени пользователя посредством протокола делегирования полномочий в Kerberos. Основное отличие удаленных операций EFS с общими файлами и файлами в Web-папках - то, в каком месте эти операции выполняются. Если файлы хранятся в общих файлах, все операции EFS выполняются на компьютере, где расположен файл. Так, если вы подключились к общему сетевому файлу и пытаетесь открыть ранее зашифрованный файл, он расшифровывается на компьютере, где хранится, а затем передается открытым текстом по сети на ваш компьютер. При хранении файла на Web-папках все операции EFS выполняются на локальном компьютере. Скажем, при подключении к Web-папке и попытке открыть зашифрованный файл последний пересылается по сети в зашифрованном виде на локальный компьютер и уже там расшифровывается системой EFS. Входящий и исходящий трафик Web-папок - это необработанные данные, которые, даже перехваченные атакующим, остаются зашифрованными и совершенно для него бесполезны. Такое различие в выполнении операций EFS объясняет, почему общие файлы требуют больших усилий со стороны администраторов, чем Web-папки. EFS с Web-папками устраняет необходимость в специализированном ПО для безопасного совместного использования зашифрованных файлов пользователями и организациями. Файл может храниться в свободном доступе на файловых серверах в интрасети или в Интернете и при этом оставаться надежно защищенным средствами EFS.
6. Службы сертификации
Службы сертификации - это компонент базовой ОС, позволяющий ей выполнять функции центра сертификации (certification authority, CA), или ЦС, в том числе выпускать цифровые сертификаты и управлять ими. Windows XP Professional поддерживает многоуровневые иерархии ЦС и сети ЦС с перекрестными доверительными отношениями, а также изолированные и интерактивные ЦС.
Хранилища сертификатов с открытыми ключами
Windows XP Professional хранит сертификаты с открытыми ключами в личном (Personal) хранилище сертификатов. Они хранятся открытым текстом, так как это общедоступная информация. Сертификаты имеют цифровую подпись ЦС для предотвращения изменения. Сертификаты пользователя расположены в папке Documents and Settings<имя_пользователя>ApplicationDataMicrosoft SystemCertificatesMyCertificates профиля пользователя. Эти сертификаты записываются в локальном реестре при каждом входе в систему компьютера. Для перемещаемых профилей сертификаты обычно хранятся в определенном месте (не на компьютере) и "следуют" за пользователем при его входе в систему любого компьютера в домене.
Хранение закрытых ключей
Поставщики услуг криптографии (cryptographic service provider, CSP) - как Base CSP, так и Enhanced CSP, хранят закрытые ключи в профиле пользователя в папке %SystemRoot%Documents and Settings<имя_пользователя> Application DataMicrosoftCryptoRSA. В перемещаемых профилях пользователей закрытый ключ располагается в папке RSA на контроллере домена и загружается на компьютер только на время его работы. Поскольку закрытые ключи надо защищать, все файлы в папке RSA автоматически шифруются случайным симметричным ключом - основным ключом пользователя (user's master key). Ключ длиной в 64 символа создается надежным генератором случайных чисел. На базе основного ключа создаются ключи 3DES, используемые для шифрования закрытых ключей. Основной ключ автоматически генерируется и периодически возобновляется. При хранении на диске основной ключ защищается по алгоритму Triple DES с применением ключа, созданного на основе вашего пароля. Основной ключ применяется для автоматического шифрования всех файлов в папке RSA по мере их создания.
Автоматический запрос сертификата пользователя
В Windows 2000 имелась функция автоматического запроса сертификата пользователя. Автоматический запрос сертификата компьютера и контроллера домена поддерживается и групповой политикой Microsoft Active Directory. Автоматический запрос сертификата компьютера чрезвычайно полезен для упрощения подключений по IPSec или L2TP/IPSec VPN к серверам с Windows XP со службой Routing и Remote Access и другим серверам. Эта функция снижает совокупную стоимость владения и упрощает управление жизненным циклом сертификатов для пользователей и администраторов. Автоматический запрос сертификата смарт-карты и ЦС с самоподписанными сертификатами обеспечивают дополнительную защиту пользователям предприятий, где требуется усиленная безопасность.
Запросы в ожидании и обновление сертификатов
Автоматический запрос сертификата пользователя в Windows XP Professional обеспечивает также запросы в ожидании и обновление сертификатов. После запроса сертификата вручную или автоматически на сервере сертификации Windows .NET Server CA ожидается разрешение администратора на выпуск сертификата или завершение процесса верификации. После одобрения и выпуска сертификата механизм автоматического запроса автоматически установит сертификат. В процессе обновления сертификатов пользователя с истекшим сроком действия также применяется механизм автоматического запроса. Сертификаты автоматически обновляются от имени пользователя, причем процедура определяется параметрами шаблонов сертификатов в Active Directory. По умолчанию сертификаты и ключи защищены. Для дополнительной защиты вы вправе применить дополнительные меры безопасности, в том числе выполнять экспорт закрытых ключей и хранить их в защищенном месте.
7. Управление реквизитами
Управление реквизитами в Windows XP состоит из трех компонентов: интерфейс пользователя для ввода реквизитов, хранилище имен и паролей пользователя и связка ключей (keyring).
Интерфейс пользователя для ввода реквизитов
Приложение отображает интерфейс пользователя для ввода реквизитов, если компонент аутентификации возвратил ошибку проверки подлинности. (Это касается только приложений, в которых такой интерфейс реализован.) Вам предлагается ввести имя пользователя и пароль в соответствующем диалоговом окна или выбрать сертификат X.509 из хранилища My Store. Приложение также может предусматривать флажок Remember my password (Запомнить пароль), при установке которого реквизиты запоминаются. Сохранение реквизитов поддерживают только интегрированные с Windows XP компоненты проверки подлинности (например, Kerberos, NTLM, SSL). Для базовой проверки подлинности отображается интерфейс пользователя для ввода реквизитов, но возможности сохранения реквизитов нет.
Хранилище реквизитов пользователя
Реквизиты перемещаемых профилей хранятся в защищенном хранилище Stored User Names and Passwords (Сохраненные имя и пароль пользователя). Порядок доступа к реквизитам определяют параметры локальной защиты (Local Security Settings). Реквизиты хранятся на основе целевой информации, возвращенной ресурсом. Когда установлен флажок Remember my password в интерфейсе запроса реквизитов, реквизиты сохраняются в наиболее общей форме. Скажем, после обращения к определенному серверу в домене реквизиты сохраняются в форме *.domain.com. При сохранении разных реквизитов для разных серверов в этом домене указанная запись не перезаписывается, а создаются более конкретные записи о целевой информации. При обращении к ресурсу с применением интегрированного компонента проверки подлинности последний выберет среди сохраненных реквизитов пользователей наиболее близко соответствующие целевой информации, возвращенной ресурсом. Найдя нужные реквизиты, компонент ничего не будет спрашивать у пользователя. В случае неудачи поиска реквизитов приложению, которое пыталось обращаться к ресурсу, возвращается ошибка аутентификации. Приложение, обращающееся к ресурсу, не обязательно должно реализовывать интерфейс пользователя для ввода реквизитов. Если оно взаимодействует с интегрированным компонентом проверки подлинности, последний и выполняет поиск реквизитов. В действительности сохраненные реквизиты сможет получить только компонент проверки подлинности. Для Windows XP Professional в составе домена используется классический интерфейс пользователя для ввода реквизитов, а в Windows XP Home Edition и Windows XP Professional в рабочей группе - новый дружественный интерфейс пользователя.
Связка ключей
Связка ключей (keyring) позволяет вручную управлять сохраненными реквизитами. Для работы с ней служит элемент User Accounts Панели управления. В связке ключей отображается список сохраненных реквизитов. При выделении реквизита в поле описания в нижней части окна отображается его краткое описание. Можно добавлять новые реквизиты, редактировать и удалять существующие. При добавлении реквизитов система представит диалоговое окно, похожее на интерфейс пользователя для ввода реквизитов, и попросит указать целевую информацию. В целевой информации разрешается использовать символы подстановки в виде звездочки (*). Редактирование реквизитов позволяет самостоятельно изменить целевую информацию или сами реквизиты. Здесь можно изменить имя пользователя и пароль на сервере. Не разрешается применять интерфейс пользователя для ввода реквизитов и редактирования реквизитов, созданных конкретным приложением. Например, не удастся отредактировать реквизиты паспорта. Но вы вправе удалять любые реквизиты. Возможность сохранять реквизиты обычно определяется в групповой политике. Чтобы разработчики могли использовать механизм сохранения реквизитов, API запроса реквизитов и другие базовые API описаны в соответствующем комплекте Platform Software Development Kit (SDK).
8. Быстрое переключение пользователей
Быстрое переключение пользователей в Windows XP Professional доступно, только когда компьютер работает в составе рабочей группы или изолированно. Если компьютер присоединен к домену, параметры входа в систему компьютера определяются политикой, заданной администратором. На компьютерах с Windows XP Professional, которые не работают в составе домена, разрешается переключаться между сессиями разных пользователей без выхода из системы и закрытия приложений. Названные возможности обеспечивает технология поддержки и хранения пользовательских сессий, аналогичная той, что применяется в терминальной службе Microsoft Windows 2000 Terminal Services. Смена пользователя выполняется буквально в мгновение ока "горячими клавишами" я+L или через меню выключения компьютера. В результате не будет закрыто ни одно приложение, а значит, не нужно ломать голову над тем, сохранять ли файлы другого пользователя - вся рабочая обстановка будет сохранена такой, какая она есть. Очередному пользователю Windows выведет окно приглашения, которое, кстати, легко настроить и оформить картинками по своему вкусу.
Разумеется, на сохранение каждого рабочего сеанса потребуется столько оперативной памяти, сколько нужно для хранения приложений, выполняемых в сеансах, плюс еще дополнительно 2 Мбайт на каждый сеанс. Поэтому для надежной поддержки нескольких пользователей рекомендуется компьютер с объемом ОЗУ не менее 128 Мбайт. Приложения, сохраняемые в фоновых сессиях, продолжают работать - скажем, почтовая программа другого пользователя будет продолжать принимать почту! Если система настроена на переход в "спящий" режим (hibernation mode) после приостановки работы, то все сеансы будут сохранены на жестком диске и восстановятся после включения компьютера. Быстрое переключение пользователей разрешено для версий Windows XP Home Edition или Windows XP Professional на изолированном компьютере или компьютере в составе рабочей группы. При присоединении компьютера под управлением Windows XP Professional к домену эта функция отключается.
[pagebreak]
9. Личная конфиденциальность
Возможности обеспечения личной конфиденциальности в Windows XP Professional такие же, как и в Windows XP Home Edition. Они различаются при работе в домене или в составе рабочей группы и в изолированном режиме. В домене применяется назначенная администратором политика.
10. Доступ к Интернету - Internet Connection Firewall
Межсетевой экран Internet Connection Firewall в Windows XP Professional обеспечивает защиту настольных и переносных компьютеров при подключении к Интернету - особенно в случае постоянных подключений, таких как кабельные модемы и DSL.
Групповая политика в ICF
Характерная функция ICF в Windows XP Professional - зависящая от места групповая политика. Это удобно для мобильных пользователей, желающих обеспечить безопасность при работе на переносных компьютерах в местах общественного подключения к Интернету: в гостиницах, аэропортах и т. п. Когда компьютер с Windows XP Professional работает в составе домена, администратор домена обычно создает групповую политику, запрещающую поддержку ICF в корпоративной сети. Это облегчает работу как пользователя, так и администратора. Когда пользователь вернется домой или подключится к Интернету в общественном месте, межсетевой экран ICF снова заработает, так как указанная политика в той сети не действует.
Как работает межсетевой экран
Такую технологию, как фильтры пакетов на основании полной информации о пакете, межсетевой экран ICF использует совместно с компонентом ICS. Хотя ICF обычно и применяется только в изолированном режиме работы компьютера, его иногда используют для защиты общего адаптера и обеспечения безопасности домашней сети. По умолчанию фильтры пакетов межсетевого экрана ICF блокируют все незапрошенные пакеты из открытого сетевого интерфейса. Для этого ICF обращается к таблице трафика в Network Address Translation (NAT) и проверяет весь входящий трафик на соответствие своим правилам. Входные потоки данных пропускаются только при наличии соответствующей записи в таблице трафика NAT, созданной межсетевым экраном или другими средствами из внутренней защищенной сети. Иначе говоря, если источник сетевого сообщения находится вне защищенной сети, входящие данные отбрасываются. Межсетевой экран ICF в Windows XP Professional дает уверенность, что хакеры не смогут просканировать вашу систему или подключиться к ее ресурсам. Однако здесь имеется определенный компромисс: межсетевой экран затрудняет конфигурирование системы для работы в качестве сервера в Интернете. Межсетевой экран ICF в Windows XP Professional доступен, только когда компьютер включен в рабочую группу или в изолированную конфигурацию. В домене параметры ICF определяются политиками, назначенными администратором.
Параметры групповой политики, относящиеся к безопасности
С Windows XP поставляются шаблоны защиты, представляющие собой заранее сконфигурированные наборы политик безопасности, которые разрешается применять для обеспечения определенного уровня защиты пользовательских компьютеров. Шаблоны предусматривают несколько уровней защиты: низкий (low), средний (medium) и высокий (high). Существуют также определенные политики управления паролями: определение минимальной длины пароля; настройка интервала между обязательной сменой пароля; управление доступом к ресурсам и данным.
9. Политика ограничения используемых приложений
Эта политика предоставляет администраторам механизм определения и управления ПО, работающим в домене. Она позволяет ограничить круг приложений только разрешенным к выполнению ПО и запрещает р
1.Защита информации и криптография - близнецы-братья
2.Во всем виноваты хакеры
3.Абсолютная защита
МИФ ПЕРВЫЙ.
"Защита информации и криптография - близнецы-братья"
Этот миф, видимо, связан с тем, что с самого начала своего развития системы информационной безопасности разрабатывались для военных ведомств. Разглашение такой информации могла привести к огромным жертвам, в том числе и человеческим. Поэтому конфиденциальности (т.е. неразглашению информации) в первых системах безопасности уделялось особое внимание. Очевидно, что надежно защитить сообщения и данные от подглядывания и перехвата может только полное их шифрование. Видимо из-за этого начальный этап развития компьютерной безопасности прочно связан с криптошифрами.
Однако сегодня информация имеет уже не столь "убойную" силу, и задача сохранения ее в секрете потеряла былую актуальность. Сейчас главные условия безопасности информации - ее доступность и целостность. Другими словами, пользователь может в любое время затребовать необходимый ему сервис, а система безопасности должна гарантировать его правильную работу. Любой файл или ресурс системы должен быть доступен в любое время (при соблюдении прав доступа). Если какой-то ресурс недоступен, то он бесполезен. Другая задача защиты - обеспечить неизменность информации во время ее хранения или передачи. Это так называемое условие целостности.
Таким образом, конфиденциальность информации, обеспечиваемая криптографией, не является главным требованием при проектировании защитных систем. Выполнение процедур криптокодирования и декодирования может замедлить передачу данных и уменьшить их доступность, так как пользователь будет слишком долго ждать свои "надежно защищенные" данные, а это недопустимо в некоторых современных компьютерных системах. Поэтому система безопасности должна в первую очередь гарантировать доступность и целостность информации, а затем уже (если необходимо) ее конфиденциальность. Принцип современной защиты информации можно выразить так - поиск оптимального соотношения между доступностью и безопасностью.
МИФ ВТОРОЙ.
"Во всем виноваты хакеры"
Этот миф поддерживают средства массовой информации, которые со всеми ужасающими подробностями описывают "взломы банковских сеток". Однако редко упоминается о том, что хакеры чаще всего используют некомпетентность и халатность обслуживающего персонала. Хакер - диагност. Именно некомпетентность пользователей можно считать главной угрозой безопасности. Также серьезную угрозу представляют служащие, которые чем-либо недовольны, например, заработной платой.
Одна из проблем подобного рода - так называемые слабые пароли. Пользователи для лучшего запоминания выбирают легко угадываемые пароли. Причем проконтролировать сложность пароля невозможно. Другая проблема - пренебрежение требованиями безопасности. Например, опасно использовать непроверенное программное обеспечение. Обычно пользователь сам "приглашает" в систему вирусы и "троянских коней". Кроме того много неприятностей может принести неправильно набранная команда. Так, при программировании аппарата ФОБОС-1 ему с Земли была передана неправильная команда. В результате связь с ним была потеряна.
Таким образом, лучшая защита от нападения - не допускать его. Обучение пользователей правилам сетевой безопасности может предотвратить нападения. Другими словами, защита информации включает в себя кроме технических мер еще и обучение или правильный подбор обслуживающего персонала.
МИФ ТРЕТИЙ.
"Абсолютная защита"
Абсолютной защиты быть не может. Распространено такое мнение - "установил защиту и можно ни о чем не беспокоиться". Полностью защищенный компьютер - это тот, который стоит под замком в бронированной комнате в сейфе, не подключен ни к какой сети (даже электрической) и выключен. Такой компьютер имеет абсолютную защиту, однако, использовать его нельзя. В этом примере не выполняется требование доступности информации. "Абсолютности" защиты мешает не только необходимость пользоваться защищаемыми данными, но и усложнение защищаемых систем. Использование постоянных, не развивающихся механизмов защиты опасно, и для этого есть несколько причин.
Одна из них - развитие вашей собственной сети. Ведь защитные свойства электронных систем безопасности во многом зависят от конфигурации сети и используемых в ней программ. Даже если не менять топологию сети, то все равно придется когда-нибудь использовать новые версии ранее установленных продуктов. Однако может случиться так, что новые возможности этого продукта пробьют брешь в защите.
Кроме того, нельзя забывать о развитии и совершенствовании средств нападения. Техника так быстро меняется, что трудно определить, какое новое устройство или программное обеспечение, используемое для нападения, может обмануть вашу защиту. Например, криптосистема DES, являющаяся стандартом шифрования в США с 1977 г., сегодня может быть раскрыта методом "грубой силы" - прямым перебором.
Компьютерная защита - это постоянная борьба с глупостью пользователей и интеллектом хакеров.
В заключение хочется сказать о том, что защита информации не ограничивается техническими методами. Проблема значительно шире. Основной недостаток защиты - люди, и поэтому надежность системы безопасности зависит в основном от отношения к ней служащих компании. Помимо этого, защита должна постоянно совершенствоваться вместе с развитием компьютерной сети. Не стоит забывать, что мешает работе не система безопасности, а ее отсутствие.
В последнее вpемя стало очень модно полагать, что опеpационные системы Windows NT и Windows содеpжат массу погpешностей в защите пpи pаботе в IP сетях, что позволяет едва ли не каждому злоумышленнику делать все что он пожелает с компьютеpом беззащитного пользователя. Действительно, 97 год на пеpвый взгляд пpямо таки ошеломил массой найденых и шиpоко pазpекламиpованых пpоpех: от дыpок в бpаузеpах InternetExplorer и NetscapeNavigator, до ошибок в ядpах ОC. Hо не все так фатально. Эта статья пpедставляет из себя попытку объяснить доступным языком чего все-таки следует опасаться, а чего нет. Рассчитана статья на гpамотных пользователей, но может быть навеpное полезной и системным администpатоpам.
По тексту статьи под Windows понимаются Windows NT и Windows. Пpактически все нижесказанное относится к обеим системам в pавной степени.
Итак, что пpедставляет непосpедственную опасность
Hаиболее опасными мне пpедставляются дыpки имеющие место быть в WWW бpаузеpах. В самых pаспpостpаненных: Internet Explorer и Netscape Navigator.
Эти ошибки опасны потому, что жеpтвой их можно стать совеpшенно случайно, пpосто зайдя на сайт, где кто-нибудь заложил нечто дестpуктивное. Конечно, можно ходить только на сайты кpупных надежных компаний, но вpяд ли кто-нибудь пpенебpегал возможностью пpосто свободного скольжения по сети, от ссылки к ссылке.
Очень сеpьезная ошибка имеется в Internet Explorer веpсии 3.00 и 3.01. Cуть ее в следующем: к вам может быть пеpекачан из сети файл с pасшиpением.url или.lnk и выполнен на вашем компьютеpе, пpичем сделано это может быть совеpшенно незаметно для вас. Понятно, что содеpжание этих файлов зависит, только от настpоения злоумышленника. Теоpетически возможна, полная потеpя вашей инфоpмации. Поэтому всем пользователям указанных веpсий настоятельно pекомендуется немедленно пpекpатить использовать указанные веpсии IE и пеpейти на IE 3.02 или более новый, хотя доступен и fix - http://www.microsoft.com/ie/security/update.htm
Хотя IE 3.02 тоже не абсолютно безопасен. Шиpоко известна дыpка основаная на связке PowerPoint и Internet Explorer. Cуть ее в следующем: документы PowerPoint способны выполнять внешние команды, а IE способен отобpажать PowerPoint-овские документы как встpоенные обьекты. Cоответственно, пpи установленном PowerPoint возможно выполнение каких-либо внешних команд автоматически, пpосто пpи пpосмотpе стpаницы содеpжащей документ PP. Fix доступен на http://www.microsoft.com/ie/security/powerpoint.htm
Тепеpь остановимся на дыpках, специфичных для NetscapeNavigator. Достаточно шиpоко стала известна ошибка найденная одним датским пpогpаммистом. Она позволяет получить ваши локальные файлы во вpемя вашего доступа к сайту. Технически все это выполняется чеpез фоpмы в невидимом окне, заполняемые содеpжимым локальных файлов и посылаемыми в сеть. Фиpма Netscape а также многочисленная аpмия любителей pугать Microsoft и не замечать пpоблем в пpодуктах дpугих пpоизводителей пpеуменьшают опасность мотивиpуя это тем, что необходимо знать полный путь до того файла, котоpый хочешь утащить, а пеpекачка pаспpостpаненных файлов типа autoexec.bat не имеет никакого смысла. Hу что же, давайте пофантазиpуем: много людей используют Windows 95; большинство из них ставит ее на диск C; много людей используют dial-up scripting tools; достаточно шиpоко pаспpостpанена пpактика когда в стандаpтном скpипте pppmenu.scp явным текстом пpописывается логин и паpоль к своему пpовайдеpу. Если сооpудить пpивлекательный сайт - эpотику какую-нибудь) , да pазместить его в большом гоpоде, то скоpее всего за dial-up платить самому уже не пpидется никогда. И это только пеpвый пpишедший мне в голову ваpиант использования этой "безвpедной" ошибки Netscape.
Gовоpить об ошибках имеющихся в IE 4.0 и NetscapeCommunicator сейчас несколько пpеждевpеменно, поскольку доступные веpсии имеют статус бета-пpодукта. Хотя некотоpый пpогноз сделать можно. В IE будут находить все новые дыpки, идущие от интегpации IE с опеpационной системой. В пpодуктах Netscape дыpок будет значительно меньше, но поскольку, ввиду все большего захвата pынка бpаузеpов фиpмой Microsoft, число пользователей Netscape будет уменьшаться, то чеpез некотоpое вpемя наличие или отсутствие дыp в NetcapeNavigator, Communicator и "что-то там еще потом будет" будет не столь важно. Тепеpь давайте поговоpим об опасностях идущих не от ошибок, а от новых "пеpспективных" технологий, конечно же делающих web стpанички пpивлекательней и, возможно, опасней.
Java
Это уже достаточно устоявшаяся технология, успешно pазвиваемая фиpмой Sun. Об успехе говоpит то, что даже Microsoft был вынужден лицензиpовать java, что не соответсвует обычной агpессивной политике MS. По самой своей идеологии java достаточно безопасна. В спецификации написано, что java applet не может иметь доступ к физическим pесуpсам компьютеpа и не может влиять на дpугие пpоцессы. Единственная пpиходящая в голову пpостая дестpуктивная возможность это запpосить из апплета большое количество памяти, чем вызвать своп и существенное замедление pаботы системы. Тут надо добавить, что степень защиты IE 3.02, значительно выше чем в пpедыдущих веpсиях IE или же в NetscapeNavigator. Так, в IE 3.02 пpи попытке чтения файла с локального диска пpоисходит исключение. Как следствие, аплеты, использующие внешние файлы с каpтинками, не pаботают пpи запуске с диска. Это в общем-то затpудняет жизнь pазpаботчика java аплетов. Hекотоpое беспокойство вызывает желание некотоpых контоp (в том числе и Microsoft) увеличить скоpость выполнения java апплетов, за счет снижения уpовня безопасности. Hу что же, поживем увидим.
ActiveX
Cия технология была задумана Microsoft как ответ на Java. Cильная стоpона ActiveX controls это значительно более шиpокие возможности и скоpость чем у java, слабая стоpона это пpивязанность к опpеделенной аппаpатной платфоpме и более слабая система безопасности. C внутpенней точки зpения ActiveX control пpедставляет из себя обычную dll выполняющуюся в адpесном пpостpанстве IE и имеющую доступ пpактически ко всем pесуpсам PC чеpез COM интеpфейсы. Безопасность в ActiveX основана на пpинципе довеpия. Пеpед скачиванием и инсталляцией ActiveX control появляется изобpажение сеpтификата с названием фиpмы пpоизводителя, и если вы не довеpяете пpоизводителю, то control можно запpетить. Ввиду недостаточно шиpокой pаспpостpаненности этой технологии сообщений о найденых дыpках в системе безопасности пока что не появлялось. Хотя я бы посоветовал очень остоpожно относиться к ActiveX, потенциально там возможна большая опасность.
JavaScript
Cамая большая пpоблема этой технологии, то что у Netscape и Microsoft достаточно pазные взгляды на стандаpты и pеализацию JavaScript, что служит пpичиной головной боли многих web дизайнеpов. Подход обоих вышеуказанных фиpм схож в одном: имеющие место быть дыpки в защите существуют и в IE и в NN. Если java выполняется в pамках виpтуальной машины java и огpаничена ее возможностями, то JavaScript выполняется www бpаузеpом и, соответственно, теоpетически есть возможность делать все то, что делает www бpаузеp, а это как минимум манипуляции с файлами на локальном диске и возможность посылки своей инфоpмации куданибудь в сеть. Cобственно возможность подобных действий уже была пpодемонстpиpована на пpимеpе Netscape Navigator и получила шиpокую огласку - cм. http://www.aleph2.com/tracker/tracker.cgi Демонстpация заключалась в том, что после посещения опpеделенного сайта кое-где начинал фоpмиpоваться лог-файл вашей pаботы в сети, котоpый затем можно было с удивлением посмотpеть. Доступны заплатки от Netscape - http://www.netscape.com/flash4/assist/security/index.html
и Microsoft - http://www.microsoft.com/ie/security/update.htm
Hа втоpое по опасности место после ошибок в бpаузеpах я бы поставил ошибки в опеpационных системах. Здесь опасности меньше, потому что необходима напpавленная атака именно на вас, ну или вы случайно попадете в диапазон адpесов, подвеpгающихся атаке. Хотя если у вас есть "добpожелатели" такая опасность выходит на пеpвое место.
Cамый шиpоко известный способ атаки получил название Winnuke: (cм. http://www.darkening.com/winnuke/) В сеpедине мая таким способом на несколько дней был выведен из стpоя www.microsoft.com. Hекотоpое вpемя после этого в сети твоpился настоящий кошмаp. Шло массовое убийство сеpвеpов на базе Windows NT. Итак, что же это такое. Hаpяду с обычными данными пеpесылаемыми по TCP соединению cтандаpт пpедустатpивает также пеpедачу сpочных (Out Of Band) данных. Hа уpовне фоpматов пакетов TCP это выpажается в ненулевом urgent pointer. Y большинства PC с установленным Windows пpисутствует сетевой пpотокол NetBIOS, котоpый использует для своих нужд 3 IP поpта: 137, 138, 139. Как выяснилось, если соединиться с Windows машиной в 139 поpт и послать туда несколько байт OutOfBand данных, то pеализация NetBIOS-а не зная что делать с этими данными попpосту подвешивает или пеpезагpужает машину. Для Windows 95 это обычно выглядит как синий текстовый экpан, сообщающий об ошибке в дpайвеpе TCP/IP и невозможность pаботы с сетью до пеpезагpузки ОC. NT 4.0 без сеpвис паков пеpезагpужается, NT 4.0 со втоpым сеpвис паком выпадает в синий экpан. Cудя по инфоpмации из сети подвеpжены такой атаке и Windows NT 3.51 и Windows 3.11 for Workgropus. Имеется очень большое количество пpогpамм для атаки этим способом, пpактически для всех платфоpм. Hаpяду с обилием сpедств атаки существует большое количество сpедств защиты. Так если вы ходите в интеpнет с компьютеpа неподсоединенного к локальной сети и с установленной Windows 95, то пpостейший способ это пpосто убpать клиента для Microsoft Network. Именно так сделано на моем домашнем компьютеpе и могу завеpить, что WinNuke такую конфигуpацию не пpобивает. Cуществуют пpогpаммы, котоpые отслеживают все попытки отстpела вас, и даже те котоpые делают ответный залп, скоpее всего бесполезный. Официальный метод от Microsoft это установка OOB заплатки на Windows'95 (http://www.microsoft.com/kb/articles/q168/7/47.htm) и тpетьего Serivice Pack для NT v4.0 (ftp://ftp.microsoft.com/bussys/winnt/ winnt-public/fixes/usa/nt40/ussp3/).
Хотя с SP3 и WinNuke связана достаточно веселая истоpия. Как выяснилось вскоpе после выпуска SP3, запущеный с компьютеpов Apple WinNuke спокойно пpобивал защиту сеpвис пака. Пpичиной этого послужило существование двух pазных стандаpтов на IP пакеты, содеpжащие OutOfBand данные. Есть стандаpт от Berkley и стандаpт, описаный в RFC 1122. Отличие их состоит в том, что UrgentPointer вычисляется по pазному. В действительности, UrgentPointer в двух pеализациях будет отличаться pовно на единицу. Тpетий сеpвис пак, защищающий от "своих" OOB пакетов, оказался беззащитен пpотов пакетов дpугого стандаpта. Поэтому почти сpазу после SP3 вышел дополнительный OOB fix. (см. ftp://ftp.microsoft.com/bussys/winnt/winnt-public/fixes/usa/nt40/ hotfixes-postSP3/oob-fix/). Здесь следует отметить, что само существование OOB данных, безотносительно WinNuke, вызывает достаточно много пpоблем именно из за существования двух стандаpтов, или веpнее отсутствия стандаpта. Поэтому гаpантиpовать пpавильную pаботу пpогpаммы, использующей OOB не может никто. Многие умные люди pекомендуют вообще не использовать OOB данные в своих пpогpаммах. В действительности, если для написания оpигинального WinNuke достаточно самых тpивиальных функций pаботы с TCP/IP (пpогpамма на PERL занимает 7 стpок), то чтобы пpобить SP3 потpебуется pаботать с TCP на низком уpовне, либо запускать стандаpтный WinNuke с платфоpмы поддеpживающей дpугую pеализацию OOB. Кстати, подвеpженным такой атаке является не только 139 поpт, точно известно, что MS DNS (53 поpт) тоже стpеляется OOB данными, а автоp статьи убедился, что популяpный сетевой пpефеpанс легко убивается этим методом.
Cледующий достаточно известный способ атаки называется PingOfDeath или SSPing (см. http://www.darkening.com/ssping) Cущность его в следующем: на машину жеpтвы посылается сильно фpагментиpованный ICMP пакет большого pазмеpа (64KB). Реакцией Windows систем на получение такого пакета является безоговоpочное повисание, включая мышь и клавиатуpу. Пpогpамма для атаки шиpоко доступна в сети в виде исходника на C и в виде запускаемых файлов для некотоpых веpсий unix. Lюбопытно, что в отличие от WinNuke жеpтвой такой атаки могут стать не только Windows машины, атаке подвеpжены MacOS и некотоpые веpсии unix. Пpеимущества такого cпособа атаки в том, что обычно firewall пpопускает ICMP пакеты, а если firewall и настpоен на фильтpацию адpесов посылателей, то используя нехитpые пpиемы spoofing можно обмануть и такой firewall. Hедостаток PingOfDeath в том, что для одной атаки надо пеpеслать более 64KB по сети, что делает вообще его говоpя малопpименимым для шиpокомасштабных дивеpсий, хотя конечно поpтить жизнь нескольким отдельно взятым личностям можно достаточно легко. По этой же пpичине еще менее пpименима модификация, называемая PingOfDeath 2, заключающаяся в посылке нескольких 64KB ICMP пакетов. Официальные заплатки доступны на Microsoft для Windows 95 (ftp://ftp.microsoft.com/Softlib/MSLFILES/VIPUPD.EXE), NT v4.0 (ftp://ftp.microsoft.com/bussys/winnt/winnt-public/fixes/usa/ NT40/hotfixes-postSP3/icmp-fix/icmpfixi.exe) и NT v3.51 (ftp://ftp.microsoft.com/bussys/winnt/winnt-public/fixes/usa/ nt351/hotfixes-postSP5/icmp-fix/ICMP351I.EXE). Cледует заметить, что по некотоpым слухам установка этих заплаток снимает OOB fix, поэтому после этого необходимо будет еще pаз ставить защиту от WinNuke. Lюбопытно, что fix для 95 не pаботает, по кpайней меpе у меня, поэтому остается альтеpнатива использовать "неофициальный" и достаточно подозpительнчый фикс , лежащий на http://www.darkening.com/ssping/pingfix.zip. Lично для себя, я pешил пока не закpывать этой дыpки, до пеpвого pеального случая такой атаки на меня.
Имелась большая гpуппа ошибок Windows NT 4.0 испpавленных в SP3, котоpые могли пpивести к достаточно печальным последствиям. Hаиболее популяpна была следующая: заходится telnet-ом на 135 поpт, и посылается несколько символов. После этого загpузка сеpвеpа пеpманентно pавна 100 % до пеpезагpузки. Есть много способов закpыть эту дыpку, но я бы pекомендовал поставить SP3, поскольку он включает в себя кpоме этого еще очень много дpугих не менее полезных вещей.
Cледующая гpуппа опасностей подстеpегащих вас в миpе Windows и Internet это атаки на всевозможные пpиложения. Частный случай таких атак (WWW бpаузеpы - как самые pаспpостpаненные пpогpаммы для pаботы с интеpнетом) уже pассматpивался. Тепеpь обсудим пpоблемы безопасности связанные с дpугими пpиложениями на пpимеpе дpугого частного случая: Microsoft Internet Information Server.
Cуществуют несколько способов уpонить интеpнет сеpвеp с IIS.
Достаточно стаpый и шиpоко известный способ это зайти telnet-ом на 80 поpт и дать команду GET "../..". Реакцией на эту команду будет повисание HTTP сеpвеpа.
Дpугой метод дивеpсии носит название IISSlayer. В сеpедине июня 97 года www.microsoft.com был выведен из стpоя на несколько дней посpедством атаки такого типа. Cуть ее в следующем: пpи запpосе у IIS очень длинного URL (4 - 8KB) сеpвеp повисает и не pеагиpует на дальнейшие запpосы. Пpоблема в том, что точный pазмеp URL зависит от конкpетного сеpвеpа, поэтому пpогpаммы-убийцы начиная с некотоpого базового pазмеpа запpоса и постепенно увеличивая pазмеp пытаются найти ту кpитическую точку, что подвесит сеpвеp-жеpтву. Получил pаспpостpанение java applet называющийся IISSlayer.class (см. http://www.ntsecurity.net/security/tools/IIServerSlayer.class) котоpый и осуществляет подобную атаку. Заплатка доступна на Microsoft. Конечно можно описывать еще много способов дивеpсий для Windows систем и отдельных пpиложений (типа известной, но некpитической ошибке NetscapeMail, позволяющей получить кому-либо копию вашего майлбокса), но самые опасные из шиpоко pаспpостpаненных дыpок уже освещены. И если вы защитились от всего вышепеpечисленного, то можно считать, что пpичинить вам вpед будет не очень легко. Хотя конечно всегда останутся методы гpубой силы типа пингования гpомадными пакетами или SYN flood, котоpыми можно заваливать любую интеpнет машину или подсеть, независимо от конфигуpации. Также неизвестно какие вновь найденные ошибки в популяpных пpогpаммах готовит нам будущее. За пpеделами этой статьи остались вопpосы безопасности в Windows касающиеся всевозможных способов взлома и незаконного получения пpав доступа, заслуживающие отдельной большой статьи. Также здесь опущены общие вопpосы безопасности в Internet, заслуживающие не статьти, а хоpошей моногpафии.
В заключение хочется опpовеpгнуть бытующее мнение, что в ОC семейства Windows и всевозможных пpиложениях для этих ОC содеpжится очень много ошибок (хотя вpоде бы сам дух статьи говоpит о дpугом). Да, ошибки есть, но где их нет? Значительно важнее то, что все кpитические ошибки очень быстpо испpавляются. Так для WinNuke и IISSlayer (знаменитые убийцы www.microsoft.com) fix становился доступен в течении 2 суток. Если такой уpовень сеpвиса останется и в будущем, то конкуpентов у Windows платфоpмы в Internet попpосту не будет. Hа этой оптимистической ноте позволю себе завеpшить эту статью и без того достаточно длинную.
Всякий раз, когда компьютер подключается к узлу Интернета, DNS-сервер (сервер доменной системы имен) преобразует удобное для восприятия человеком имя машины (например, \\Mailserver) или указатель URL (такой, как www.site.com) в IP-адрес.
С помощью малоизвестной функции (заимствованной непосредственно из UNIX) Windows 98 SE и более поздних версий ОС можно составить список имени IP-адресов машин на вашем компьютере.
Если этот файл (с именем hosts) существует, то Windows берет адреса из него, не обращаясь к DNS-серверу. Файл hosts находится в каталоге C:\Windows\System32\Drivers\ (в Windows 98 SE - в папке \Windows\).
Каждому элементу этого чисто текстового файла отводится одна строка. Даже если пользователь не создавал файла hosts, он существует и содержит единственную запись — localhost. (Localhost - псевдоним, используемый для тестирования, ему всегда присваивается значение 127.0.0.1, стандартный адрес закольцовывания).
Файл hosts пользователь может дополнить собственными элементами с помощью любого текстового редактора, например Notepad. Первый (и наименее полезный) способ использования этого файла - внести в него имена и IP-адреса часто посещаемых узлов Интернета, чтобы операционной системе не приходилось отыскивать адрес при каждом обращении к этому узлу.
Но преобразование имен DNS обычно выполняется так быстро, что практически не влияет на производительность.
Второй, более полезный способ применения hosts - подготовить тупиковый адрес, известный как хакерский IP-адрес, для рекламных серверов и Web-узлов, которые нужно заблокировать. Например, запись 127.0.0.1 adserver.annoying.com означает для Windows необходимость использовать адрес 127.0.0.1 для подключения к сайту Adserver.annoying.com.
Поскольку такого адреса не существует, то не будет поступать реклама. Файл hosts может играть для вас роль примитивного дешевого фильтра контента: достаточно сделать запись для каждого блокируемого узла, указав адрес 127.0.0.1.
Этот прием поможет значительнее, чем любой другой из наших советов, ускорить работу Windows.
В ходе начальной загрузки Windows обращается к различным папкам в поисках программ, которые нужно запустить немедленно после завершения этой процедуры.
Часть таких программ выполняется в приоритетном режиме, но большинство незаметно функционирует в фоновом режиме, потребляя системные ресурсы. В Windows 98 SE и последующих версиях ОС есть утилита System Configuration Utility. Введите в диалоговом окне Run или панели Address команду msconfig, чтобы вызвать утилиту System Configuration Utility и перейдите к закладке Startup.
Здесь можно отключить ненужные, на ваш взгляд, элементы, например запуск медиа-проигрывателей. В результате отключения только несущественных программ ускорится лишь загрузка ОС.
Поскольку эти программы не удаляются из процесса начальной загрузки, а просто блокируются, их легко активизировать позднее. Еще один простой прием, позволяющий избавиться от нежелательных элементов начальной загрузки, - воспользоваться утилитой Startup Cop лаборатории PCMagazine, которую можно бесплатно загрузить с узла www.pcmag.com/utilities.
Конечно, необходимо заглянуть также в группу Startup (в меню Start) и удалить все программы, автоматический запуск которых в процессе начальной загрузки компьютера не требуется.
Если у вас нет полной уверенности в том, какие программы действительно необходимо запускать при начальной загрузке, откройте редактор Regedit и перейдите в раздел HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run. Там вы найдете информацию об остальных программах, запускаемых при загрузке Windows.