Конфигурация веб-сервера или сервера приложений с использованием белого списка ресурсов или систем для отправки запросов
Описание
Это требование подразумевает, что веб-сервер или сервер приложений должен быть настроен с использованием белого списка (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, что может привести к компрометации данных.
 - Потеря контроля: Отсутствие контроля над исходящими запросами может привести к утечке конфиденциальной информации.
 - Проблемы с соответствием: Несоблюдение стандартов безопасности может привести к юридическим последствиям и штрафам.
 
Рекомендации
- Настройте белый список ресурсов или систем, к которым сервер может отправлять запросы.
 - Регулярно проверяйте и обновляйте белый список в соответствии с изменениями в архитектуре приложения.
 - Проводите аудит кода и конфигураций серверов на предмет отсутствия механизмов контроля доступа к ресурсам.
 - Обучите команду разработчиков важности использования белых списков для повышения безопасности приложения.