Bezpieczeństwo w AI-SQL-Chat

Ostatnia aktualizacja:

Ten dokument opisuje techniczne i organizacyjne środki bezpieczeństwa wdrożone w AI-SQL-Chat. Stawiamy na minimalny zakres danych, zabezpieczenia SQL by-design oraz wielowarstwową ochronę (defense-in-depth).

1) Dane i prywatność

  • Domyślnie wyniki zapytań nie są zapisywane trwale; dane przetwarzamy w pamięci na czas wykonania.
  • Logi techniczne minimalne (statusy, metryki, sygnatury błędów) — bez treści danych, o ile to możliwe.
  • Patrz Polityka prywatności w zakresie RODO i praw osób.

2) Szyfrowanie i tajemnice

  • HTTPS/TLS na całej ścieżce (w tym w Oracle Cloud LB).
  • Tajemnice (klucze API, hasła) przechowywane w zmiennych środowiskowych lub menedżerze sekretów; brak w repozytorium.

3) Model zagrożeń zabezpieczenia (skrót)

  • Wstrzyknięcia SQL i payloady omijające walidację.
  • Nadmierne obciążenia (DoS/DDoS, brute-force endpointów).
  • Nieautoryzowany dostęp do plików statycznych i przesłanych schematów.
  • Ataki na warstwę przeglądarki (XSS/CSRF), manipulacja nagłówkami.
  • Wycieki przez logi, błędną konfigurację CORS, lub zbyt szerokie uprawnienia.

4) Zasady projektowe

  • Single-SELECT only. Generujemy i dopuszczamy wyłącznie jedną instrukcję SELECT.
  • Domyślna minimalizacja danych. Brak trwałego przechowywania wyników; tymczasowe dane tylko w pamięci procesu.
  • Bezpieczne wartości domyślne. Twarde limity, czarne listy wzorców, ograniczenia rozmiaru payloadu.

5) Ochrona SQL (middleware)

Wyjście AI i zapytania użytkownika przechodzą przez filtr syntaktyczny i semantyczny:

// pseudokod (Node/Express)
const banned = /\b(INSERT|UPDATE|DELETE|DROP|TRUNCATE|ALTER|CREATE|RENAME|MERGE|CALL|EXEC|OUTFILE|INFILE|SLEEP|BENCHMARK)\b/i;

function enforceSQL(req, res, next){
  let sql = String(req.body.sql || req.body.question || '');
  if(!/^\s*SELECT\b/i.test(sql)) return res.status(400).json({error:'Tylko SELECT'});
  if(banned.test(sql))          return res.status(400).json({error:'Instrukcja zabroniona'});
  if(!/\bLIMIT\b/i.test(sql))   sql = sql.replace(/;?\s*$/, ' LIMIT 1000;');

  // opcjonalna biała lista schematu/kolumn bazująca na wgranym JSON
  req.sql = sql;
  next();
}

6) Ograniczenia i limity

  • Rate-limit & slowdown: limity per IP, łagodne opóźnienia przy nadużyciach.
  • toobusy-like – szybkie 503 gdy pętla zdarzeń jest przeciążona.
  • Body-limit: restrykcyjny rozmiar żądań; odrzucanie nietypowych typów MIME.

7) Nagłówki bezpieczeństwa (HTTP)

Warstwa reverse-proxy (np. Nginx) dostarcza podstawowe nagłówki:

add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Permissions-Policy "geolocation=(), microphone=(), camera=()" always;
# Prosta CSP (dostosuj do swoich domen/CDN):
add_header Content-Security-Policy "
  default-src 'self';
  img-src 'self' data:;
  style-src 'self' 'unsafe-inline' https://fonts.googleapis.com;
  font-src https://fonts.gstatic.com 'self';
  script-src 'self';
  connect-src 'self';
" always;

8) CORS i statyki

  • CORS: ścisła biała lista pochodzeń, brak * dla żądań uwierzytelnionych.
  • Statyki: brak auto-listingu (disable directory index), bloki na .key, .env, ukryte pliki.

9) Dostępność i kopie

  • Automatyczne restarty procesu (np. PM2/systemd), health-checki.
  • Kopie konfiguracji i artefaktów deploymentu; schematy użytkownika zgodnie z ustawioną polityką retencji.

10) Zgłaszanie podatności (Responsible Disclosure)

Jeśli znalazłeś lukę, napisz na podkowa71@gmail.com z tematem [SECURITY]. Dołącz kroki odtworzenia, zakres i wpływ. Odpowiadamy niezwłocznie, zwykle w ciągu 7 dni. Prosimy o rozsądną koordynację ujawnienia (bez publicznego POC do czasu łatki).

11) Reakcja na incydenty

  1. Detekcja i triage (logi, metryki, alerty).
  2. Izolacja i ograniczenie (rate-limit, blokada pochodzenia, wyłączenie funkcji).
  3. Analiza przyczyn, poprawka i weryfikacja.
  4. Informowanie Użytkowników, jeśli incydent mógł ich dotyczyć.

12) On-prem / VPC

Dla klientów biznesowych oferujemy konsultacje wdrożeniowe on-prem/VPC (segmentacja sieci, rotacja kluczy, logowanie centralne, dodatki CSP, skanery SCA/DAST). Skontaktuj się: podkowa71@gmail.com.

13) Przykładowa konfiguracja Nginx (statyki)

location / {
  try_files $uri $uri/ =404;
}

location ~* \.(env|key|pem|log|bak)$ {
  deny all;
}

autoindex off;
client_max_body_size 512k;

14) Zmiany w dokumencie

Ten dokument może być aktualizowany wraz z rozwojem Serwisu. Archiwum zmian: na życzenie.