SSD Nodes Learn 🎉 VPS $5.50/aydan başlayan
Rehberler Matt ConnorYazan Matt Connor

Kodlama ajanlarında prompt injection saldırıları

Kodlama ajanlarındaki prompt injection zafiyetlerini analiz edin. Saldırganın kontrolündeki metinlerin sistem üzerindeki etkisini ve hasarı azaltan savunma yöntemlerini inceleyin.

Kodlama aracına yönelik prompt injection nedir

Kodlama aracına yönelik prompt injection işlemini tanımlamak basittir: aracın okuduğu metin, aracın uyguladığı bir talimat olarak işlenir. Araç bir dosyayı, bir pull request yorumunu, bir web sayfasını veya bir araç çağrısının sonucunu açar. Bunların tamamı, sizin kendi isteğinizle aynı metin türünde gelir. Eğer bir saldırgan bu metnin herhangi bir kısmını kontrol edebiliyorsa, saldırgan sizin oturumunuza veri yazıyor demektir.

Mevcut tüm aracı ürünleri bu özelliğe sahiptir. Model, tek bir token dizisi alır. Sizin isteğiniz, sistem istemi, dosya içerikleri ve araç sonuçları birleştirilir ve model bir sonraki adımın ne olacağını tahmin eder. Bir token üzerinde ayrıcalık biti bulunmaz. Format içerisinde, hangi kısmın sizin tarafınızdan yetkilendirildiğini veya hangi kısmın yabancı bir README dosyasından geldiğini belirten hiçbir ayrım yoktur.

Bu sayfa tehdit modelini açıklamaktadır: saldırgan kontrolündeki metnin bir sunucuda çalışan araca nasıl ulaştığı, saldırganın her noktada ne kazandığı ve hangi savunma yöntemlerinin çaba göstermeye değer olduğu bu kapsamdadır. Diğer kılavuzlarımızdaki kapsülleme tavsiyeleri, ancak aracı neye karşı sınırladığınızı bildiğinizde anlam kazanır.

Modelin içerik ile talimatları neden ayıramadığı

Eğitim süreci yardımcı olur ancak sorunu kesin olarak çözmez. Mevcut modeller, getirilen metinleri şüpheyle karşılayacak şekilde eğitilmiştir ve birçok kaba girişimi reddederler. Bir reddetme işlemi kesin bir kural değil, bir olasılıktır. Bir saldırgan metni yeniden ifade edebilir, tekrar deneyebilir ve kimsenin planlamadığı bir formatta gizleyebilir; ayrıca kaç farklı ifade deneyeceği konusunda bir sınırlama yoktur.

OWASP GenAI projesi bunu LLM01:2025 Prompt Injection olarak takip eder ve ikiye ayırır. Doğrudan enjeksiyon (direct injection), kullanıcının kendi isteminin model davranışını değiştirmesidir. Dolaylı enjeksiyon (indirect injection) ise bir web sitesi veya dosya gibi harici içeriğin, model tarafından işlenirken davranışı değiştirmesidir. Bir sunucuda önemli olan dolaylı enjeksiyondur, çünkü bir aracı (agent) sizin yazdığınızdan çok daha fazla metin okur.

İlk sistematik çalışma, Greshake ve meslektaşlarının Not what you've signed up for (2023) başlıklı çalışmasıdır. Vardıkları sonuç akılda tutulması gereken cümledir: Bir uygulama, getirilen metni araçları kullanabilen bir modele beslediğinde, bu metnin işlenmesi rastgele kod yürütmeye oldukça yakındır.

Okuma işlemini bir ihlale dönüştüren koşul

Kötü niyetli metinleri okumak tek başına bir hasar teşkil etmez. Hasarın oluşması için makineden dışarıya bir yol olması gerekir.

Simon Willison, Haziran 2025'te bu kombinasyonu ölümcül üçlü olarak adlandırdı. Özel verileri tutan, güvenilmeyen içeriğe maruz kalan ve dışarıya veri gönderebilen bir aracı, ilkini üçüncüsü üzerinden dışarı aktarmaya ikna edilebilir.

VPS üzerindeki bir kodlama aracısı, ilk günden itibaren tüm bu özelliklere sahiptir. Özel veriler; kaynak kodunuz, .env dosyanız, SSH anahtarlarınız ve shell geçmişinizdir. Güvenilmeyen içerik; okuduğu her depo, sayfa ve araç sonucudur. Dışarı çıkış yolu ise git push, curl, npm publish, bir pull request gövdesi veya terminalinizde yazdırılan ve tıkladığınız bir bağlantıdır.

İkinci koşulu ortadan kaldıramazsınız, çünkü güvenilmeyen metinleri okumak aracıyı işe alma amacınızdır. Bu nedenle her pratik savunma yöntemi diğer iki koşul üzerinde çalışır.

Güvenilmeyen metinlerin sunucudaki bir kodlama aracına ulaştığı durumlar

Aracın üzerinde çalıştığı depo

Checkout içindeki her dosya bir girdidir. Kaynak kodu yorumları, README.md, değişiklik günlükleri, test fikstürleri, vendored kodlar ve aracın kendi talimat dosyaları: CLAUDE.md, AGENTS.md ve bunların eşdeğerleri. Bir kod tabanını anlaması istenen araç, bunları okur; çünkü sizden gelen talep budur.

Bir saldırganın burada kazandığı şey, depoyu klonlayan ve aracı ona yönlendiren herkes üzerindeki erişimdir. Talimat dosyaları en doğrudan yoldur; çünkü bunlar talimat olarak okunmak üzere var olurlar. CLAUDE.md dosyasına dört yararlı satır ekleyen ve bir satırla aracı yönlendiren bir pull request, insan bir incelemecinin gözünden kaçabileceği bir değişikliktir.

Sorunlar, pull request'ler ve kod inceleme yorumları

Bir yabancının takip sisteminize yazabildiği her şey, aracı triyaj yapması için görevlendirdiğiniz anda ona ulaşır. Mayıs 2025'te Invariant Labs, tam olarak bu yapıda bir GitHub MCP bulgusu yayınladı. Bir geliştiricinin aracı, hem bir genel depoya hem de özel depolara erişime sahipti. Bir saldırgan genel depoda bir sorun (issue) açtı. Geliştirici, araçtan açık sorunları incelemesini istediğinde, araç özel depo içeriklerini okudu ve bunları genel taraftaki bir pull request içine yazdı.

Bu rapor, MCP sunucusundaki bir kod hatasından ziyade mimari bir sorunu tanımlamaktadır. Araç, geniş kapsamlı bir erişim belirteci (token) tutuyor, genel bir gelen kutusunu okuyor ve yazma iznine sahip oluyordu. Olağan anlamda hiçbir şey yanlış yapılandırılmamıştı; bu yüzden çözüm yama yapmak değil, kapsamı sınırlandırmaktır.

Aracın getirdiği web sayfaları

Dokümantasyon, forum yanıtları, bir tedarikçi sayfası veya bir arama sonucu. Bunların herhangi biri, sizin için değil, araç için yazılmış metinler içerebilir. Metne dönüştürülen HTML, saldırgana fazladan alan sağlar; çünkü bir tarayıcının asla görüntülemediği içerikler bile modele ulaşır.

Bir saldırgan, aracın en az izlendiği anda kontrolü ele geçirir. Araç bir şeyi araştırırken getirdiği sayfanın tüm metnini kimse okumaz.

MCP aracı çıktısı

MCP (model context protocol), araçların harici araçlara bağlanmasının yaygın yoludur. Sonuçlar metin olarak geri döner ve doğrudan bağlam penceresine girer. Burada bir değil, iki yüzey vardır. Bir aracın döndürdüğü veri bariz olandır. Modelin ne zaman çağrı yapacağına karar vermek için okuduğu aracın kendi adı ve açıklaması ise diğeridir ve kontrol etmediğiniz bir sunucu, çağrılar arasında her ikisini de değiştirebilir.

Bir aracın çıktısına metin yerleştirmeyi başaran bir saldırgan, aracın sahip olduğu diğer tüm araçlara erişim sağlar. Düşük değerli bir şeydeki enjeksiyonun, yüksek değerli bir şeyi yönetmeye başlaması bu şekilde gerçekleşir.

CI günlükleri, derleme çıktıları ve bağımlılık meta verileri

npm install, sizin yazmadığınız paketlerden metinler yazdırır. Bir test başarısızlığı, bir kütüphaneden gelen doğrulama mesajını yazdırır. Bir sürekli entegrasyon (CI) iş günlüğü, binlerce satırlık üçüncü taraf çıktısıdır. Başarısız bir derlemeyi düzeltmesi için bir araçtan yardım isterseniz, aracın bunların hepsini okumasına neden olursunuz.

Burada bir saldırgan, genellikle dağıtım kimlik bilgilerini ve kayıt defteri belirteçlerini barındıran ve bir dizüstü bilgisayara göre daha az dikkat çeken derleme makinesini ele geçirmiş olur.

Bir saldırganın gerçekte elde ettikleri

Planlanması gereken dört sonuç bulunmaktadır.

Kimlik bilgisi hırsızlığı. Aracı sürecinin okuyabildiği her şey kapsam dahilindedir: ortam değişkenleri, ~/.aws/credentials, ~/.ssh, bir gh belirteci, bir Docker yapılandırma dosyası. Bunları dışarı göndermek için curl gerekmez. Bir dala yapılan commit, bir pull request açıklaması, bir kayıt defterine yayınlanan paket veya saldırganın kontrolündeki bir isim için yapılan DNS sorgusu, verilerin sunucudan dışarı çıkarılmasını sağlar.

Onayladığınız kod değişiklikleri. Kod yazmak aracının işidir; bu nedenle ona ince bir şekilde hatalı bir satır yazdırmak, ulaşılması en kolay sonuçtur. Eklenen bir bağımlılık veya bir belirteci başka bir yere gönderdiğiniz günlüğe taşıyan bir günlük kaydı çağrısı buna örnektir.

Kalıcılık. Bir kez yazılan bir dosya, herhangi bir model dahil olmadan çalışmaya devam eder: .git/hooks içinde bir kanca, package.json içinde bir postinstall betiği, bir kabuk başlangıç dosyasına eklenen bir satır, CLAUDE.md içinde fazladan bir satır. Bir sonraki komut bunu çalıştırır.

Ağınız içinde hareket. Aracı, onu yerleştirdiğiniz yerde çalışır. Eğer o sunucu loopback üzerindeki bir veritabanına, dahili bir yönetici servisine, bulut sağlayıcınızın meta veri servisine veya özel ağdaki başka bir ana bilgisayara erişebiliyorsa, aracı yöneten her şey de erişebilir.

Otomatik onay modları son kontrolü kaldırır

Varsayılan modda Claude Code, bir komutu çalıştırmadan veya bir dosyayı düzenlemeden önce onay ister. Bu istem, yukarıdaki her arayüz ile gerçek bir eylem arasında duran insan denetimidir. İstemleri kaldıran modlar, bu denetimi de ortadan kaldırır.

Belgeler bypassPermissions konusunda nettir: bunu yalnızca Claude Code'un zarar veremeyeceği container veya VM gibi izole ortamlarda kullanın. Auto modu daha esnektir ve araç çağrılarını, eylemlerin isteğinizle uyumlu olduğunu doğrulayan arka plan güvenlik kontrolleriyle otomatik olarak onaylar. Bu kontroller birçok durumu yakalar. Ancak bunlar yine de model çıktısı hakkında modelin kendi yargısıdır; bu nedenle onları bir sınır değil, bir filtre olarak değerlendirin.

Bir yönetici her ikisini de kaldırabilir. Bir ayar dosyasında permissions.disableBypassPermissionsMode veya permissions.disableAutoMode değerini "disable" olarak ayarlayın ve bu dosyayı yönetilen ayarlara yerleştirin; böylece check-out edilmiş bir proje bu ayarı geçersiz kılamaz. Claude Code otomatik modu ve izin kuralları rehberimiz, her kuralın nerede geçerli olduğunu açıklamaktadır.

Savunma yöntemleri, sağladıkları faydaya göre sıralama

Bunların hiçbiri tek başına bir çözüm değildir. Her biri ya aracın elinde tuttuğu yetkiyi ya da bu yetkiyle yapabileceklerini kısıtlar.

  1. Yok edip yeniden oluşturabileceğiniz bir makine; böylece bir ihlal, bir olay yönetimi süreci yerine sadece bir saatlik iş kaybına neden olur.
  2. Size ait olandan ayrı, tek bir depoya özgü ve kısa ömürlü kimlik bilgileri.
  3. Aracın komutlarının miras aldığı ortamda uzun ömürlü gizli anahtarların bulunmaması.
  4. Aracın başlattığı her süreç için geçerli olan, ağ çıkışı ve dosya erişimi üzerinde işletim sistemi düzeyinde zorunlu kısıtlamalar.
  5. Yazma işlemleri ve ağ çağrıları için onay istemlerinin açık tutulması.
  6. Belirleyebileceğiniz belirli eylemler için deterministik bir son savunma hattı olarak kancalar (hooks).
  7. Birleştirmeden (merge) önce farkları (diff) okumak.

Sıralama önemlidir. 1'den 4'e kadar olan maddeler, model tamamen bir saldırganın kontrolü altında olsa bile geçerliliğini korur. 5'ten 7'ye kadar olan maddeler ise bir insanın dikkatine bağlıdır; uzun süreli bir araç çalışmasında tam olarak eksik olan şey de budur.

Aracı atılabilir bir makineye kurun

Bir kod kopyasını ve tek bir kapsamlı anahtarı barındıran bir VPS, anahtarlarınızın bulunduğu bir dizüstü bilgisayara kıyasla çok daha küçük bir hedeftir. Aracı kendi giriş hesabınızla veya root olarak değil, kendine ait, ayrıcalıksız bir kullanıcıyla çalıştırın. kodlama araçları için tek kullanımlık bir VM ve VPS üzerinde en az ayrıcalıklı kullanıcılar hakkındaki rehberlerimiz kurulumu, Claude Code'u bir VPS üzerinde güvenli çalıştırma ise günlük kullanım şeklini ele almaktadır.

Gizli anahtarları ortamdan çıkarın

Bir ortam değişkeni, her alt süreç tarafından okunabilir; bu da aracın çalıştırdığı her komutun bu değişkeni görebileceği anlamına gelir. Claude Code'un sandbox yapısı, her korumalı komuttan önce belirli değişkenleri tanımsız hale getirebilir (unset). Linux üzerinde sandbox için önce iki paket gerekir:

sudo apt-get install bubblewrap socat

Ardından ~/.claude/settings.json içinde:

{
  "sandbox": {
    "enabled": true,
    "network": {
      "allowedDomains": ["github.com", "*.npmjs.org"]
    },
    "credentials": {
      "envVars": [
        { "name": "GITHUB_TOKEN", "mode": "deny" },
        { "name": "NPM_TOKEN", "mode": "deny" }
      ]
    }
  }
}

Bir deny girdisi, her korumalı komut çalışmadan önce o değişkeni tanımsız hale getirir ve allowedDomains, korumalı komutları listelediğiniz ana bilgisayarlarla sınırlar. credentials bloğu, Ağustos 2026 itibarıyla kontrol edilen Claude Code v2.1.187 veya üzerini gerektirir. Hangi katmanların aktif olduğunu ve hangi bağımlılıkların eksik olduğunu görmek için bir oturumda /sandbox komutunu çalıştırın. Hangi gizli anahtarların o makinede bulunması gerektiğine karar vermek işin büyük kısmını oluşturur; gizli anahtarları bir yapay zeka aracının erişiminden uzak tutmak bu konuyu detaylandırır.

Ağ çıkışını işletim sistemi düzeyinde kesin

Bir güvenlik duvarı kuralı, modelin neye karar verdiğini önemsemez. Aracı özel bir agent kullanıcısı olarak çalıştırın ve ardından bu kullanıcının gönderdiği trafiği engelleyin:

table inet agentcage {
  chain output {
    type filter hook output priority filter; policy accept;
    meta skuid "agent" ct state established,related accept
    meta skuid "agent" oif lo accept
    meta skuid "agent" counter drop
  }
}

Bu, agent kullanıcısını yalnızca loopback ile sınırlar; dolayısıyla trafiği aynı makinede çalıştırdığınız bir proxy üzerinden geçmelidir ve proxy, ana bilgisayar izin listesini tutar. https_proxy bu proxy'ye işaret ettiğinde, istemci bir CONNECT isteği gönderir ve proxy isim çözümlemesini gerçekleştirir; böylece aracın kendi başına bir giden DNS (alan adı sistemi) sorgusuna ihtiyacı kalmaz. Çalışmanızı sudo nft list ruleset ile kontrol edin ve araç yeni bir yere ulaşmaya çalışırken engelleme kuralındaki sayacın arttığını izleyin.

Güvenlik duvarı değişikliklerini uygularken ikinci bir SSH oturumunu açık tutun. Konteyner çalışma zamanınızın bu kurallara ne yaptığını da kontrol edin: Docker kendi zincirlerini yazar ve yayınlanan Docker portları ufw'yi atlar makalesi, bunun neden olduğu sürprizleri açıklar.

Kancalar: modelin ikna edemeyeceği denetimler

İzin kuralları ve kancalar, model tarafından değil Claude Code tarafından zorunlu tutulur. Belgelerde açıkça belirtildiği gibi: isteminizdeki veya CLAUDE.md içindeki talimatlar Claude'un ne yapmaya çalışacağını şekillendirir ancak Claude Code'un neye izin verdiğini değiştirmez. Bu ayrım, değerin tamamıdır. CLAUDE.md içinde "asla curl çalıştırma" yazan bir satır, enjekte edilmiş bir paragrafın tartışabileceği bir öneridir. Bir kanca ise çıkış kodu döndüren bir süreçtir.

.claude/settings.json içinde bir PreToolUse kancası kaydedin:

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "${CLAUDE_PROJECT_DIR}/.claude/hooks/no-egress.sh"
          }
        ]
      }
    ]
  }
}

Kanca, araç çağrısını standart girdi (stdin) üzerinden JSON olarak alır. 2 çıkış kodu çağrıyı engeller ve Claude'a standart hata (stderr) üzerinden nedenini gösterir. 0 çıkış kodu ise çağrının normal izin akışından devam etmesine izin verir.

#!/usr/bin/env bash
# PreToolUse: stdin holds the tool call, exit 2 blocks it.
cmd=$(jq -r '.tool_input.command // ""')
if printf '%s' "$cmd" | grep -qE '(^|[;&|]|\s)(curl|wget|nc|ncat)(\s|$)'; then
  echo "Blocked: this repository does not allow outbound network commands." >&2
  exit 2
fi
exit 0

Şimdi işin dürüst kısmı: bu, bir kabuk dizgisi (shell string) üzerinde bir kara listedir ve kabuk dizgileri üzerindeki kara listeler sızdırır. python3 -c, curl kelimesini kullanmadan bir soket açar. Bir make deploy hedefi, aynı çağrıyı bir seviye daha derinde gizler. Kancaları adlandırabileceğiniz hatalar için yazın ve gerçekten güvendiğiniz sınırı çekirdek veya ağ üzerinde oluşturun.

İzin reddetme kuralları, bilinmesi gereken bir eşleşme sınırına sahiptir. Read ve Edit reddetme kuralları, Claude'un kendi dosya araçlarını ve Bash içinde tanıdığı cat, head, tail ve sed gibi dosya komutlarını kapsar. Dosyayı doğrudan açan bir Python veya Node betiğini kapsamazlar. Kurallar önce reddetme, sonra sorma, sonra izin verme şeklinde değerlendirilir; bu nedenle bir reddetme kuralı, bir izin listesi istisnası taşıyamaz.

{
  "permissions": {
    "deny": [
      "Read(.env)",
      "Read(./secrets/**)",
      "Bash(git push *)"
    ]
  }
}

Çıkanı izleyin ve farkları okuyun

Bir araç çalışması, bir fark (diff) ve bir dizi ağ çağrısı üretir. Her ikisi de herhangi bir birleştirme veya dağıtım öncesinde incelenmeyi hak eder. Farklar üzerinde yapılan bir kendi kendine barındırılan güvenlik incelemesi, bir insanın göz gezdirmesinden farklı bir değişiklik sınıfını yakalar ve bir kodlama aracının makine dışına ne gönderdiğini bilmek, normal trafiğin neye benzediğini anlamanızı sağlar; böylece sıra dışı bir istek hemen göze çarpar.

Hala çözülememiş olanlar

Günümüzde içerik ile talimat arasında güvenilir bir ayrım bulunmamaktadır. Piyasaya sürülen her savunma mekanizması ya başarısızlık oranı olan bir filtre ya da sonuçları sınırlayan bir kısıtlamadır. Yazılım yığınında hiçbir katman, bir metin bloğunu asla uygulanmaması gereken veri olarak işaretlememektedir.

Filtreler faydalıdır ancak başarısız da olurlar. Çoğu enjeksiyon girişimini yakalayan bir sınıflandırıcı her seferinde doğru çalışmak zorundayken, bir saldırganın yalnızca bir kez başarılı olması yeterlidir. Bu asimetri nedeniyle, bir savunma mekanizması için yayınlanan başarı oranı, bir garanti değil, bir sonraki saldırı girişimi için başlangıç noktasıdır.

En umut verici çalışmalar model düzeyinde değil, tasarım düzeyindedir. Defeating Prompt Injections by Design (Debenedetti ve çalışma arkadaşları, 2025) makalesindeki CaMeL, güvenilir istekten kontrol akışını ve veri akışını önce ayıklar; böylece güvenilmeyen veriler programın işleyişini değiştiremez ve ardından araçlar çağrıldığında yetenek kontrollerini zorunlu kılar. Makalenin AgentDojo benchmark testindeki kendi verileri, bunun maliyetini göstermektedir.

ChartAgentDojo tasks solved, published figures from the CaMeL paper (2025)
The data behind this chart
[
  {
    "label": "Undefended agent",
    "tasks_solved_pct": 84
  },
  {
    "label": "CaMeL",
    "tasks_solved_pct": 77
  }
]

Savunmasız ajan görevlerin 84 yüzdesini çözmüştür. CaMeL ise güvenlik garantisi ile birlikte 77 yüzdesini çözmüştür. Bunlar, makalenin tek bir benchmark üzerindeki yayınlanmış verileridir ve sizin iş yükünüzün bir ölçümü değildir. Aralarındaki fark, günümüzde gerçek bir garantinin yaklaşık maliyetidir.

Buna benzer bir tasarım günlük kullandığınız araçlara entegre edilene kadar, ajanın bir noktada ele geçirileceğini varsayarak plan yapın ve bu olayı sıradanlaştırın. Tek kullanımlık makineler, kapsamı daraltılmış kimlik bilgileri, kontrollü dış ağ erişimi ve yapılan değişiklikleri inceleme alışkanlığı, tüm bu savunma stratejisinin temelini oluşturur.

FAQ

Dosyalardaki talimatları görmezden gelmesini söyleyerek prompt injection saldırısını durdurabilir miyim?

Hayır. Bu cümle, saldırı ile aynı bağlam penceresinde yer alan bir metindir ve saldırganın metniyle eşit şartlarda rekabet eder. Claude Code belgeleri bu sınırı net bir şekilde çizer: isteminizdeki veya CLAUDE.md içindeki talimatlar, aracın ne yapmaya çalışacağını şekillendirir ancak aracın izin verdiği işlemleri değiştirmez. Bir talimat dosyasını bir niyet beyanı olarak değerlendirin; güvendiğiniz her şeyi izin kurallarına, bir PreToolUse kancasına veya bir güvenlik duvarı kuralına ekleyin.

Ajan yalnızca kendi depoma erişiyorsa prompt injection gerçek bir risk midir?

Evet, çünkü deponuz sizin yazmadığınız metinlerle doludur. Bağımlılık README dosyaları, lockfile URL'leri, test verileri, üçüncü taraf kodlar ve npm install çıktılarının tümü sıradan bir görev sırasında sisteme dahil olur. Bir hata takip sisteminden veya dokümantasyon sitesinden çekilen her şey de aynı şekilde gelir. Risk, ajanın okuduğu veri miktarıyla doğru orantılı olarak artar ve kullanışlı bir ajan çok fazla veri okur.

Ajanı bir container içinde çalıştırmak bu sorunu çözer mi?

Yalnızca kimlik bilgilerini de ortamdan kaldırırsanız hasarı sınırlar. SSH ajanı yönlendirilmiş, bulut kimlik bilgileri ortam değişkenlerinde tanımlı ve sınırsız ağ erişimi olan bir container, saldırgana ana makinenin sahip olduğu hemen hemen her şeyi verir. Container'ın sağladığı asıl avantaj, silebileceğiniz bir dosya sistemi ve çıkış (egress) kurallarını uygulayabileceğiniz temiz bir alandır. Bunu, tek bir depo ile sınırlandırılmış bir token ile birlikte kullanın.

Riski en çok azaltan tek değişiklik nedir?

Ajanın komutlarının devraldığı ortamdan uzun ömürlü kimlik bilgilerini kaldırın ve ardından o makineye varsayılan olarak reddeden (default-deny) bir çıkış politikası atayın. Bu ikisi, ölümcül üçlüdeki üçüncü koşulu bozar: metin ajanı hala ele geçirebilir ancak ulaştığı verilerin gidebileceği yararlı bir yer kalmaz. Onay istemleri ve diff incelemeleri de yardımcı olur ancak bunlar uzun süreli bir çalışma boyunca insanın dikkatli kalmasına bağlıdır; bu yüzden bu iki değişikliğin gerisinde kalırlar.