Üye adı, yazılacak yolun tamamı değildir
Ajan bir arşivdeki notları belirlenen klasöre açacak. Üye adlarının çoğu notes/a.txt gibi sıradan görünüyor. Bir tanesi üst dizine çıkan bir yol, diğeri hedefe benzeyen başka klasör içeriyor. “Hedef adıyla başlıyor” kontrolü dosyanın gerçekten izin verilen dizin içinde kalacağını göstermeyebilir. Çıkarma işleminden önce ham üye adıyla hesaplanan hedef yolu yan yana görmek, sınır kontrolünün neyi doğruladığını açık hale getirir.
Bu yazı gerçek arşiv açmaz, dosya oluşturmaz veya sisteminizdeki bağlantıları incelemez. Tamamı sentetik yedi üye adı üzerinde savunma amaçlı karar tablosu hazırlıyoruz. Kullanılan kurallar POSIX tarzı, eğik çizgili sanal bir yol alanına aittir. Windows yolları bu profilin dışında tutulur. Çıktı genel bir güvenli arşiv açıcı değil; çıkarma öncesinde incelenecek bir yol sınırı kaydıdır.
İzinli kökü ve kanıt sınırını belirleyin
İzinli kök /demo/inbox olarak verilmiştir. Hedef, bu klasörün altında bir dosya olmalıdır; kök klasörün kendisi dosya hedefi sayılmaz. Mutlak üye yolları reddedilir. Bu dar profilde ters eğik çizgi veya iki nokta içeren adlar desteklenmez. A1 ve A5 için yol bileşenlerinde sembolik bağlantı bulunmadığı örnek varsayımıdır. A6’daki alias bileşeni için ise bağlantı bilgisi yoktur; belirsizlik açık kalacaktır.
Python belgeleri zipfile.Path nesnesinin arşiv adlarını kendiliğinden temizlemediğini ve çağıranın yol doğrulamasından sorumlu olduğunu belirtir. Aynı açıklama extract ve extractall davranışlarından ayrılır. Dolayısıyla bütün arşiv APIlerini tek davranışmış gibi anlatmak doğru olmaz. Kullandığınız gerçek APIyi ve hangi girdileri normalleştirdiğini ayrıca inceleyin; bu örneğin karar tablosunu o belgenin yerine koymayın.Kaynak: Python — zipfile.Path
| Kimlik | Ham üye adı | Bağlantı bilgisi |
|---|---|---|
| A1 | notes/a.txt | Yok olduğu verilmiş |
| A2 | ../outside.txt | Yol dışında |
| A3 | ../inbox-backup/a.txt | Yol dışında |
| A4 | /tmp/a.txt | Mutlak yol |
| A5 | notes/../a.txt | Yok olduğu verilmiş |
| A6 | alias/a.txt | Bilinmiyor |
| A7 | C:\temp\a.txt | Desteklenmeyen yol profili |
Karakter öneki ile dizin ilişkisini ayırın
A3 çözümlendiğinde /demo/inbox-backup/a.txt oluşur. Bu metin /demo/inbox karakterleriyle başlar; ancak inbox-backup, inbox klasörünün alt dizini değildir. Python os.path belgeleri de commonprefix işlevinin karakterlere baktığını, commonpath işlevinin ise yol bileşenleri üzerinden ortak yolu verdiğini açıklar. Bileşen ilişkisi, yalnız metnin başını karşılaştırmaktan farklıdır. Platformların yol kuralları da farklı olduğundan kullanılan yol profilini açık tutmak gerekir.Kaynak: Python — os.path commonpath and commonprefix
| Kimlik | Hesaplanan hedef veya engel | Karar |
|---|---|---|
| A1 | /demo/inbox/notes/a.txt | Yol hesabı uygun |
| A2 | /demo/outside.txt | Ret |
| A3 | /demo/inbox-backup/a.txt | Ret |
| A4 | Mutlak üye yolu | Ret |
| A5 | /demo/inbox/a.txt | Yol hesabı uygun |
| A6 | /demo/inbox/alias/a.txt | Bağlantı incelemesi |
| A7 | Windows biçimi bu profilde desteklenmiyor | Ret |
A2 üst dizine çıkıp izinli kökün dışında kalır. A4 baştan mutlak yoldur; bu profil onu yeni kök gibi kullanmaz. A7’yi POSIX metni olarak kökün altına eklemek, Windows anlamını doğruladığınız anlamına gelmez; burada açıkça reddedilir. A5 ise verilmiş bağlantısız yol varsayımı altında notes bileşenine girip geri çıkar ve kök altında a.txt hedefini verir. Kayıtlar tek bir “temiz ad” etiketine indirgenmez.
Sözcüksel uygunluk çıkarma onayı değildir
A6 metin hesabında kökün altında görünür. Fakat alias başka bir yere yönelen sembolik bağlantıysa dosyanın fiziksel hedefi değişebilir. Gerçek dosya sistemi bilgisi yokken bu satırı güvenli diye kapatmayın. A5 için de bağlantısızlık varsayımı kaldırılırsa yalnız nokta bileşenlerini sadeleştirmek fiziksel yolu kanıtlamaz. Sözcüksel yol hesabı, isimlerin kurallara göre düzenlenmesidir; gerçek bağlantıların çözümlenmesi ayrı kanıttır.
Gerçek bir çıkarıcıda hedefin dosya sistemi üzerinde nasıl çözüldüğü, bağlantı politikası ve kontrol ile yazma arasında durum değişmesi ayrıca ele alınır. Bir defalık önizleme bunları otomatik sağlamaz. Bu yazının kapsamı dosya boyutu, sıkıştırma oranı veya bütün arşiv türlerinin güvenliği de değildir. Sonucun hangi sınırı kontrol ettiğini açık yazmak, dar bir testin daha geniş işlem yetkisi gibi kullanılmasını önler.
Dosya açmadan karar planı hazırlayın
İzinli sanal POSIX kökü /demo/inbox. A1 notes/a.txt; A2 ../outside.txt; A3 ../inbox-backup/a.txt; A4 /tmp/a.txt; A5 notes/../a.txt; A6 alias/a.txt; A7 C:\temp\a.txt. Mutlak yolları, ters eğik çizgiyi ve iki noktayı bu profilde reddet. Hedef kökün altında dosya olmalı. A1/A5 bileşenleri bağlantısız varsayılmış; A6 bilinmiyor. Her üyenin sözcüksel hedefini ve kararını göster. Karakter önekini dizin ilişkisi sayma. Arşiv açma, dosya yazma veya tam güvenlik onayı üretme.
İstemin sonucunda uygun yol hesabı ile bağlantı incelemesi farklı durumlar olmalıdır. Modelin A6 için bir fiziksel hedef uydurması, kanıtsız tamamlamadır. A3 için ise hedef metnini tam yazmasını isteyin; inbox ve inbox-backup ayrımı böylece kolay görülür. Her kimliğin bir kez bulunması, reddedilen üyelerin sessizce listeden kaybolmaması ve ham adların korunması denetimin temel parçalarıdır.
Yol hesabı uygun: A1 ve A5, toplam 2. Ret: A2/A3/A4/A7, toplam 4. Bağlantı incelemesi: A6, toplam 1. 2+4+1=7 üye. Çıkarılan dosya 0. Uygun sözcüksel yol hesabı gerçek çıkarma işleminin tamamlandığını göstermez.
Kökün kendisini dosya saymayın
Yeni bir A8 üyesinin adı notes/.. olsun. Bağlantısız sanal yol varsayımını koruyarak hedefi hesaplayın. Karakter öneki kontrolü ve ortak yol hesabı kökle eşleşse bile bu üyenin neden dosya hedefi koşulunu karşılamadığını açıklayın. Ardından A6 hakkında bağlantı bilgisi gelmediği halde yalnız adını değiştirmenin incelemeyi neden kapatmayacağını düşünün.
A8 hedefi /demo/inbox olur. Bu kökün kendisidir; kök altında dosya hedefi koşulunu karşılamaz ve reddedilir. A6’nın fiziksel bağlantı durumu hâlâ bilinmiyor; sözcüksel bir yeniden adlandırma eksik kanıtı tamamlamaz.
İş akışına dönerken araç sahibinden gerçek yol profili, bağlantı politikası ve yazma anındaki sınır kontrolünü isteyin. Bu masabaşı tablosunu sürümü belli bir kabul örneği olarak saklayabilirsiniz. Böylece AI ajanının önerisi, görünüşte düzgün dosya adları üzerinden değil, her adın taşıdığı hedef ve doğrulama durumu üzerinden değerlendirilebilir.
Kaynaklar ve doğrulama
- Python — zipfile.Path
zipfile.Path adları kendiliğinden temizlemez; çıkartma APIlerinin davranışıyla aynı kabul edilmemeli, çağıran hedefi doğrulamalıdır.
Erişim ve kontrol: - Python — os.path commonpath and commonprefix
Karakter öneki ile yol bileşeni ortaklığını ayırma; işletim sistemlerinin yol kuralları farklıdır.
Erişim ve kontrol:
AI Ajanları ve İş Akışı Otomasyonu
AI Ajanları ve İş Akışı Otomasyonu programında bir dosya işinin izin verilen hedef alanını açıkça tanımlayabilirsiniz. Üye adıyla hedef yolunu yan yana görmek, araca hangi sınırın uygulanacağını tartışmayı sağlar.
- Kuruma özel planlanır