Конфигурация веб-сервера или сервера приложений с использованием белого списка ресурсов или систем для отправки запросов
Описание
Это требование подразумевает, что веб-сервер или сервер приложений должен быть настроен с использованием белого списка (allow list) ресурсов или систем, к которым он может отправлять запросы. Это помогает ограничить взаимодействие сервера только с доверенными источниками и предотвращает несанкционированные или вредоносные запросы, что повышает безопасность приложения.
Почему это важно
- Безопасность: Белый список помогает предотвратить атаки, такие как SSRF (Server-Side Request Forgery), где злоумышленник может попытаться заставить сервер отправить запросы на несанкционированные адреса.
- Контроль доступа: Ограничение отправки запросов только к доверенным ресурсам позволяет лучше контролировать, какие данные могут быть получены или отправлены.
- Устойчивость к атакам: Настройка белого списка снижает вероятность успешных атак на сервер, так как он не сможет взаимодействовать с недоверенными системами.
- Соответствие стандартам: Многие стандарты безопасности требуют наличия механизмов контроля доступа к ресурсам.
Способы реализации с примерами
Настройка белого списка на уровне приложения: В коде приложения можно реализовать проверку URL-адресов, к которым разрешено отправлять запросы.
Пример (Python):
import requests
# Белый список разрешенных URL
ALLOWED_URLS = [
"https://api.trusted.com",
"https://service.example.com"
]
def send_request(url):
if url not in ALLOWED_URLS:
raise ValueError("URL is not allowed.")
response = requests.get(url)
return response.json()
# Пример использования
try:
data = send_request("https://api.trusted.com/data")
print(data)
except ValueError as e:
print(f"Error: {str(e)}")
Настройка белого списка на уровне сервера: Некоторые веб-серверы и прокси-серверы могут поддерживать настройку белого списка для исходящих запросов.
Пример (Nginx): Использование модуля ngx_http_rewrite_module
для ограничения доступа к определенным URL.
location /api/ {
set $allowed 0;
if ($request_uri ~* "^/api/trusted-endpoint") {
set $allowed 1;
}
if ($allowed = 0) {
return 403; # Доступ запрещен
}
proxy_pass http://backend;
}
Пример (Apache): Использование модуля mod_rewrite
для ограничения доступа.
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/api/trusted-endpoint
RewriteRule ^ - [F] # Доступ запрещен
Примеры уязвимого кода
# Пример уязвимого кода на Python
import requests
def send_request(url):
# Уязвимость: отсутствие проверки URL
response = requests.get(url) # Может отправить запрос на недоверенный адрес
return response.json()
# Пример использования
data = send_request("http://malicious.example.com")
print(data)
Проблема: Отсутствие белого списка может привести к тому, что сервер будет отправлять запросы на недоверенные или вредоносные адреса.
Причины, к которым может привести несоблюдение требования
- Уязвимость к атакам: Без белого списка сервер может стать жертвой атак, таких как SSRF, что может привести к компрометации данных.
- Потеря контроля: Отсутствие контроля над исходящими запросами может привести к утечке конфиденциальной информации.
- Проблемы с соответствием: Несоблюдение стандартов безопасности может привести к юридическим последствиям и штрафам.
Рекомендации
- Настройте белый список ресурсов или систем, к которым сервер может отправлять запросы.
- Регулярно проверяйте и обновляйте белый список в соответствии с изменениями в архитектуре приложения.
- Проводите аудит кода и конфигураций серверов на предмет отсутствия механизмов контроля доступа к ресурсам.
- Обучите команду разработчиков важности использования белых списков для повышения безопасности приложения.