
- •17. Безопасность в Веб-разработке
- •17.1. Безопасность в Интернете
- •17.1.1. Информационная безопасность
- •17.1.2. Виды угроз и способы борьбы с ними
- •17.1.2.1. Аутентификация (Authentication)
- •17.1.2.1.1. Подбор (Brute Force)
- •17.1.2.1.2. Недостаточная аутентификация (Insufficient Authentication)
- •17.1.2.1.3. Небезопасное восстановление паролей (Weak Password Recovery Validation).
- •17.1.2.2. Авторизация (Authorization)
- •17.1.2.2.1. Предсказуемое значение идентификатора сессии (Credential/Session Prediction)
- •17.1.2.2.2. Недостаточная авторизация (Insufficient Authorization)
- •17.1.2.2.3. Отсутствие таймаута сессии (Insufficient Session Expiration)
- •17.1.2.2.4. Фиксация сессии (Session Fixation)
- •17.1.2.3. Атаки на клиентов (Client-side Attacks)
- •17.1.2.3.1. Подмена содержимого (Content Spoofing)
- •17.1.2.3.2. Межсайтовое выполнение сценариев (Cross-site Scripting, xss)
- •17.1.2.3.3. Расщепление http-запроса (http Response Splitting)
- •17.1.2.4. Выполнение кода (Command Execution)
- •17.1.2.4.1. Переполнение буфера (Buffer Overflow)
- •17.1.2.4.2. Атака на функции форматирования строк (Format String Attack)
- •17.1.2.4.3. Внедрение операторов ldap (ldap Injection)
- •17.1.2.4.4. Выполнение команд ос (os Commanding)
- •17.1.2.4.5. Внедрение операторов sql (sql Injection)
- •17.1.2.4.6. Внедрение серверных расширений (ssi Injection)
- •17.1.2.4.7. Внедрение операторов xPath (xPath Injection)
- •17.1.2.5. Разглашение информации (Information Disclosure)
- •17.1.2.5.1. Индексирование директорий (Directory Indexing)
- •17.1.2.5.2. Идентификация приложений (Web Server/Application Fingerprinting)
- •17.1.2.5.3. Утечка информации (Information Leakage)
- •17.1.2.6.2. Отказ в обслуживании (Denial of Service)
- •17.1.2.6.3. Недостаточное противодействие автоматизации (Insufficient Anti-automation)
- •17.1.2.6.4. Недостаточная проверка процесса (Insufficient Process Validation)
- •17.1.2.7. Вирусы и приложения типа "троянский конь"
- •17.1.3. Ключевые термины
- •17.2. Xss Filter
- •17.2.1. Общее описание
- •17.2.2. Исследование эффективности xss Filter
- •17.2.2.1. Сохраненный вариант
- •17.2.2.2. Dom-based xss
- •17.2.2.3. Отраженный вариант
- •17.2.2.3.1. Внедрение кода в Javascript
- •17.2.2.3.2. Внедрение кода в тег
- •17.2.2.3.3. Внедрение кода в параметр тега
- •17.2.2.3.4. Внедрение кода в html
- •17.2.2.3.5. Использование расщепления http-ответа
- •17.2.2.4. Заключение
- •17.2.3. Ключевые термины
- •17.3. SmartScreen Filter
- •17.3.1. Общие сведения
- •17.3.2. Ключевые термины
- •17.4. Data Execution Prevention
- •17.4.1. Общие сведения
- •17.4.2. Ключевые термины
- •17.5. Https
- •17.5.1. Ssl
- •17.5.2. Https
- •17.5.3. Настройка https
- •17.5.3.1. Пример настройки для iis 6
- •17.5.3.3. Пример настройки для iis 7
- •17.5.4. Ключевые термины
- •17.6. Краткие итоги
17.5.2. Https
HTTPS (Hypertext Transfer Protocol Secure) – расширение протокола HTTP, поддерживающее шифрование [37]. Данные, передаваемые по протоколу HTTP, "упаковываются" в криптографический протокол SSL или TLS, тем самым обеспечивается защита этих данных.
HTTPS был разработан компанией Netscape Communications Corporation, чтобы обеспечить аутентификацию и защищенное соединение. HTTPS широко используется в мире Веб для приложений, в которых важна безопасность соединения, например, в платежных системах.
В настоящее время HTTPS поддерживается наиболее популярными браузерами и используется в почтовом сервисе GMail.
Строго говоря, HTTPS не является отдельным протоколом. По сути это обычный HTTP, работающий через шифрованные транспортные механизмы SSL и TLS. Он обеспечивает приемлемую защиту от атак, основанных на прослушивании сетевого соединения – от снифферских атак и атак типа man-in-the-middle при условии, что будут использоваться адекватные шифрующие средства, сертификат сервера проверен и ему доверяют.
По умолчанию HTTPS URL использует 443 TCP-порт (для незащищенного HTTP – 80). Чтобы подготовить веб-сервер для обработки https-соединений, администратор должен получить и установить в систему сертификат для этого веб-сервера. Сертификат состоит из двух частей (двух ключей) – public и private. Public-часть сертификата используется для зашифровывания трафика от клиента к серверу в защищенном соединении, private-часть – для расшифровывания полученного от клиента зашифрованного трафика на сервере. Сертификат можно получить в компании-сертификаторе (например, VeriSign) – это платная услуга. Сертификат должен быть подписан уполномоченной стороной (компанией-сертификатором – Certificate authority), которая будет гарантировать клиентам, что держатель сертификата является тем, за кого себя выдает.
Некоторые сайты используют собственные сертификаты. Существует возможность создать такой сертификат, не обращаясь в компанию-сертификатор. Такие сертификаты могут быть созданы для серверов, работающих под Unix, с помощью таких утилит, как ssl-ca от OpenSSL или gensslcert от SuSE. Подписываются такие сертификаты этим же сертификатом и называются self-signed. Такие сертификаты менее надежны, чем сертификаты, подписанные компаниями-сертификаторами. Такое использование защищает от пассивного прослушивания, но без проверки сертификата каким-то другим способом (например, звонок владельцу и проверка контрольной суммы сертификата) этот метод не будет являться вполне безопасным.
Эта система также может использоваться для аутентификации клиента, чтобы обеспечить доступ к серверу только авторизированным пользователям. Для этого администратор обычно создает сертификаты для каждого пользователя и загружает их в браузер каждого пользователя. Также будут приниматься все сертификаты, подписанные организациями, которым доверяет сервер. Такой сертификат обычно содержит имя и адрес электронной почты авторизованного пользователя, которые проверяются при каждом соединении, чтобы проверить личность пользователя без ввода пароля.
В HTTPS для шифрования используется длина ключа 40, 56, или 128 бит. Некоторые старые версии браузеров используют длину ключа 40 бит (пример тому – IE, версий до 4.0), что связано с экспортными ограничениями в США. Длина ключа 40 бит не является сколько-нибудь надежной. Многие современные сайты требуют использования новых версий браузеров, поддерживающих шифрование с длиной ключа 128 бит, с целью обеспечить достаточный уровень безопасности. Такое шифрование значительно затрудняет злоумышленнику поиск паролей и другой личной информации.