Bezpieczny rozwój sztucznej inteligencji
Complete developer guide to building secure AI applications - from input validation to deployment
Updated: August 2026
Zasady bezpieczeństwa
1. Głęboka obrona
Implement multiple layers of security controls. No single control should be relied upon exclusively.
2. Najmniejsze uprawnienia
Przyznaj minimalne niezbędne uprawnienia użytkownikom, interfejsom API i komponentom AI.
3. Fail Secure
W przypadku wystąpienia błędów domyślnie wybieraj stany bezpieczne, a nie zezwalające.
4. Zero zaufania
Never trust, always verify. Validate at every boundary, including internal systems.
Weryfikacja danych wejściowych
All user input must be validated and sanitized before processing. This is your first line of defense against prompt injection and other attacks.
Klasa walidacji danych wejściowych
```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()
```
Lista kontrolna walidacji
- Weryfikacja na granicy aplikacji
- Sprawdź długość danych wejściowych
- Dopasowanie wzorca do wstrzykiwania
- Wykrywanie prób kodowania
- Weryfikacja typu
- Oczyść przed przetwarzaniem
- Rejestruj błędy weryfikacji
- Ograniczanie szybkości
Obsługa danych wyjściowych
LLM outputs must be validated and sanitized before being presented to users or passed to other systems.
Filtrowanie treści
- Sprawdź, czy wrażliwe dane są narażone
- Sprawdź, czy nie wyciekły żadne monity systemowe
- Sprawdź format wyjściowy
- Sprawdź, czy nie wstrzyknięto treści
Wykrywanie informacji osobistych
- Skanowanie w poszukiwaniu danych osobowych
- Maskuj lub redaguj wrażliwe dane
- Zaloguj próby ujawnienia danych osobowych
- Powiadomienie użytkownika w przypadku wykrycia
Weryfikacja formatu
- Weryfikacja wyników JSON
- Sprawdź oczekiwaną strukturę
- Weryfikacja dozwolonych wartości
- Oczyść HTML, jeśli ma to zastosowanie
Przykład procedury obsługi danych wyjściowych
```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
```
Bezpieczeństwo API
Uwierzytelnianie
- Użyj silnego zarządzania kluczami API
- Wdroż OAuth 2.0 tam, gdzie to możliwe
- Weryfikacja tokenu JWT
- Rotacja kluczy API
Autoryzacja
- Kontrola dostępu oparta na rolach (RBAC)
- Zakres kluczy API
- Limity stawek na użytkownika
- Izolacja dzierżawy
Ograniczenie szybkości
- Limity oparte na tokenach
- Limity oparte na żądaniach
- Kontrola kosztów
- Warstwowe ograniczanie przepustowości
Lista kontrolna bezpieczeństwa API
- Używaj tylko protokołu HTTPS
- Wdrożenie ograniczania szybkości
- Weryfikacja wszystkich danych wejściowych
- Wyczyść wszystkie dane wyjściowe
- Użyj kluczy API, a nie wbudowanych
- Wdrażaj podpisywanie żądań
- Log API dostępu
- Prawidłowe wdrożenie CORS
Uwierzytelnianie i autoryzacja
Uwierzytelnianie użytkownika
- Silne zasady dotyczące haseł
- Wsparcie MFA
- Zarządzanie sesjami
- Wygaśnięcie tokena
Uwierzytelnianie API
- Zarządzanie kluczami API
- Zakresy OAuth
- Weryfikacja JWT
- Rotacja kluczy
Autoryzacja
- Wdrożenie RBAC
- Kontrola uprawnień
- Dostęp na poziomie zasobów
- Rejestrowanie audytu
Bezpieczeństwo danych
Klasyfikacja danych
- Identyfikacja wrażliwych danych
- Kategoryzacja według wrażliwości
- Zastosuj kontrolę według kategorii
- Regularne audyty
Szyfrowanie
- TLS w tranzycie
- AES w stanie spoczynku
- Zarządzanie kluczami
- Rotacja kluczy
Obsługa danych osobowych
- Wykrywanie
- Minimalizacja
- Zarządzanie zgodami
- Prawo do usunięcia
Logowanie i monitorowanie
Co rejestrować
Zdarzenia związane z bezpieczeństwem
- Próby uwierzytelnienia
- Błędy autoryzacji
- Przekroczono limit szybkości
- Podejrzane wzorce
Zdarzenia specyficzne dla AI
- Szybkie próby wstrzyknięcia
- Dostęp natychmiastowy do systemu
- Wywołania narzędzi
- Dostęp do danych przez sztuczną inteligencję
Zdarzenia operacyjne
- Wywołania API
- Błędy i wyjątki
- Metryki wydajności
- Śledzenie kosztów
Monitorowanie najlepszych praktyk
- Alerty w czasie rzeczywistym o zdarzeniach związanych z bezpieczeństwem
- Panel wskaźników bezpieczeństwa
- Automatyczne wykrywanie anomalii
- Integracja z SIEM
- Regularny przegląd dzienników
- Zasady przechowywania
Typowe luki w zabezpieczeniach
1. IDOR w funkcjach AI
Niebezpieczne bezpośrednie odniesienie do obiektu, gdy sztuczna inteligencja uzyskuje dostęp do zasobów
Przykład
User asks AI to "read file X" and AI has access without proper authorization checks.
2. SSRF przez LLM
Fałszowanie żądań po stronie serwera Wywołania narzędzi AI
Przykład
Podpowiadaj oszukać sztuczną inteligencję, aby wysyłała żądania do usług wewnętrznych.
3. Pominięcie uwierzytelniania
Słabe lub brakujące uwierzytelnianie dla punktów końcowych AI
Przykład
Punkty końcowe interfejsu API AI bez odpowiednich kontroli uwierzytelniania.
4. Ekspozycja Vector DB
Niechroniona baza danych wektorów z wrażliwymi osadzaniami
Przykład
Publicznie dostępna baza danych wektorowych z wbudowanymi wrażliwymi danymi dane.
Zgodność
GDPR (EU)
- Podstawa prawna przetwarzania
- Minimalizacja danych
- Prawo dostępu/usuwania
- Przenośność danych
CCPA (California)
- Prawo do wiedzy
- Prawo do usunięcia
- Prawo do rezygnacji
- Zakaz dyskryminacji
Specyficzne dla AI
- Wymagania ustawy UE o sztucznej inteligencji
- Oceny ryzyka AI
- Obowiązki w zakresie przejrzystości
- Nadzór ludzki