Опубликован: 21.09.2006 | Уровень: для всех | Доступ: платный | ВУЗ: Московский государственный университет имени М.В.Ломоносова
Лекция 11:

Технологии аутентификации и шифрования

Наследование фильтра в многопользовательских окружениях

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

Замечание. Если нет полного доверия пользователям (например, в случае web-хостинга), то никогда не следует разрешать им доступ к ModSecurity. Возможность .htaccess используется для децентрализованного администрирования. Но это не означает, что ее следует использовать в ситуациях, в которых пользователи могут захотеть разрушить конфигурацию. В этом случае надо полностью выключить возможность .htaccess, скомпилировав ModSecurity с опцией –DDISABLE_HTACCESS_CONFIG.

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

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

SecFilterInheritanceMandatory On
Рассмотрим, что произойдет в следующей ситуации:
SecFilter XXX id:1001
SecFilterInheritabceMandatory On
<Location /subcontext/>
SecFilterInheritance Off
SecFilter YYY id:1002
SecFilter ZZZ id:1003, mandatory
</Location>

<Location /subcontext/another/>
SecFilterRemove 1001 1002 1003
SecFilter QQQ id:1004
</Location>

Так как наследование правил является обязательным в основном контексте, /subcontext/ контекст будет наследовать правило 1001, несмотря на попытку его отключить (используя SecFilterInheritance Off ). В данном подконтексте первым будет выполняться правило 1001, далее правила 1002 и 1003.

Обязательное правило 1001 из основного контекста будет также распространяться на контекст /subcontext/another/, несмотря на попытку удалить его. Это также выполняется для правила 1003, которое было сделано обязательным для наследования, используя действие mandatory. Директива SecFilterRemove 1001 1002 1003 будет, однако, успешно удалять правило 1002, потому что наследование не является обязательным в /subcontext/. Следовательно, в данном контексте первыми будут выполняться правила 1001 и 1003, следующим будет правило 1004.

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

Проверка корректности представления URL

Специальные символы могут быть закодированы злоумышленником перед тем, как они будут вставлены в URL. Любой символ может быть заменен с использованием комбинации из трех символов: %XY, где XY представляют собой шестнадцатеричный код символа. В шестнадцатеричных числах разрешены только буквы от А до F, но атакующие иногда используют другие буквы, чтобы запутать алгоритм декодирования. ModSecurity выполняет декодирование с помощью следующего правила:

SecFilterCheckURLEncoding On

Замечание. Данная директива не проверяет содержимого POST -запросов при использовании представления multipart/form-data. Это не является обязательным, потому что в этом случае не используется URL.

Проверка корректности представления Unicode

Аналогично многим другим возможностям, проверка корректности представления Unicode по умолчанию выключена. Ее следует включить, если приложение или лежащая в основе ОС принимают и понимают Unicode.

SecFilterCheckUnicodeEncoding On

Это предполагает представление в UTF-8 и проверяет следующие три типа ошибок.

  • Недостаточно байтов. UTF-8 поддерживает кодирование из двух, трех, четырех, пяти и шести байтов. ModSecurity определяет случаи, когда один или более байтов пропущены.
  • Несуществующее кодирование. Атакующие могут использовать несуществующее кодирование, чтобы попытаться обмануть Unicode декодировщики.
  • Очень длинные символы. ASCII символы непосредственно отображаются в Unicode и тем самым представлены в одном байте. Однако, большинство ASCII символов может также быть представлено двумя, тремя, четырьмя, пятью и шестью символами, тем самым обманывая декодировщик, который в этом случае может представить символ как-то еще (и таким образом атакующий может обойти проверки безопасности).
Нияз Сабиров
Нияз Сабиров

Здравствуйте. А уточните, пожалуйста, по какой причине стоимость изменилась? Была стоимость в 1 рубль, стала в 9900 рублей.

Елена Сапегова
Елена Сапегова

для получения диплома нужно ли кроме теоретической части еще и практическую делать? написание самого диплома требуется?

Игорь Касаткин
Игорь Касаткин
Россия, Москва
Зарина Каримова
Зарина Каримова
Казахстан, Алматы, Гимназия им. Ахмета Байтурсынова №139, 2008