Безопасность активного содержимого
Фильтры ISAPI
Фильтры ISAPI отличаются от приложений тем, что они управляются событиями веб-сервера, а не запросами клиентов. Фильтр ISAPI закрепляется в системе и отслеживает определенные события при попытках клиентов открыть страницу на сервере. Приложение фильтра располагается между подключением к клиенту и серверу HTTP, что позволяет контролировать обмен данными между IIS и клиентом, а также расширять функциональные возможности сервера посредством реализации дополнительных журналов HTTP и шифрования. Работа фильтров ISAPI основывается на уведомлениях об этапах, которые проходит каждый запрос, передаваемый сервером IIS фильтру ISAPI. Каждое уведомление поддерживает собственный тип данных, соответствующий определенному этапу процедуры запроса. При приеме уведомления от IIS фильтр ISAPI управляет данными уведомления и способом дальнейшей обработки запроса IIS. Программа URLScan, о которой пойдет речь ниже, является примером использования фильтров ISAPI для повышения уровня безопасности IIS.
Важно. Если вы заключаете контракт со сторонними разработчиками для построения интранет-сайта или веб-сайта, или если на сервере используются готовые библиотеки ISAPI DLL, обратитесь к заметке "Проверки сторонних программ" в "Сторонние средства обеспечения безопасности" .
Средство безопасности URLScan
URLScan представляет собой средство безопасности, работающее вместе с программой IIS Lockdown (см. "Подготовка и укрепление веб-сервера" ) и обеспечивающее отключение ненужных функций и ограничение типов HTTP-запросов, обрабатываемых IIS. Как и фильтр ISAPI, программа URLScan выявляет все входящие на сервер запросы и фильтрует их согласно установленным правилам. Посредством фильтрации всех необычных запросов программа запрещает доступ к серверу IIS потенциально опасных запросов и обеспечивает обработку только корректных. Для получения информации о настройке URLScan, о командах HTTP, которые необходимо разрешить для работы отдельных приложений, посетите страницу http://www.microsoft.com/technet/security/URLScan.asp.
Настройка фильтров ISAPI
Окно Properties (Свойства) фильтров ISAPI позволяет выбирать фильтры для работы на IIS (см. рис. 11.8). Фильтры ISAPI работают для всех веб-сайтов, так как они устанавливаются на главном уровне; они выполняются именно в том порядке, в котором перечислены в диалоговом окне. Можно установить глобальные фильтры для всех сайтов на сервере или фильтры только для отдельных веб-сайтов. Когда несколько фильтров зарегистрированы для обработки одного и того же события, они вызываются последовательно, причем в первую очередь – фильтры с более высоким приоритетом. Для добавления фильтра в консоли ISM выберите веб-сервер или веб-сайт, откройте окно Properties (Свойства) и откройте вкладку ISAPI Filters.
Совет. При добавлении фильтров для веб-сайта в окне Properties отобразятся только фильтры, установленные для данного веб-сайта, несмотря на то, что могут существовать глобальные фильтры, наследуемые из главных настроек веб-сервера.
Нажмите на кнопку Add (Добавить) и введите название фильтра в поле Filter Name (Имя фильтра). Найдите файл ISAPI DLL в поле Executable, после чего нажмите на OK. Для изменения порядка загрузки фильтров используйте кнопки со стрелками.
После добавления или изменения глобального фильтра необходимо остановить и перезапустить веб-сервер, чтобы загрузить новые фильтры в память. Фильтр, добавляемый на уровне веб-сайта, автоматически загружается после добавления.
Защита кода собственной разработки с помощью фильтра ISAPI
Большая часть сценариев JavaScript включается в веб-страницы или содержится в файле JavaScript (.js), и код сценариев доступен каждому пользователю, который просматривает исходный код файла. Как правило, это не представляет серьезной проблемы, однако что делать, если вы разработали свои собственные сценарии JavaScript, которые не должны быть доступны для просмотра? В этом случае следует использовать фильтр ISAPI.
Отслеживая уведомления OnUrlMap, фильтр ISAPI обеспечивает тот факт, что сценарий JavaScript серверной части будет доступен для чтения только серверу IIS. Когда IIS сопоставит логический путь устройства с физическим путем, произойдет вызов уведомления OnURLMap, что позволит фильтру ISAPI определить, кто осуществляет попытку чтения файла JavaScript. Если кто-либо попытается получить непосредственный доступ к файлу, фильтр заблокирует запрос, в то время как запрос на просмотр HTML-страницы, связанной со сценарием JavaScript, обработается в обычном порядке, так как он отправлен сервером IIS. Пример такого фильтра расположен на странице http://www.15seconds.com/issue/010104.htm. Этот метод обеспечивает доступ IIS только к файлам, содержащим системные пароли доступа к ресурсам, например, к базам данных. Следует избегать непосредственного указания паролей в общих сценариях.
Важно. Никогда не включайте системные пароли в сценарии. В этом случае пароли будут доступны для чтения любому разработчику и выявлены при нарушении безопасности сайта.
Кодировщик сценариев
Одним из недостатков использования сценариев является то, что любые алгоритмы и код собственной разработки видны любому пользователю, которому разрешено редактировать файл, так как они хранятся в виде обычного текста. Этот недостаток в защите интеллектуальной собственности очень имеет большое значение, если вы предоставляете услуги веб-разработки другим пользователям или используете стороннюю помощь в поддержке сайта, так как у посторонних пользователей появляется возможность копирования кода. Кодировщик сценариев представляет собой простую утилиту командной строки, которую можно бесплатно загрузить с сайта http://msdn.microsoft.com/scripting/. Эта утилита позволяет кодировать сценарии серверной части, чтобы их исходный код был недоступен для просмотра или изменения.
После того как сценарий закодирован, изменение любой части результирующего файла сделает его недействительным, что обеспечит его целостность. Клиенты, для которых разработан код, не смогут его изменять, что значительно упрощает решение проблем, связанных с ошибками, так как в данном случае вы будете уверены в том, что код не был изменен. Данная мера не предотвратит доступ хакера к коду, однако определенно нарушит планы большинства не слишком осведомленных пользователей. Сразу после отладки и тестирования сценария примените данную утилиту для кодирования окончательного сценария. Она кодирует только исходный код сценария, а остальное содержимое файла, представленное открытым текстом, не кодируется. Кодировщик сценариев использует маркеры в коде сценариев для определения того, с какого места необходимо начать кодирование.
Следующий пример кода на языке VBScript демонстрирует использование маркера для кодирования всего кода, кроме сообщения об авторских правах:
<SCRIPT LANGUAGE="VBScript"> 'Copyright© 2002. Ваша компания. Все права защищены. '**Start encode** Код вашей собственной разработки расположен здесь </SCRIPT>
При выполнении кодировщика сценариев весь текст сценария до стартового маркера не кодируется, а данные, находящиеся после маркера, будут закодированы. По завершении процесса кодирования указатель языка в теге <SCRIPT> сменится на
<SCRIPT LANGUAGE="VBScript.Encode" >