Nuvaka › Geliştirici belgeleri › Güvenlik kuralları
Güvenlik kuralları
nuvaka-ext lint ve sunucunun yükleme taraması aynı kuralları, aynı sırayla ve aynı mesajlarla uygular. Hata paketi reddeder, uyarı yalnız bildirir.
Paket
| Kural | Sınır |
|---|---|
| Biçim | ZIP (.nvx), kökte nuvaka.json |
| Sıkıştırılmış boyut | ≤ 20 MB |
| Açılmış boyut | ≤ 60 MB |
| Dosya sayısı | ≤ 2000 |
| Yol | ≤ 200 karakter; mutlak yol, .., :, boş parça ve noktayla başlayan parça yok (.well-known hariç) |
| Sembolik bağ | yasak |
| İzinli dosya türleri | html htm js mjs css json svg png jpg jpeg gif webp avif ico woff woff2 ttf otf txt md map wasm — çalıştırılabilir dosya (exe, dll, so, dylib, sh, bat, ps1…) yok. wasm serbesttir (motor içinde çalışır). |
Yasak kod kalıpları
Tüm .js, .mjs, .html ve .htm dosyalarında aranır; her kural için dosya başına ilk eşleşme satır numarasıyla raporlanır. Hepsi hatadır.
| Kalıp | Neden |
|---|---|
eval( | metinden kod çalıştırma |
new Function( | metinden kod üretme |
Function("…") | metinden kod üretme |
setTimeout("…"), setInterval("…") | metin verilen zamanlayıcı gizli bir eval'dir; işlev ver |
import("https://…") | uzak adresten modül yükleme |
importScripts( | uzak betik yükleme |
<script src="https://…">, src="//…" | uzak betik; kodu pakete koy |
document.cookie | çerez erişimi |
window.parent, .top, .opener (ve globalThis/self ile) | üst pencereye erişim; nuvaka.* kullan |
_0x1a2b biçimli adlar (30'dan fazla) | okunamaz hâle getirilmiş (obfuscated) kod; küçültülmüş kod serbest |
Uyarı: 200 KB'tan büyük, 5 satırdan az olan ve kaynak eşlemesi (aynı adlı .map dosyası ya da sourceMappingURL) bulunmayan küçültülmüş dosya. İncelemeyi zorlaştırır; .map dosyasını pakete ekle.
Tarama metin üzerinde çalışır; yorumdaki ya da HTML metnindeki eval( veya nuvaka.mail da sayılır. Örnek kodu yorum içinde bırakma.
İzin ve kullanım uyumu
- Kodda
nuvaka.<ad>,nuvaka["<ad>"]ya da{ <ad> } = nuvakaolarak geçen ve manifestte izni olmayan ad alanı → hata (ör. "nuvaka.pool kullanılıyor ama manifestte nuvaka.clipboard izni yok"). nuvaka.ui.notifykullanılıpnotificationsizni yoksa → hata.- Manifestte istenen ama kodda hiç geçmeyen izin → uyarı ("gereksiz izin istemek kullanıcıyı ürkütür").
Ad alanı ↔ izin eşlemesi: İzinler.
Manifest
Şema ve ek kurallar: Manifest başvurusu. Bilinmeyen alan, eksik zorunlu alan, pakette olmayan entry/icon yolu, geçersiz zamanlama, tekrar eden izin, başka bir kullanıcının öneki → hata.
Çalışma zamanı sınırları
Tarama en iyi çabadır. Asıl güvenlik sınırı çalışma zamanıdır:
- Her çağrı, kabuğun bildiği uzantı kimliğiyle ve verilen izinlerle uygulamada ve sunucuda ayrıca denetlenir.
- Arayüz kum havuzunda: aynı köken yok,
connect-src 'none', uzak betik yok, üst pencereye erişim yok. - Arka plan: QuickJS, 32 MB bellek, 5 sn kesintisiz çalışma dilimi,
eval/Functionyok. net: yalnız https, yalnız izinli tam alan adları, özel ağ adresleri reddedilir.files: yalnız kullanıcının seçtiği klasörler; kökten çıkış reddedilir.- Kritik izinler her kullanımda sorulur; bildirim ve çağrı sayıları sınırlıdır; her sunucu çağrısının özeti kaydedilir.
İyi uygulamalar
- Yalnız gerçekten kullandığın izinleri iste; gerekçeyi somut yaz ("GitHub'dan sürüm bilgisini okumak için").
- Okuma izinlerini
netile birleştirmekten kaçın; gerekiyorsa gerekçede hangi veriyi nereye gönderdiğini açıkla. - Kullanıcı verisini (not içeriği, mail, dosya) DOM'a
innerHTMLile değiltextContentile yaz. - Sırları (API anahtarları) koda gömme; kullanıcıdan ayar olarak al ya da depoda tut.
- Her çağrıda
permission_required,permission_denied,notify_limitveversion_conflicthatalarını karşıla.
Nuvaka Apps API v1 · son güncelleme 2026-09-27