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

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

Решение общих проблем безопасности

Возможности ModSecurity могут использоваться для определения и предотвращения наиболее общих проблем, связанных с безопасностью.

Перемещение по директории

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

SecFilter "\.\./"
Атаки Cross Site Scripting

Атаки Cross Site Scripting (XSS) возникают тогда, когда атакующий вставляет HTML и/или JavaScript код в web-страницы и затем данный код выполняется на компьютерах других пользователей. Обычно это достигается добавлением HTML в те места, где он не должен быть. Результатом успешной XSS-атаки может стать получение атакующим cookie сессии и затем получение полного доступа к приложению от имени другого пользователя.

Должная защита от данной атаки состоит в фильтровании параметра (тем самым, в удалении ненужного HTML/JavaScript), и при этом часто требуется защитить существующие приложения без изменения их. Это может быть сделано с помощью одного из следующих фильтров:

SecFilter "<script"
SecFilter "<.+>"

Первый фильтр защищает только от вставления JavaScript c тегом <script>. Второй фильтр – более общий и запрещает любой HTML-код в параметрах.

Необходимо тщательно разрабатывать фильтры, подобные этому, потому что многие приложения получают HTML в качестве параметров (например, форумы). Можно использовать выборочную фильтрацию. Например, можно иметь второй фильтр в качестве общего правила на весь сайт и иметь уточняющее правило для конкретного скрипта:

<Location /xxx.php>
SecFilterInheritance Off
SecFilterSelective :ARGS | !ARG_body" "<.+>"
</Location>

Данный фрагмент кода будет разрешать HTML только в теле указанного параметра.

Атаки SQL / база данных

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

Фильтры должны быть примерно следующими:

SecFilter "delete[[:space:]]+from"
SecFilter "insert [[:space:]]+into"
SecFilter "select.+from"

Эти фильтры могут защитить от большинства атак, относящихся к SQL.

Выполнение команд ОС

Web-приложениям иногда требуется выполнять команды ОС. Это может позволить атакующему выполнить произвольные команды. Фильтр должен быть подобен следующему:

SecFilterSelective ARGS "bin/"

Это может предотвратить попытки выполнить бинарные файлы, расположенные в различных папках.

Атаки переполнения буфера

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

SecFilterByteRange 32 126

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

Проверка параметров

Проверка того, что параметр является целым в диапазоне от 0 до 99999, выполняется с помощью следующего фильтра:

SecFilterSelective ARG_parameter "!^[0-9]{1,5}$"
Загрузка файлов

Запрещение загрузки файлов в произвольное место файлового пространства, но разрешение загрузки в конкретный подкаталог выполняется с помощью следующего фильтра:

SecFilterSelective HTTP_CONTENT_TYPE multipart/form-data
<Location /upload.php>
SecFilterInheritance Off
</Location>

Рекомендуемая конфигурация

Ниже приведена рекомендуемая минимальная конфигурация.

SecFilterEngine On

# Reject requests with status 403
SecFilterDefaultAction "deny, log, status:403"

# Some defaults
SecFilterScanPOST On
SecFilterCheckURLEncoding On
SecFilterCheckUnicodeEncoding Off

# Accept almost all byte values
SecFilterForceByteRange 1 255
SecUploadDir /tmp
SecUploadKeepFiles Off

# Only accept request encoding we know how to handle
# we exclude GET requests from this because some (automated)
# client supply
# "text/html" as Content-Type
SecFilterSelective REQUEST_METHOD "!^(GET | HEAD) $" chain
SecFilterSelective HTTP_Content-Type \
"!(^applicatin/x-www-form-urlencoded$ | ^multipart/form-data;)"

# Do not accept GET or HEAD requests with bodies
SecFilterSelective REQUEST_METHOD "^(GET | HEAD)$" chain
SecFilterSelective HTTP_Content-Length "!^$"

# Require Content-Length to be provided with every POST request
SecFilterSelective REQUEST_METHOD "^POST$" chain
SecFilterSelective HTTP_Content-Length "^$"

# Don’t accept transfer encodings we know we don’t handle
SecFilterSelective HTTP_Transfer-Encoding "!^$"
Пример 11.1.
Нияз Сабиров
Нияз Сабиров

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

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

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

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