Перейти к содержимому

Секреты в логах LLM

LLM любит цитировать ввод пользователя в ответе. Если пользователь по ошибке (или нарочно) прислал свой OPENAI_API_KEY — он попадёт в ваш лог. Это compliance-инцидент в чистом виде.

Самый простой детектор поверх любого payload-а:

import re, os, requests
PATTERNS = [
r"sk-[A-Za-z0-9]{20,}", # OpenAI / Anthropic style
r"AKIA[0-9A-Z]{16}", # AWS Access Key
r"ghp_[A-Za-z0-9]{30,}", # GitHub PAT
r"xox[baprs]-[A-Za-z0-9-]{10,}", # Slack
r"AIza[0-9A-Za-z\-_]{35}", # Google API key
r"eyJ[A-Za-z0-9_\-]{20,}\.[A-Za-z0-9_\-]{20,}\.[A-Za-z0-9_\-]{20,}", # JWT
]
RX = re.compile("|".join(PATTERNS))
def scan(text: str, where: str):
m = RX.search(text or "")
if m:
token = m.group(0)
push(f"🔑 LEAK в {where}",
f"Похожий на секрет токен: {token[:6]}{token[-4:]}\n"
f"Длина: {len(token)} символов\n\n"
"Немедленно ротируйте ключ и удалите запись из логов.",
priority=10)
return True
return False
def push(t, m, p):
requests.post(f"{os.environ['NOTIFLY_URL']}/message",
params={"token": os.environ["NOTIFLY_TOKEN"]},
json={"title": t, "message": m, "priority": p}, timeout=5)

Запускайте scan() на user-input до отправки в LLM (отказывайте), и на output модели до записи в лог (маскируйте + алёртите).