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
- Detekcja i triage (logi, metryki, alerty).
- Izolacja i ograniczenie (rate-limit, blokada pochodzenia, wyłączenie funkcji).
- Analiza przyczyn, poprawka i weryfikacja.
- 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.