Przejdź do głównej zawartości

Workflow audytu bezpieczeństwa w Cursor

Twój zespół jest trzy tygodnie od uruchomienia produktu SaaS, który obsługuje dane płatnicze klientów, przechowuje dane osobowe i eksponuje publiczne API. Przegląd bezpieczeństwa miał się odbyć w poprzednim sprincie, ale ciągle był przesuwany. Teraz oficer ds. compliance pyta o ocenę bezpieczeństwa, a twój budżet na testy penetracyjne wynosi dokładnie zero złotych. Potrzebujesz dokładnego audytu i potrzebujesz go szybko.

Audyt bezpieczeństwa wspomagany AI nie zastępuje profesjonalnego pentestu. Ale wyłapuje zaskakującą liczbę typowych podatności — SQL injection, XSS, niebezpieczna autentykacja, ujawnione sekrety, brak rate limitingu — które odpowiadają za zdecydowaną większość rzeczywistych naruszeń. Poniższy workflow systematycznie przegląda twoją bazę kodu pod kątem kategorii OWASP Top 10 i produkuje priorytetyzowaną listę ustaleń z konkretnymi poprawkami.

  • Kompleksowy prompt audytu bezpieczeństwa, który skanuje bazę kodu pod kątem podatności OWASP Top 10
  • Prompt przeglądu autentykacji, który sprawdza obsługę sesji, przechowywanie haseł i zarządzanie tokenami
  • Workflow audytu zależności, który znajduje znane CVE w twoich pakietach npm/pip/cargo
  • Prompt detekcji sekretów, który wyłapuje przypadkowo zacommitowane klucze API, tokeny i poświadczenia
  • Prompt napraw bezpieczeństwa, który łata podatności bez psucia istniejącej funkcjonalności

Zacznij od najłatwiejszych wygranych — znanych podatności w twoich zależnościach. To zajmuje sekundy i często znajduje krytyczne problemy.

Agent uruchomi komendę audytu, sparsuje output JSON i da ci priorytetyzowany plan naprawczy. Aktualizuj pakiety niskiego ryzyka natychmiast. Dla zmian łamiących kompatybilność twórz osobne gałęzie.

Krok 2: Skanuj w poszukiwaniu zahardkodowanych sekretów

Dział zatytułowany „Krok 2: Skanuj w poszukiwaniu zahardkodowanych sekretów”

Przypadkowo zacommitowane sekrety to błąd bezpieczeństwa numer jeden w bazach kodu. Gdy sekret jest w historii git, jest skompromitowany permanentnie, nawet jeśli usuniesz plik.

Błędy autentykacji są często najpoważniejsze, ponieważ pozwalają atakującym podszywać się pod legalnych użytkowników. Użyj trybu Ask do dokładnego przeglądu.

@src/auth @src/middleware @src/api
Przejrzyj implementację autentykacji i autoryzacji:
1. Obsługa haseł:
- Czy hasła są hashowane za pomocą bcrypt/scrypt/argon2 (nie MD5/SHA1)?
- Czy jest minimalna długość hasła i wymaganie złożoności?
- Czy jest ochrona przed brute force (rate limiting na logowaniu)?
2. Zarządzanie sesjami:
- Jak przechowywane są sesje (cookie, JWT, baza danych)?
- Czy sesje wygasają? Jaki jest timeout?
- Czy istnieje mechanizm wylogowania, który faktycznie unieważnia sesję?
- Czy tokeny sesji są regenerowane po zalogowaniu (zapobieganie session fixation)?
3. Autoryzacja:
- Czy każdy endpoint API jest sprawdzany pod kątem autoryzacji?
- Czy są endpointy, które powinny wymagać auth, ale nie wymagają?
- Czy jest ochrona przed IDOR (czy użytkownik A może uzyskać dostęp do danych użytkownika B zmieniając ID)?
- Czy endpointy administracyjne są wydzielone i zabezpieczone?
4. Obsługa tokenów:
- Czy JWT są weryfikowane z prawidłowym algorytmem (nie "none")?
- Czy sekret JWT jest wystarczająco silny (co najmniej 256 bitów)?
- Czy refresh tokeny są przechowywane bezpiecznie?
- Czy tokeny mogą być odwołane?
Dla każdego znalezionego problemu oceń severity (CRITICAL, HIGH, MEDIUM, LOW) i podaj poprawkę.

SQL injection, XSS i command injection nadal należą do najczęściej eksploatowanych podatności w aplikacjach webowych.

Publiczne API potrzebują wielowarstwowej obrony — rate limiting, walidacja inputu, prawidłowa obsługa błędów i konfiguracja CORS.

@src/api @src/middleware
Audytuj bezpieczeństwo API:
1. Rate limiting:
- Czy jest rate limiting na endpointach autentykacji?
- Czy jest rate limiting na publicznych endpointach API?
- Jakie są limity i czy są odpowiednie?
- Czy rate limity można obejść zmieniając nagłówki (X-Forwarded-For)?
2. Walidacja inputu:
- Czy każdy endpoint API waliduje input za pomocą schematu (Zod, Joi, itp.)?
- Czy uploady plików są walidowane pod kątem typu, rozmiaru i zawartości?
- Czy parametry query są sanityzowane?
- Czy rozmiar ciała żądania jest ograniczony?
3. Obsługa błędów:
- Czy odpowiedzi błędów ujawniają stack trace lub wewnętrzne ścieżki?
- Czy błędy bazy danych są przechwytywane i zastępowane generycznymi komunikatami?
- Czy istnieje globalny handler błędów zapobiegający wyciekom nieobsłużonych wyjątków?
4. Konfiguracja CORS:
- Czy Access-Control-Allow-Origin jest konkretny (nie wildcard *)?
- Czy dozwolone są tylko niezbędne metody HTTP?
- Czy poświadczenia są prawidłowo ograniczone?
5. Nagłówki:
- Czy Strict-Transport-Security jest ustawiony?
- Czy X-Content-Type-Options: nosniff jest ustawiony?
- Czy X-Frame-Options jest ustawiony, aby zapobiec clickjackingowi?
- Czy ciasteczka mają flagi Secure, HttpOnly i SameSite?

Gdy masz priorytetyzowaną listę ustaleń, użyj trybu Agent do implementacji poprawek. Zacznij od problemów o severity CRITICAL i HIGH.

Krok 7: Skonfiguruj ciągły monitoring bezpieczeństwa

Dział zatytułowany „Krok 7: Skonfiguruj ciągły monitoring bezpieczeństwa”

Jednorazowy audyt pomaga, ale bezpieczeństwo wymaga ciągłej uwagi. Skonfiguruj automatyczne sprawdzenia w swoim pipeline’ie CI.

Skonfiguruj automatyczne sprawdzenia bezpieczeństwa:
1. Dodaj npm audit do pipeline'u CI -- zawal build przy podatnościach HIGH/CRITICAL
2. Dodaj hook git pre-commit, który skanuje w poszukiwaniu sekretów za pomocą detect-secrets lub gitleaks
3. Dodaj SAST (Static Application Security Testing) za pomocą pluginów ESLint bezpieczeństwa:
- eslint-plugin-security dla wzorców Node.js
- eslint-plugin-no-unsanitized dla DOM XSS
4. Dodaj plik .cursor/rules/security.mdc instruujący Cursor, aby:
- Zawsze używał sparametryzowanych zapytań
- Nigdy nie używał dangerouslySetInnerHTML bez sanityzacji
- Zawsze walidował input za pomocą Zod przed przetworzeniem
- Nigdy nie logował wrażliwych danych (hasła, tokeny, PII)
Utwórz krok workflow CI i plik reguł.

AI nie wyłapuje podatności logiki biznesowej. Automatyczne skanowanie wyłapuje podatności oparte na wzorcach (SQL injection, XSS), ale ma trudności z błędami logiki biznesowej typu “użytkownik może zmienić cenę produktu modyfikując ciało żądania” lub “usunięcie konta nie unieważnia aktywnych kluczy API.” Dla podatności logiki potrzebujesz ręcznego modelowania zagrożeń. Użyj trybu Ask do burzy mózgów scenariuszy ataku: “Gdybyś był atakującym próbującym ukraść pieniądze z tego systemu checkoutowego, czego byś próbował?”

False positive’y marnują czas. AI oznaczy niektóre wzorce jako podatne, które w kontekście są bezpieczne (np. sparametryzowane zapytanie, które wygląda jak konkatenacja stringów z powodu sposobu, w jaki ORM je generuje). Zweryfikuj każde ustalenie przed naprawą. False positive, który “naprawisz”, może wprowadzić prawdziwego buga.

Poprawki psują funkcjonalność. Zmiany bezpieczeństwa są znane z psucia legalnych funkcji. Dodanie ochrony CSRF może zepsuć klientów API, którzy nie wysyłają tokenów. Ustawienie ścisłego CORS może zablokować legalne żądania frontendu. Zawsze uruchamiaj pełny zestaw testów po poprawkach bezpieczeństwa i testuj ręcznie z perspektywy użytkownika.

Aktualizacje zależności wprowadzają zmiany łamiące kompatybilność. Aktualizacja pakietu w celu naprawy CVE może zepsuć aplikację, jeśli nowa wersja ma zmiany API. Przypinaj dokładne wersje w package.json, aktualizuj jedną zależność naraz i uruchamiaj testy po każdej aktualizacji. Dla major version bumpów czytaj changelog przed aktualizacją.

Audyt tworzy fałszywe poczucie bezpieczeństwa. Skan AI, który mówi “nie znaleziono podatności”, nie oznacza, że twoja aplikacja jest bezpieczna. Oznacza, że nie wykryto znanych wzorców. Profesjonalne testy penetracyjne, modelowanie zagrożeń i przegląd architektury bezpieczeństwa nadal są konieczne dla aplikacji obsługujących wrażliwe dane.