4.9 KiB
title, description, order, status
| title | description | order | status |
|---|---|---|---|
| Güvenlik Notları | Neta'yı güvenli şekilde kullanmak için dikkat edilmesi gerekenler. | 16 | legacy-v2-archive |
Güvenlik Notları
Arşiv: Bu belgenin Supabase/RLS maddeleri v2'ye aittir. Güncel Better Auth, service authorization, filesystem ve secret kararları ana dönüşüm planında tanımlıdır.
Neta kişisel kullanım ve self-host mantığıyla tasarlandı, ama yine de hassas veriler tutar. Müşteri bilgileri, proje detayları, finans kayıtları, AI API key'leri ve portal erişimleri doğru korunmalıdır.
Bu sayfada projeyi kullanırken özellikle dikkat ettiğim güvenlik noktalarını topladım.
Service Role Key
SUPABASE_SERVICE_ROLE_KEY en hassas ortam değişkenidir. Bu key Supabase RLS kontrollerini bypass edebilir.
Bu yüzden:
- Asla browser'a gönderilmemelidir.
- Asla
NEXT_PUBLIC_prefix'iyle tanımlanmamalıdır. - Public repo içine yazılmamalıdır.
.env.localcommit edilmemelidir.- Sadece deploy platformunun secret/env panelinde saklanmalıdır.
Bu key Neta'da sadece server tarafında kullanılır.
Anon Key Güvenliği
NEXT_PUBLIC_SUPABASE_ANON_KEY public bir key'dir. Browser tarafında görünmesi normaldir.
Anon key'in güvenliği RLS policy'lerine bağlıdır. Yani anon key sızdı diye panik yapmak yerine, asıl kontrol edilmesi gereken şey Supabase policy'leridir.
Eğer RLS kapalıysa anon key ile veri erişimi tehlikeli hâle gelir.
RLS Her Zaman Açık Olmalı
Neta'nın güvenlik modeli Supabase RLS üzerine kurulu.
Özellikle şu tablolarda RLS açık olmalıdır:
profilesclientsprojectstaskscalendar_eventsfinance_transactionsdaily_logsapp_settingschat_sessionschat_messagesproject_planning_sectionsproject_revisionsclient_activities
Freelancer verileri genelde şu mantıkla korunur:
auth.uid() = user_id
Client Portal İzolasyonu
Müşteri portalı açarken en kritik konu veri izolasyonudur.
Müşteri sadece kendi client_auth_id bağlantısına ait verileri görmelidir. Başka müşterilerin projelerini, finans kayıtlarını veya private görevleri görmemelidir.
Özellikle kontrol edilmesi gerekenler:
clients.client_auth_idprojects.client_idtasks.is_public_to_clientproject_revisions.client_id
Portal tarafında UI kontrolü olsa bile asıl güvenlik RLS policy içinde olmalıdır.
AI API Key'leri
AI provider API key'leri app_settings tablosunda tutulur.
Bu pratik kişisel kullanım için sade bir çözüm sağlar, ama production güvenliği açısından şu noktalar önemlidir:
app_settingstablosunda RLS açık olmalıdır.- Kullanıcı sadece kendi ayarını okuyup yazabilmelidir.
- Service role key dışında toplu erişim olmamalıdır.
- Gerekiyorsa ileride API key encryption eklenmelidir.
AI'ya Gönderilen Veri
AI asistan, kullanıcının görev, proje, finans ve günlük kayıtlarından bağlam üretir. Bu veri seçilen AI provider'a gönderilebilir.
Bu yüzden provider seçimi bilinçli yapılmalıdır.
Daha hassas kullanım için:
- Sadece gerekli alanları context'e ekleyin.
- Finans ve müşteri detaylarını sınırlayın.
- Local model/Ollama seçeneklerini değerlendirin.
- Prompt içinde kesin hukuki, finansal veya klinik hüküm verilmemesini belirtin.
Storage Güvenliği
avatars bucket public olabilir. Ama project-assets private kalmalıdır.
Proje görselleri müşteri işleriyle ilgili olabileceği için herkese açık URL ile servis edilmemelidir. Signed URL yaklaşımı daha güvenlidir.
Storage policy'lerinde:
- Kullanıcı kendi klasörüne erişebilmeli.
- Service role server-side işlemler için erişebilmeli.
- Başka kullanıcıların klasörlerine erişim engellenmeli.
Auth Ayarları
Supabase Auth tarafında production domain doğru tanımlanmalıdır.
Kontrol edilecek yer:
Authentication -> URL Configuration
Özellikle:
- Site URL doğru mu?
- Redirect URL listesi production domaini içeriyor mu?
- Geliştirme ve production domainleri karışmış mı?
İlk Admin Modeli
Neta public çok kullanıcılı kayıt modeliyle çalışmaz. İlk admin oluşturulduktan sonra kayıt kapanır.
Bu davranış korunmalıdır. Eğer public register sürekli açık kalırsa başka kullanıcılar sisteme girebilir ve beklenmeyen veri/rol problemleri oluşabilir.
Production Checklist
Production'a çıkmadan önce şunları kontrol ederim:
.env.localcommit edilmedi.SUPABASE_SERVICE_ROLE_KEYsadece server env içinde.- RLS açık.
- Client portal policy'leri test edildi.
- Storage bucket policy'leri test edildi.
- Supabase Auth URL ayarları doğru.
- İlk admin oluşturuldu.
- Public register kilitleniyor.
- Müşteri sadece kendi portal verisini görüyor.
- AI provider bilinçli seçildi.
Bu kontroller tamamlandığında Neta kişisel kullanım için daha güvenli ve öngörülebilir hâle gelir.