Заголовок CORS Access-Control-Allow-Origin использует строгий белый список доверенных доменов и поддоменов
Описание
Это требование подразумевает, что заголовок CORS (Cross-Origin Resource Sharing) Access-Control-Allow-Origin должен быть настроен с использованием строгого белого списка доверенных доменов и поддоменов. Это позволяет контролировать, какие внешние источники могут получать доступ к ресурсам вашего веб-приложения, что повышает безопасность и предотвращает несанкционированный доступ.
Почему это важно
- Безопасность: Строгий белый список помогает предотвратить атаки, такие как CSRF (Cross-Site Request Forgery) и XSS (Cross-Site Scripting), ограничивая доступ к ресурсам только доверенным источникам.
 - Контроль доступа: Позволяет разработчикам точно определять, какие домены могут взаимодействовать с их API или ресурсами, что улучшает управление безопасностью.
 - Устойчивость к атакам: Настройка CORS с использованием белого списка снижает вероятность успешных атак на приложение, так как несанкционированные домены не смогут получить доступ к ресурсам.
 - Соответствие стандартам: Многие стандарты безопасности требуют строгого контроля доступа к ресурсам через CORS.
 
Способы реализации с примерами
Настройка заголовка Access-Control-Allow-Origin: Убедитесь, что ваш сервер отправляет заголовок с белым списком доверенных доменов.
Пример реализации в веб-приложении (Python с Flask):
from flask import Flask, request, make_response
app = Flask(__name__)
# Белый список доверенных доменов
ALLOWED_ORIGINS = [
    "https://trusted-domain.com",
    "https://sub.trusted-domain.com"
]
@app.after_request
def add_cors_headers(response):
    origin = request.headers.get('Origin')
    if origin in ALLOWED_ORIGINS:
        response.headers['Access-Control-Allow-Origin'] = origin
    else:
        response.headers['Access-Control-Allow-Origin'] = 'null'  # Запретить доступ
    return response
@app.route('/api/data')
def get_data():
    return {"message": "This is secure data."}
if __name__ == '__main__':
    app.run(ssl_context='adhoc')  # Для тестирования с HTTPS
Настройка заголовка на уровне сервера: Убедитесь, что ваш веб-сервер (например, Nginx или Apache) настроен для добавления заголовка Access-Control-Allow-Origin.
Пример (Nginx):
server {
    listen 443 ssl;
    server_name example.com;
    location /api/ {
        if ($http_origin ~* (https://trusted-domain.com|https://sub.trusted-domain.com)) {
            add_header Access-Control-Allow-Origin $http_origin;
        }
        # Другие настройки
    }
}
Пример (Apache):
<VirtualHost *:443>
    ServerName example.com
    <Location /api/>
        Header set Access-Control-Allow-Origin "https://trusted-domain.com"
        Header set Access-Control-Allow-Origin "https://sub.trusted-domain.com"
    </Location>
    DocumentRoot /var/www/html
</VirtualHost>
Примеры уязвимого кода
# Пример уязвимого кода на Python
from flask import Flask
app = Flask(__name__)
@app.after_request
def add_cors_headers(response):
    # Уязвимость: отсутствие строгого контроля доступа
    response.headers['Access-Control-Allow-Origin'] = '*'  # Разрешить доступ с любого домена
    return response
@app.route('/api/data')
def get_data():
    return {"message": "This is secure data."}
if __name__ == '__main__':
    app.run()
Проблема: Использование Access-Control-Allow-Origin: * позволяет любому домену получать доступ к ресурсам, что может привести к уязвимостям.
Причины, к которым может привести несоблюдение требования
- Уязвимость к атакам: Без строгого белого списка домены могут получить доступ к ресурсам, что увеличивает риск CSRF и XSS атак.
 - Потеря контроля: Отсутствие контроля над источниками запросов может привести к утечке конфиденциальной информации.
 - Проблемы с соответствием: Несоблюдение стандартов безопасности может привести к юридическим последствиям и штрафам.
 
Рекомендации
- Убедитесь, что заголовок 
Access-Control-Allow-Originнастроен с использованием строгого белого списка доверенных доменов. - Регулярно проверяйте и обновляйте белый список в соответствии с изменениями в архитектуре приложения.
 - Проводите аудит кода и конфигураций серверов на предмет отсутствия строгого контроля доступа через CORS.
 - Обучите команду разработчиков важности использования белых списков для повышения безопасности приложения.