Часто встречающиеся проблемы и пути их устранения#
В случае падения приложения cache данных по сессиям удаляется, что приводит к обрыву активных сессий пользователей и их "выбросу" из приложений, использующих KeyCloak.SE
Сертификат#
SSL-сертификат – это цифровой сертификат, удостоверяющий подлинность веб-сайта и позволяющий использовать зашифрованное соединение. SSL-сертификат содержит следующую информацию:
доменное имя, на которое оформлен SSL-сертификат;
юридическое лицо, которое владеет сертификатом;
физическое местонахождение владельца сертификата (город, страна);
срок действия сертификата;
реквизиты компании-поставщика SSL-сертификатa.
Протокол HTTPS, поддерживающий технологию шифрования TLS/SSL, использует сертификаты для проверки принадлежности открытого ключа его реальному владельцу. Он создает безопасный канал в незащищенной сети. Это обеспечивает достаточную защиту от перехватчиков и атак типа «человек посередине» при условии, что используются адекватные наборы шифров и что сертификат сервера проверен и доверен.
Способы получения SSL-сертификата:
Использовать сертификат, выданный CA (Certification authority), то есть центром сертификации или удостоверяющим центром;
Использовать самоподписанный сертификат;
Использовать «пустой» сертификат.
Самоподписанный сертификат — сертификат, созданный самим пользователем — в этом случае издатель сертификата совпадает с владельцем сертификата. «Пустой» сертификат — сертификат, содержащий фиктивную информацию, используемую в качестве временной для настройки SSL и проверки его функциональности в данной среде.
Для получения самоподписанного сертификата необходимо:
ssl.conf
[ req ]
default_bits = 4096
distinguished_name = req_distinguished_name
req_extensions = req_ext
[ req_distinguished_name ]
countryName = Country Name (2 letter code)
countryName_default = RU
stateOrProvinceName = State or Province Name (full name)
stateOrProvinceName_default = Moscow
localityName = Locality Name (eg, city)
localityName_default = Moscow
organizationName = Organization Name (eg, company)
organizationName_default = Sberbank
commonName = Common Name (e.g. server FQDN or YOUR name)
commonName_max = 64
commonName_default = apps.dev-gen.my.company.ru
[ req_ext ]
subjectAltName = @alt_names
[alt_names]
DNS.1 = *.apps.dev-gen.my.company.ru
get_selfsigned_cert.sh
openssl req -newkey rsa:4096 -x509 -days 3654 -nodes \
-config ssl.conf \
-keyout ca.key -out ca.crt
# Создание сертов под сервер\стенд
name=proxy-server
openssl req -new -newkey rsa:4096 -sha256 -nodes \
-keyout $name.key -out $name.csr \
-config ssl.conf
openssl x509 -req -CAcreateserial -days 1000 -sha256 \
-CA ca.crt -CAkey ca.key \
-extensions req_ext \
-extfile ssl.conf \
-in $name.csr -out $name.crt
Уязвимости#
Неиспользуемые зависимости#
Для того чтобы используемые модули были максимально безопасными, рекомендуется исключать из зависимостей неиспользуемые зависимости. Эти неиспользуемые зависимости по-прежнему доступны в вашей программе и могут содержать уязвимые места. В целом, независимо от того, используется зависимость или нет, разработчики должны проверить, безопасно ли включать ее в свою систему.
Maven помогает определить неиспользуемые зависимости: pom.xml
<build>
<plugins>
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.1.2</version>
</plugin>
</plugins>
</build>
Необходимо запустить в командной строке:
mvn dependency:analyze
IntelliJ IDEA так же позволяет найти уязвимости в используемых зависимостях.
XSS#
XSS (межсайтовый скриптинг) – одна из разновидностей атак на веб-системы, которая подразумевает внедрение вредоносного кода на определенную страницу сайта и взаимодействие этого кода с удаленным сервером злоумышленников при открытии страницы пользователем.
Основная цель межсайтового скриптинга – кража cookies пользователей при помощи встроенного на сервере скрипта с дальнейшей выборкой необходимых данных и использованием их для последующих атак и взломов. Злоумышленник осуществляет атаку пользователей не напрямую, а с использованием уязвимостей веб-сайта, который посещают жертвы, и внедряет специальный JavaScript. В браузере у пользователей этот код отображается как единая часть сайта. При этом посещаемый ресурс по факту является соучастником XSS-атаки.
Необходимо экранировать входящие и исходящие строковые параметры.
EscapeHtml.java
org.apache.commons.lang.StringEscapeUtils.escapeHtml("example_with_vulnerability");
Либо заменять специальные символы (&,<,>,",'), которые используются для записи скрипта, на html entities name.