Błędy, które AI zostawia w kodzie.

Wyślij archiwum .zip projektu albo adres publicznego repozytorium GitHub. Tamiso szuka kluczy tajnych, tabel Supabase bez RLS, SQL sklejanego z tekstu i innych częstych błędów, a potem pokazuje, którędy płyną dane.

boutique-en-ligne

4 problemy do poprawy przed publikacją. Ostatnia analiza 01/11/2026, boutique-en-ligne.zip.

boutique-en-ligne.zip10 przeanalizowanych plików

Mapa kodu

Skąd przychodzą dane, przez które funkcje idą i dokąd trafiają. Problemy są w funkcji, w której powstają; wybierz jeden, żeby zostawić tylko jego ścieżkę.

Skąd przychodzą daneKod: pliki i funkcjeDokąd trafiają src/app/api/orders/route.tssrc/lib/orders.tssrc/lib/stripe.tssrc/lib/mail.tssrc/app/api/search/route.tssrc/lib/products.tssupabase/migrations/003_orders.sql jsonquery: qbody.itemsqitemsemailresend.emails.sendordersqueryregułyreguły POST /api/ordersPOST /api/ordersżądanie HTTPGET /api/searchGET /api/searchżądanie HTTPPOST(request)POST(request)src/app/api/orders/route.ts:3GET(request)GET(request)src/app/api/search/route.ts:3sendConfirmation(email, id)sendConfirmation(email,…src/lib/mail.ts:5createOrder(items, email)createOrder(items, emai…src/lib/orders.ts:5total(items)total(items)src/lib/orders.ts:12searchProducts(q)searchProducts(q)src/lib/products.ts:3createPayment(amount)createPayment(amount)src/lib/stripe.ts:5const stripe = new Stripe("sk_l****")const stripe = new Stri…src/lib/stripe.ts:3create table orders (id uuid primary key, items jsonb, email text);create table orders (id…supabase/migrations/003_orde…alter table orders disable row level security;alter table orders disa…supabase/migrations/003_orde…Baza danychBaza danychPostgreSQL, SupabaseE-maileE-mailewysyłka
problem w tej funkcji wejście, z którego przychodzą dane ścieżka problemu dokąd trafiają dane

Wybierz problem

Mapa zostawi wtedy tylko jego ścieżkę: wejście, z którego przychodzą dane, funkcje po drodze i miejsce, do którego trafiają.

Mapa powstaje z czytania kodu (Python, JavaScript i TypeScript), bez uruchamiania go: wywołanie dynamiczne albo dekorator mogą umknąć. Zapisujemy tylko nazwy funkcji i tras oraz numery linii.

krytycznaCWE-798
Tajny klucz Stripe w kodzie

Z tym kluczem każdy może tworzyć płatności i zwroty oraz czytać dane klientów.

Unieważnij klucz w panelu Stripe, a potem czytaj go ze zmiennej środowiskowej po stronie serwera.

1 miejsce w kodzie
  • src/lib/stripe.ts:3const stripe = new Stripe("sk_l****")
Zobacz prompt

W src/lib/stripe.ts:3: Tajny klucz Stripe w kodzie. Unieważnij klucz w panelu Stripe, a potem czytaj go ze zmiennej środowiskowej po stronie serwera. Popraw tylko te miejsca, a potem wyjaśnij mi zmianę.

krytycznaCWE-284
Tabela Supabase bez RLS

Bez Row Level Security publiczny klucz anon Twojej aplikacji wystarczy, żeby czytać i zmieniać całą tabelę.

Dodaj „alter table … enable row level security;”, a potem reguły, które ograniczają każdy wiersz do właściciela (auth.uid()).

1 miejsce w kodzie
  • supabase/migrations/003_orders.sql:1create table orders (id uuid primary key, items jsonb, email text);
Zobacz prompt

W supabase/migrations/003_orders.sql:1: Tabela Supabase bez RLS. Dodaj „alter table … enable row level security;”, a potem reguły, które ograniczają każdy wiersz do właściciela (auth.uid()). Popraw tylko te miejsca, a potem wyjaśnij mi zmianę.

krytycznaCWE-284
RLS wyłączony na tabeli

Tabelę znowu może czytać i zmieniać każdy z kluczem anon.

Usuń tę linię i włącz RLS z regułami dla każdego użytkownika.

1 miejsce w kodzie
  • supabase/migrations/003_orders.sql:2alter table orders disable row level security;
Zobacz prompt

W supabase/migrations/003_orders.sql:2: RLS wyłączony na tabeli. Usuń tę linię i włącz RLS z regułami dla każdego użytkownika. Popraw tylko te miejsca, a potem wyjaśnij mi zmianę.

wysokaCWE-89
Zapytanie SQL sklejane z tekstu użytkownika

Jeśli wartość pochodzi od użytkownika, może on czytać albo kasować bazę (SQL injection).

Używaj parametrów (%s, ?, $1) albo ORM zamiast wklejać wartości do zapytania.

1 miejsce w kodzie
  • src/lib/products.ts:4const res = await pool.query(`SELECT * FROM products WHERE name LIKE '%${q}%'`) Dane wysłane przez użytkownika w src/app/api/search/route.ts:4, przekazane przez searchProducts (src/app/api/search/route.ts:5), użyte tutaj bez sprawdzenia.
Zobacz prompt

W src/lib/products.ts:4: Zapytanie SQL sklejane z tekstu użytkownika. Używaj parametrów (%s, ?, $1) albo ORM zamiast wklejać wartości do zapytania. Popraw tylko te miejsca, a potem wyjaśnij mi zmianę.

Co sprawdza analiza kodu

Klucze i hasła wpisane w kod (Stripe, AWS, GitHub, GitLab, OpenAI, Anthropic, Hugging Face, SendGrid, Slack, Telegram, Google, tokeny npm i PyPI, adresy baz danych z hasłem, klucze prywatne, pliki .env), tajny klucz aplikacji wpisany na sztywno, sekrety wystawione przeglądarce (NEXT_PUBLIC_, VITE_…), klucz service_role Supabase po stronie przeglądarki, tabele Supabase bez RLS albo z otwartymi regułami (we wszystkich migracjach projektu), reguły Firebase otwarte albo w „trybie testowym”, widoki i funkcje Supabase omijające RLS, zapytania SQL i polecenia systemowe sklejane z tekstu, zapytania, pliki i przekierowania wybierane przez użytkownika (także gdy wartość przechodzi przez zmienną kilka linii wyżej), dane zapisywane bez wyboru pól, wczytywanie danych, które może wykonać kod, hasła haszowane MD5 albo porównywane ze stałą wartością, osłabiona ochrona CSRF albo ciasteczka sesji, tokeny w localStorage albo losowane przez Math.random, włączony tryb debug, wyłączona weryfikacja TLS albo JWT, CORS otwarty z danymi logowania i HTML wstawiany bez oczyszczenia. Przykładowe wartości (your-key, xxxx), domyślne hasła lokalne, komentarze, testy i konfiguracje testowe nie są zgłaszane, z wyjątkiem sekretów.

W projekcie analiza zapisuje też, które paczki są importowane w kodzie: podatność w paczce, której kod nigdy nie importuje i której według pliku blokady nie potrzebuje żadna inna paczka, spada o jeden poziom, z powodem. Znalezione pliki zależności (package-lock.json, requirements.txt, composer.lock…) od razu dają nową wersję analizy zależności.

Kod jest czytany w pamięci i zapominany: Tamiso zatrzymuje tylko nazwę pliku, linię i krótki fragment z zamaskowanymi sekretami. Katalogi zależności i budowania (node_modules, dist…) są pomijane. Analiza regułami nie zastępuje przeglądu bezpieczeństwa.

Jak to działa

Reguły na częste błędy

Sekrety, Supabase i Firebase, wstrzyknięcia SQL, otwarte przekierowania, zostawiony tryb debug. Każda reguła ma identyfikator CWE i poprawkę w jednym zdaniu.

Mapa kodu

Skąd przychodzą dane (trasy, skrypty), przez które funkcje przechodzą i dokąd trafiają: baza danych, maile, pliki, usługi zewnętrzne. Każdy problem leży na swojej ścieżce.

Kod nie jest przechowywany

Archiwum jest czytane w pamięci, a potem zapominane. Tamiso zapisuje plik, linię, regułę i krótki fragment z zamaskowanym sekretem.

W planie darmowymW planie Indie AI odrzuca fałszywe alarmy, mówi dlaczego i sprawdza, czy Twój kod wywołuje podatną część paczki.
Przeanalizuj swój kod