Beveiligde AI-ontwikkeling
Complete developer guide to building secure AI applications - from input validation to deployment
Updated: August 2026
Beveiligingsprincipes
1. Diepgaande verdediging
Implement multiple layers of security controls. No single control should be relied upon exclusively.
2. Least Privilege
Verleen minimaal noodzakelijke machtigingen aan gebruikers, API's en AI-componenten.
3. Fail Secure
Als er fouten optreden, moet u standaard de status beveiligen in plaats van de permissieve status.
4. Zero Trust
Never trust, always verify. Validate at every boundary, including internal systems.
Invoervalidatie
All user input must be validated and sanitized before processing. This is your first line of defense against prompt injection and other attacks.
Invoervalidatieklasse
```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()
```
Validatiechecklist
- Valideren op de grens van de applicatie
- Controleer invoerlengte
- Patroonovereenkomst voor injectie
- Coderingspogingen detecteren
- Typevalidatie
- Opschonen vóór verwerking
- Logboekvalidatiefouten
- Snelheidsbeperking
Uitvoerverwerking
LLM outputs must be validated and sanitized before being presented to users or passed to other systems.
Inhoudsfiltering
- Controleren op blootstelling aan gevoelige gegevens
- Controleer of er geen systeemprompts zijn gelekt
- Uitvoerformaat valideren
- Controleer op geïnjecteerde inhoud
PII-detectie
- Scannen naar persoonlijke informatie
- Gevoelige gegevens maskeren of redigeren
- Pogingen tot PII-blootstelling loggen
- Gebruikersmelding bij detectie
Formatvalidatie
- JSON-uitvoer valideren
- Controleer de verwachte structuur
- Verifieer toegestane waarden
- HTML opschonen, indien van toepassing
Voorbeeld van uitvoerhandler
```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-beveiliging
Authenticatie
- Gebruik krachtig API-sleutelbeheer
- Implementeer OAuth 2.0 waar mogelijk
- JWT-tokenvalidatie
- API-sleutelrotatie
Autorisatie
- Op rollen gebaseerde toegangscontrole (RBAC)
- API-sleutelscoping
- Snelheidslimieten per gebruiker
- Tenantisolatie
Snelheidsbeperking
- Tokengebaseerde limieten
- Op verzoeken gebaseerde limieten
- Kostenbeheersing
- Gelaagde beperking
API-beveiligingschecklist
- Gebruik alleen HTTPS
- Beperking van de implementatiesnelheid
- Alle invoer valideren
- Alle uitvoer opschonen
- Gebruik API-sleutels, niet ingebed
- Ondertekening van verzoeken implementeren
- Log API-toegang
- CORS goed implementeren
Authenticatie en autorisatie
Gebruikersauthenticatie
- Sterk wachtwoordbeleid
- MFA-ondersteuning
- Sessiebeheer
- Vervaldatum van token
API-verificatie
- API-sleutelbeheer
- OAuth-bereiken
- JWT-validatie
- Sleutelrotatie
Autorisatie
- RBAC-implementatie
- Toestemmingscontroles
- Toegang op bronniveau
- Auditregistratie
Gegevensbeveiliging
Gegevensclassificatie
- Identificeer gevoelige gegevens
- Categoriseren op gevoeligheid
- Controles toepassen op categorie
- Regelmatige audits
Encryptie
- TLS in transit
- AES in rust
- Sleutelbeheer
- Sleutelrotatie
PII-verwerking
- Detectie
- Minimalisatie
- Toestemmingsbeheer
- Recht op verwijdering
Logging en monitoring
Wat te loggen
Beveiligingsgebeurtenissen
- Authenticatiepogingen
- Autorisatiefouten
- Snelheidslimiet overschreden
- Verdachte patronen
AI-specifieke gebeurtenissen
- Snelle injectiepogingen
- Toegang tot systeemprompt
- Aanroepen van tools
- Gegevenstoegang via AI
Operationele gebeurtenissen
- API-oproepen
- Fouten en uitzonderingen
- Prestatiestatistieken
- Kosten bijhouden
Beste praktijken voor monitoring
- Real-time waarschuwingen voor beveiligingsgebeurtenissen
- Dashboard voor beveiligingsstatistieken
- Geautomatiseerde detectie van afwijkingen
- Integratie met SIEM
- Regelmatige logcontrole
- Retentiebeleid
Veelvoorkomende kwetsbaarheden
1. IDOR in AI-functies
Onveilige directe objectreferentie wanneer AI toegang krijgt tot bronnen
Voorbeeld
User asks AI to "read file X" and AI has access without proper authorization checks.
2. SSRF via LLM
Vervalsing van verzoeken aan de serverzijde via AI-toolaanroepen
Voorbeeld
Prompt verleidt AI om verzoeken te doen aan interne services.
3. Verificatie omzeilen
Zwakke of ontbrekende authenticatie voor AI-eindpunten
Voorbeeld
AI API-eindpunten zonder de juiste verificatiecontroles.
4. Vector DB-blootstelling
Onbeschermde vectordatabase met gevoelige insluitingen
Voorbeeld
Openbaar toegankelijke vector-DB met ingebedde gevoelige gegevens.
Compliance
GDPR (EU)
- Wettelijke basis voor verwerking
- Gegevensminimalisatie
- Recht op toegang/verwijdering
- Dataportabiliteit
CCPA (California)
- Recht om te weten
- Recht om te verwijderen
- Recht om u af te melden
- Non-discriminatie
AI-specifiek
- EU AI Act-vereisten
- AI-risicobeoordelingen
- Transparantieverplichtingen
- Menselijk toezicht