Pengembangan AI yang Aman
Complete developer guide to building secure AI applications - from input validation to deployment
Updated: August 2026
Prinsip Keamanan
1. Pertahanan Mendalam
Implement multiple layers of security controls. No single control should be relied upon exclusively.
2. Hak Istimewa Terkecil
Berikan izin minimum yang diperlukan kepada pengguna, API, dan komponen AI.
3. Gagal Aman
Ketika kesalahan terjadi, defaultnya adalah status aman, bukan status permisif.
4. Zero Trust
Never trust, always verify. Validate at every boundary, including internal systems.
Validasi Input
All user input must be validated and sanitized before processing. This is your first line of defense against prompt injection and other attacks.
Kelas Validasi Input
```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()
```
Daftar Periksa Validasi
- Validasi pada batas aplikasi
- Periksa panjang masukan
- Pencocokan pola untuk injeksi
- Mendeteksi upaya pengkodean
- Ketik validasi
- Sanitasi sebelum pemrosesan
- Kegagalan validasi log
- Pembatasan tingkat
Penanganan Keluaran
LLM outputs must be validated and sanitized before being presented to users or passed to other systems.
Pemfilteran Konten
- Periksa paparan data sensitif
- Verifikasi tidak ada perintah sistem yang bocor
- Validasi format keluaran
- Periksa konten yang disuntikkan
Deteksi PII
- Pindai informasi pribadi
- Menyembunyikan atau menyunting data sensitif
- Mencatat upaya pemaparan PII
- Pemberitahuan pengguna saat terdeteksi
Validasi Format
- Validasi keluaran JSON
- Periksa struktur yang diharapkan
- Verifikasi nilai yang diizinkan
- Sanitasi HTML jika berlaku
Contoh Penangan Keluaran
```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
```
Keamanan API
Otentikasi
- Gunakan manajemen kunci API yang kuat
- Terapkan OAuth 2.0 jika memungkinkan
- Validasi token JWT
- Rotasi kunci API
Otorisasi
- Kontrol akses berbasis peran (RBAC)
- Pelingkupan kunci API
- Batas laju per pengguna
- Isolasi penyewa
Pembatasan Kecepatan
- Batasan berbasis token
- Batas berbasis permintaan
- Pengendalian biaya
- Pembatasan berjenjang
Daftar Periksa Keamanan API
- Gunakan HTTPS saja
- Terapkan pembatasan tingkat
- Validasi semua masukan
- Sanitasi semua keluaran
- Gunakan kunci API, bukan tertanam
- Terapkan penandatanganan permintaan
- Mencatat akses API
- Terapkan CORS dengan benar
Otentikasi & Otorisasi
Otentikasi Pengguna
- Kebijakan kata sandi yang kuat
- Dukungan MFA
- Manajemen sesi
- Kedaluwarsa token
Otentikasi API
- Manajemen kunci API
- Cakupan OAuth
- Validasi JWT
- Rotasi kunci
Otorisasi
- Implementasi RBAC
- Pemeriksaan izin
- Akses tingkat sumber daya
- Pencatatan audit
Keamanan Data
Klasifikasi Data
- Identifikasi data sensitif
- Kategorikan berdasarkan sensitivitas
- Terapkan kontrol berdasarkan kategori
- Audit rutin
Enkripsi
- TLS dalam transit
- AES saat istirahat
- Manajemen kunci
- Rotasi kunci
Penanganan PII
- Deteksi
- Minimisasi
- Manajemen izin
- Hak untuk menghapus
Logging & Pemantauan
Apa yang Harus Dicatat
Peristiwa Keamanan
- Upaya autentikasi
- Kegagalan otorisasi
- Batas nilai terlampaui
- Pola yang mencurigakan
Peristiwa Khusus AI
- Upaya injeksi cepat
- Akses cepat sistem
- Pemanggilan alat
- Akses data melalui AI
Acara Operasional
- Panggilan API
- Kesalahan dan pengecualian
- Metrik kinerja
- Pelacakan biaya
Memantau Praktik Terbaik
- Peringatan real-time untuk peristiwa keamanan
- Dasbor untuk metrik keamanan
- Deteksi anomali otomatis
- Integrasi dengan SIEM
- Peninjauan log rutin
- Kebijakan retensi
Kerentanan Umum
1. IDOR dalam Fitur AI
Referensi Objek Langsung yang Tidak Aman saat AI mengakses sumber daya
Contoh
User asks AI to "read file X" and AI has access without proper authorization checks.
2. SSRF melalui LLM
Pemalsuan Permintaan Sisi Server melalui panggilan alat AI
Contoh
Prompt menipu AI agar membuat permintaan ke layanan internal.
3. Bypass Otentikasi
Autentikasi yang lemah atau hilang untuk titik akhir AI
Contoh
Titik akhir API AI tanpa pemeriksaan autentikasi yang tepat.
4. Eksposur DB Vektor
Database vektor tidak terlindungi dengan penyematan sensitif
Contoh
DB vektor yang dapat diakses publik dengan sensitif tertanam data.
Kepatuhan
GDPR (EU)
- Dasar pemrosesan yang sah
- Minimisasi data
- Hak untuk mengakses/menghapus
- Portabilitas data
CCPA (California)
- Hak untuk mengetahui
- Hak untuk menghapus
- Hak untuk tidak ikut serta
- Non-diskriminasi
Khusus AI
- Persyaratan UU AI UE
- Penilaian risiko AI
- Kewajiban transparansi
- Pengawasan manusia