Gelişmiş Korumalar
Genel Bakış
Apinizer AI Gateway, istek ve yanıtları aşağıdaki koruma katmanlarından geçirebilir:
- Kişisel Veri (PII) Maskeleme — kimlik numarası, IBAN, telefon gibi kişisel verilerin maskelenmesi
- İstem Koruması — jailbreak / prompt injection kalıplarının tespiti
- Veri Sızıntısı Koruması (DLP) — API anahtarı, özel anahtar, JWT gibi sırların yanıtta sızmasının engellenmesi
- Konu-Dışı Koruması — gateway'in amaçlanan konu kapsamı dışındaki isteklerin işaretlenmesi
- Tekrar-Fırtınası (Loop) Koruması — kısa sürede tekrarlanan aynı isteğin tespiti
- Aşırı Boyut Koruması — aşırı büyük isteklerin reddedilmesi
- Bağlam Bütünlüğü Koruması — sohbet geçmişine sahte rol/talimat enjekte edilmesinin engellenmesi
- Dayanaklılık (Groundedness) Koruması — LLM yanıtının, aynı istekte enjekte edilen RAG bağlamına dayanıp dayanmadığının (halüsinasyon) denetimi
Bu korumaların dördü (kişisel veri maskeleme, istem koruması, veri sızıntısı koruması ve konu-dışı koruması) ayrıca kodlanmış içeriği çözerek tarayabilir — bkz. Kodlanmış İçeriğin Çözülmesi.
İstem koruması, veri sızıntısı koruması ve bağlam bütünlüğü; Prompt Şablonu, Prompt Süsleyici ve RAG politikalarından sonra çalışmalıdır. Denetim, modele gidecek prompt'un tam hâli üzerinde yapılmalıdır; daha erken çalışan bir koruma sonradan eklenen içeriği göremez.
Kişisel veri maskeleme bu kuralın dışındadır. Maskelemenin RAG'den önce mi sonra mı çalışacağı sizin veri sınırı tercihinizdir ve Apinizer bu politikanın yerini değiştirmez. Maskelemeyi RAG'den önce koyduğunuzda kullanıcının kişisel verisi gömme (embedding) sağlayıcısına hiç ulaşmaz.
Politika listesini bu kurala aykırı bir sırayla kaydederseniz Apinizer sırayı kayıt anında otomatik olarak düzeltir ve neyi neden taşıdığını bir bilgi notuyla bildirir. Böylece Develop ekranında gördüğünüz sıra ile izleme ekranındaki gerçek çalışma sırası her zaman aynı kalır.
Kapsam: AI, MCP ve A2A Gateway'lerinde Kullanım
Yukarıdaki sekiz korumadan beşi — Kişisel Veri (PII) Maskeleme, İstem Koruması, Veri Sızıntısı Koruması (DLP), Konu-Dışı Koruması ve Tekrar-Fırtınası (Loop) Koruması — yalnızca AI Gateway proxy'lerinde değil, MCP Gateway ve A2A Gateway proxy'lerinde de eklenebilir ve çalışır:
- MCP'de taranan içerik, bir araç çağrısının argümanlarıdır (JSON-RPC
params.arguments) ve araç çağrısının sonucudur. - A2A'da taranan içerik, gönderilen görevin mesaj parçalarıdır (
parts[]— hem metin hem yapılandırılmış veri).
Bu beş koruma dışındaki türler — Aşırı Boyut Koruması, Bağlam Bütünlüğü Koruması ve Dayanaklılık Koruması dahil — bir LLM çağrısına doğrudan bağlı olduğu için (token/maliyet hesaplaması, sohbet geçmişi yapısı veya RAG bağlamı) yalnızca AI Gateway'lerinde kullanılabilir. Aynı kısıtlama Semantik Önbellek, Token Kotaları ve Hız Sınırlaması, Prompt Süsleyici, Prompt Şablonları ve RAG politikaları için de geçerlidir — bu politikalardan biri bir MCP veya A2A Gateway'ine eklenmeye çalışıldığında kaydetme adımında reddedilir.
Kodlanmış İçeriğin Çözülmesi
Bir kullanıcı istemini base64, onaltılık (hex), yüzde kodlaması (%41) ya da \u0041 biçiminde göndermek, korumaların gördüğü metni değiştirir ama modelin anladığı metni değiştirmez. Modeller bu kodlamaları eğitim sırasında çözmeyi öğrendiği için yük hedefine ulaşır; desen tabanlı bir koruma ise telde yalnızca anlamsız bir karakter dizisi görür. OWASP, bu tekniği ayrı bir tehdit olarak değil, istem enjeksiyonunu (LLM01) filtreden geçiren bir taşıma yöntemi olarak sınıflandırır.
Bu nedenle Kişisel Veri Maskeleme, İstem Koruması, Veri Sızıntısı Koruması ve Konu-Dışı Koruması politikalarının her birinde Kodlanmış içeriği çöz seçeneği bulunur. Seçenek açıkken koruma, taramadan önce istemdeki kodlanmış parçaları çözer ve çözülen metni de denetler.
Seçenek kapalıyken davranış bugünkü hâliyle birebir aynıdır. Mevcut proxy'lerinizin davranışı, siz açmadıkça değişmez.
Çözülen içerik yalnızca denetlenir, değiştirilmez
Çözülen metin taranır, ama hiçbir zaman isteğin gövdesine geri yazılmaz. Bunun pratik bir sonucu var: kodlanmış içerikte kişisel veri veya sır bulunduğunda istek maskelenmez, reddedilir.
Nedeni teknik bir zorunluluk. Maskelenmiş bir değeri base64 bloğunun içine geri yazmak, çağıranın gönderdiği yükün yapısını bozar; iç içe veya kısmi kodlamalarda hangi baytın nereye denk geldiği de güvenilir biçimde eşlenemez. Geriye iki seçenek kalır: ya kodlanmış kişisel veriyi maskesiz olarak sağlayıcıya iletmek — ki bu tam olarak maskelemenin engellemek için var olduğu sızıntıdır — ya da isteği reddetmek. Apinizer ikincisini seçer.
Buna bağlı olarak Veri Sızıntısı Koruması'nda maskele aksiyonlu bir kural, çözülmüş içerikte eşleştiğinde engelle'ye yükseltilir. İşaretle aksiyonu ise olduğu gibi kalır, çünkü işaretleme zaten içeriği değiştirme iddiasında değildir.
İstem Koruması ve Konu-Dışı Koruması'nda böyle bir yükseltme yoktur: bu iki koruma zaten yalnızca tespit eder, kuralınızda ne yazıyorsa o uygulanır.
Yanlış eşleşmeye karşı
Karma (hash) değerleri, UUID'ler ve API anahtarları da base64 ya da onaltılık görünür. Bunları çözmeye kalkmak anlamsız bayt yığınları üretir ve her isteği "gizli içerik taşıyor" gibi gösterirdi. Apinizer çözülen çıktının okunabilir metin oranına bakar; eşiği geçemeyen çıktı sessizce atılır. Bu sayede SHA-256 özeti veya rastgele bir anahtar içeren normal bir istem etkilenmez.
Buna karşılık okunabilir bir JSON'a çözülen bir JWT yükü denetlenir — bu bir yanlış eşleşme değil, istenen davranıştır: içindeki kişisel veri de kapsama girer.
Sınırlar
- Sıkıştırılmış içerik (gzip, deflate) çözülmez. Bu bilinçli bir karardır: desteklenen kodlamaların hepsi çözüldüğünde küçülür, dolayısıyla üstel büyüme riski yoktur; sıkıştırma ise bu güvenceyi ortadan kaldırırdı.
- İç içe kodlama üç kata kadar çözülür; ayrıca girdi boyutu, aday parça sayısı ve toplam çözülen metin için üst sınırlar vardır. Bir sınıra ulaşıldığında tarama kısmi sonuçla sürer ve bu durum izleme kaydına işlenir — sessizce kesilmez.
- Akış (streaming) yanıtlarında parça-parça çözme yapılmaz; tamponlanarak taranan yol kapsam içindedir.
- Çözme başarısız olursa istek reddedilmez: özgün metin üzerinde yapılan tarama zaten çalışmıştır, çözme yalnızca ek bir yüzey açar. Bozuk bir base64 göndererek isteği bilerek reddettirmek mümkün değildir.
Ekrandan Açma
Dört korumanın (Kişisel Veri Maskeleme, İstem Koruması, Veri Sızıntısı Koruması, Konu-Dışı Koruması) politika ekranında bir Kodlanmış İçeriği Çöz anahtarı bulunur:
| Koruma | Anahtarın bulunduğu bölüm |
|---|---|
| Kişisel Veri Maskeleme | Maskeleme Ayarları |
| Veri Sızıntısı Koruması (DLP) | Genel Bilgiler |
| İstem Koruması / Konu-Dışı Koruması | İçerik Kapsamı |
Anahtarı açıp politikayı kaydetmeniz ve Dağıt'a tıklamanız yeterlidir. Aynı ayara APIops REST API (API Referansı: AI Gateway) ile ya da politika JSON'unda decodeEncodedContent alanını true yaparak da ulaşabilirsiniz.
Taranacak Mesaj Rolleri
İstem Koruması ve Konu-Dışı Koruması, sohbet geçmişindeki hangi mesaj rollerinin (system, user, assistant, tool) taranacağını/karşılaştırılacağını üç ayrı anahtarla seçmenize izin verir: sistem mesajlarını dahil et, asistan mesajlarını dahil et, araç (tool) mesajlarını dahil et.
Bu üç anahtar İstem Koruması'nda ve Konu-Dışı Koruması'nda aynı isimleri taşır ama varsayılan yönleri birbirinin tersidir — bir politikadaki alışkanlıkla diğerini yapılandırmayın:
| İstem Koruması | Konu-Dışı Koruması | |
|---|---|---|
| Varsayılan (üçü de boş/ayarlanmamış) | Hepsi taranır — bugünkü tam-tarama davranışı | Yalnızca son user mesajı karşılaştırılır — bugünkü davranış |
| Anahtarın anlamı | Hariç tutma anahtarı: kapatmak taramayı daraltır | Dahil etme anahtarı: açmak karşılaştırmayı genişletir |
Bir anahtarı false/kapalı yapmak | O rolü taramadan çıkarır | (zaten varsayılan — etkisi yok) |
Bir anahtarı true/açık yapmak | (zaten varsayılan — etkisi yok) | O rolü karşılaştırmaya ekler ve aşağıdaki mod değişimini tetikler |
İstem Koruması: hariç-tutma anahtarları
İstem Koruması bugün istekteki her mesajı (rolü ne olursa olsun) tarar — bu üç anahtar taramayı daraltmak için vardır, genişletmek için değil. includeSystemPrompts alanı yalnız role: "system" mesajlarını değil, Anthropic isteklerindeki üst düzey system alanını da kapsar — ikisi aynı anahtarla yönetilir, çünkü ikisi de aynı sistem-istemini taşıyan iki farklı yüzeydir.
- Bilinmeyen/tanınmayan bir rol asla hariç tutulmaz.
developer,function, sağlayıcıya özgü bir rol adı ya da hiçrolealanı taşımayan bir mesaj — bu üç anahtarın etkilediği yalnızsystem/assistant/toololduğu için — her zaman taranır. Bir korumanın, tanımadığı bir rol etiketi yüzünden saldırgan içeriği es geçmesi engellenir. - Boş kalan bir tarama, ham gövdeye düşer. Rol filtresi sonrasında taranacak hiçbir içerik kalmazsa (örn. istek yalnızca
systemmesajı içeriyor veincludeSystemPrompts=false), koruma sessizce boş geçmez — isteğin ham gövdesini tarar. Sonuç: bu anahtarlarla tarama hiçbir zaman hiç yapılmamış hale gelmez, yalnızca hedefli biçimde daraltılır (fail-closed).