Sobes.tech
Назад к вопросам
Junior — Middle
63

Какие средства и технологии ты используешь для обеспечения безопасности системы от возможных киберугроз?

Ответ от нейросети

sobes.tech AI

Что хотят услышать интервьюеры:

Важно показать, что безопасность — это не одна технология, а набор практик на уровне кода, инфраструктуры и процессов. Обычно ожидают осознанный подход: минимальные привилегии, защита секретов, валидация входных данных, обновления зависимостей, мониторинг и журналирование. Для Python-проектов также важны безопасная работа с пакетами, конфигурацией и веб-уязвимостями.

Определение:

Защита системы от киберугроз — это набор мер, которые снижают вероятность компрометации данных, сервисов и учетных записей. На практике это включает контроль доступа, безопасную разработку, защиту секретов, проверку входных данных, регулярное обновление библиотек и наблюдаемость системы. Цель — не допустить типовые атаки вроде SQL injection, XSS, утечки токенов, подмены зависимостей и несанкционированного доступа.

Пример использования:

В Python-проекте для веб-сервиса обычно применяют валидацию данных на входе, хранят секреты в переменных окружения или secret-хранилищах, используют параметризованные запросы к БД, обновляют зависимости через lock-файлы и CI-проверки, а также включают логирование подозрительных событий.

import os
import logging

logging.basicConfig(level=logging.INFO)

API_TOKEN = os.getenv("API_TOKEN")
if not API_TOKEN:
    raise RuntimeError("API_TOKEN is not configured")

def get_user_by_id(cursor, user_id: int):
    query = "SELECT id, name FROM users WHERE id = %s"
    cursor.execute(query, (user_id,))
    return cursor.fetchone()

def process_request(user_input: str):
    if not user_input.isdigit():
        logging.warning("Invalid input received")
        return None
    return int(user_input)

Пояснение кода:

  • Секрет API_TOKEN не хранится в коде, а берется из переменной окружения.
  • Если токен не задан, приложение явно падает, чтобы не работать в небезопасном состоянии.
  • Запрос к БД параметризован: значение user_id передается отдельно от SQL-строки, что защищает от SQL-инъекций.
  • Входная строка проверяется перед использованием, чтобы отсечь некорректные данные.
  • Подозрительные события логируются, чтобы их можно было расследовать.

Ключевые моменты:

  • Использовать принцип минимальных привилегий для пользователей, сервисов и API-ключей.
  • Хранить секреты в env/secret manager, не в коде и не в репозитории.
  • Всегда валидировать и санитизировать входные данные.
  • Использовать параметризованные запросы и безопасные ORM-практики.
  • Регулярно обновлять зависимости и проверять их на уязвимости.
  • Настроить логирование, мониторинг и алерты на подозрительную активность.