Безопасная разработка искусственного интеллекта
Complete developer guide to building secure AI applications - from input validation to deployment
Updated: August 2026
Принципы безопасности
1. Углубленная защита
Implement multiple layers of security controls. No single control should be relied upon exclusively.
2. Наименьшие привилегии
Предоставьте минимально необходимые разрешения пользователям, API и компонентам искусственного интеллекта.
3. Безопасное прохождение
При возникновении ошибок по умолчанию используются безопасные состояния, а не разрешительные.
4. Нулевое доверие
Never trust, always verify. Validate at every boundary, including internal systems.
Проверка входных данных
All user input must be validated and sanitized before processing. This is your first line of defense against prompt injection and other attacks.
Класс проверки ввода
```python
import re
from typing import Optional, List
class InputValidator:
# Known injection patterns
INJECTION_PATTERNS = [
r"ignore\s+(previous|prior|all)\s+(instructions|rules)",
r"(forget|disregard)\s+(your|all)\s+(instructions|rules)",
r"you\s+are\s+(now|still)\s+(dan|do\s+anything)",
r"system\s+prompt:",
r"{{.*}}",
r"\[INST\]|\[/INST\]|<\|end\|>",
]
# Encoding patterns
ENCODING_PATTERNS = [
r"base64:", # Base64 prefix
r"\\x[0-9a-fA-F]{2}", # Hex encoding
r"%[0-9a-fA-F]{2}", # URL encoding
]
def validate(self, user_input: str) -> dict:
"""Validate user input for potential attacks."""
issues = []
# Length check
if len(user_input) > 10000:
issues.append("Input exceeds maximum length")
# Check for injection patterns
for pattern in self.INJECTION_PATTERNS:
if re.search(pattern, user_input, re.IGNORECASE):
issues.append(f"Suspicious pattern detected: {pattern}")
# Check for encoding attempts
for pattern in self.ENCODED_PATTERNS:
if re.search(pattern, user_input):
issues.append(f"Encoded content detected")
# Check for high entropy (possible encoding)
unique_chars = len(set(user_input))
if len(user_input) > 50 and unique_chars / len(user_input) < 0.3:
issues.append("High entropy detected - possible encoding")
return {
"valid": len(issues) == 0,
"issues": issues,
"sanitized": self._sanitize(user_input)
}
def _sanitize(self, user_input: str) -> str:
"""Basic sanitization."""
# Remove control characters
sanitized = re.sub(r'[\x00-\x1F\x7F]', '', user_input)
return sanitized.strip()
```
Контрольный список проверки
- Проверка на границе приложения
- Проверить длину входных данных
- Сопоставление шаблона для внедрения
- Обнаружение попыток кодирования
- Проверка типов
- Очистка перед обработкой
- Ошибки проверки журнала
- Ограничение скорости
Обработка вывода
LLM outputs must be validated and sanitized before being presented to users or passed to other systems.
Фильтрация контента
- Проверка конфиденциальных данных
- Проверьте отсутствие утечек системных подсказок
- Проверка формата вывода
- Проверьте наличие внедренного контента.
Обнаружение PII
- Сканирование личной информации
- Маскировать или редактировать конфиденциальные данные
- Записать в журнал попытки раскрытия личных данных.
- Уведомление пользователя при обнаружении
Проверка формата
- Проверка выходных данных JSON
- Проверить ожидаемую структуру
- Проверка допустимых значений
- Очистка HTML, если применимо
Пример обработчика вывода
```python
import re
import json
class OutputHandler:
PII_PATTERNS = {
"ssn": r"\b\d{3}-\d{2}-\d{4}\b",
"email": r"\b[\w.-]+@[\w.-]+\.\w+\b",
"phone": r"\b\d{3}[-.]?\d{3}[-.]?\d{4}\b",
}
def process_output(self, raw_output: str) -> dict:
"""Process and validate LLM output."""
result = {
"original": raw_output,
"cleaned": raw_output,
"warnings": [],
"blocked": False
}
# Check for system prompt leakage
if "system prompt" in raw_output.lower():
result["warnings"].append("System prompt reference detected")
# Scan for PII
for pii_type, pattern in self.PII_PATTERNS.items():
matches = re.findall(pattern, raw_output)
if matches:
result["warnings"].append(f"{pii_type} detected in output")
# Optionally mask
result["cleaned"] = re.sub(pattern, "[REDACTED]", result["cleaned"])
return result
```
Безопасность API
Аутентификация
- Используйте надежное управление ключами API
- Внедрить OAuth 2.0, где это возможно
- Проверка токена JWT
- Ротация ключей API
Авторизация
- Ролевой контроль доступа (RBAC)
- Область ключа API
- Ограничения скорости на пользователя
- Изоляция арендатора
Ограничение скорости
- Ограничения на основе токенов
- Ограничения на основе запросов
- Контроль затрат
- Многоуровневое регулирование
Контрольный список безопасности API
- Использовать только HTTPS
- Внедрение ограничения скорости
- Проверка всех входных данных
- Обеззараживать все выходные данные
- Используйте ключи API, а не встроенные
- Внедрение подписи запросов
- Журнал доступа к API
- Правильно внедрите CORS
Аутентификация и авторизация
Аутентификация пользователя
- Политики надежных паролей
- Поддержка MFA
- Управление сеансами
- Срок действия токена
Аутентификация API
- Управление ключами API
- Области OAuth
- Проверка JWT
- Ротация ключей
Авторизация
- Реализация RBAC
- Проверки разрешений
- Доступ на уровне ресурсов
- Журналирование аудита
Безопасность данных
Классификация данных
- Идентификация конфиденциальных данных
- Классифицировать по чувствительности
- Применить меры контроля по категориям
- Регулярные проверки
Шифрование
- TLS в пути
- AES в состоянии покоя
- Управление ключами
- Ротация ключей
Обработка личных данных
- Обнаружение
- Минимизация
- Управление согласием
- Право на удаление
Журналирование и мониторинг
Что регистрировать
События безопасности
- Попытки аутентификации
- Ошибки авторизации
- Превышен лимит скорости
- Подозрительные шаблоны
Конкретные события AI
- Попытки быстрого внедрения
- Доступ к системным подсказкам
- Вызовы инструментов
- Доступ к данным через ИИ
Операционные события
- Вызовы API
- Ошибки и исключения
- Метрики производительности
- Отслеживание затрат
Лучшие практики мониторинга
- Оповещение в режиме реального времени о событиях безопасности
- Панель показателей безопасности
- Автоматическое обнаружение аномалий
- Интеграция с SIEM
- Регулярный просмотр журналов
- Политики хранения
Распространенные уязвимости
1. IDOR в функциях AI
Небезопасная прямая ссылка на объект при доступе ИИ к ресурсам
Пример
User asks AI to "read file X" and AI has access without proper authorization checks.
2. SSRF через LLM
Запрос на стороне сервера Подделка с помощью вызовов инструментов искусственного интеллекта
Пример
Прямые трюки с искусственным интеллектом для выполнения запросов к внутренним службам.
3. Обход аутентификации
Слабая или отсутствующая аутентификация для конечных точек ИИ
Пример
Конечные точки AI API без надлежащих проверок аутентификации.
4. Экспозиция векторной БД
Незащищенная векторная база данных с конфиденциальными встраиваниями
Пример
Общедоступная векторная база данных со встроенной конфиденциальной информацией данные.
Соответствие
GDPR (EU)
- Законодательная основа для обработки
- Минимизация данных
- Право на доступ/удаление
- Переносимость данных
CCPA (California)
- Право знать
- Право на удаление
- Право на отказ
- Недискриминация
AI-Specific
- Требования Закона ЕС об искусственном интеллекте
- Оценки рисков ИИ
- Обязательства по прозрачности
- Человеческий надзор