Dosya yüklemeleri WAF tarafından engelleniyor; nasıl çözerim?
Kısa cevap
Engeli veren denetim, yükleme isteğinin Event Logs kaydındaki Attacks sekmesinde Attack name ve Attack area değerlerinden okunur. En sık nedenler: dosyanın içeriğinden tespit edilen türün Allowed Upload Mime Types listesinde olmaması (Attack area Form@tür), dosya içeriğinde ya da gövdenin tamamında bir imza eşleşmesi (Attack area Raw), dosya adında ya da başka bir form alanında imza eşleşmesi (Form@alan), Raw Body Size sınırının aşılması ve çözümlenemeyen çok parçalı gövde (Block Invalid Form Contents). Analysis & Learning ile üretilen sayfa tiplerinde dosya türü listesi yalnızca öğrenme sırasında görülen türleri, Raw Body Size ise görülen en büyük gövdeyi kapsar; bu yüzden yeni bir dosya türü ya da daha büyük bir dosya engellenir. False positive kayıttan Allow ile öğretilir ya da yükleme yolunun sayfa tipinde Form ve Raw ortak kuralı düzenlenir; değişiklik yalnızca o sayfa tipini etkiler. Event Logs'ta kaydı olmayan 418'de önce tarama zaman aşımı (2 saniyelik süre sınırı) araştırılır; 408 ise gövdenin HTTP Request Timeout süresinde gelmediğini gösterir.
Sorun: Dosya Yüklemeleri Engelleniyor
Yükleme formu engelleme sayfası (varsayılan durum kodu 418) döndürüyor; bazı dosya türleri ya da büyük dosyalar reddediliyor. Dosya yükleme isteği çok parçalı (multipart/form-data) bir gövde taşıdığından aynı istek WAF'ın birden çok denetiminden geçer ve her denetim Event Logs'ta farklı bir kural adıyla görünür.
Olası Nedenler
| Attacks sekmesinde görünen | Neden | Çözüm |
|---|---|---|
Attack Name = Allowed Upload Mime Types; Attack area = Form@tür; Description = tespit edilen tür | Dosyanın içeriğinden tespit edilen tür, eşleşen kuralın izin listesinde değil | Yöntem 2 |
İmza adı; Attack Area = Raw (parametresiz) | Çok parçalı gövdenin tamamında imza eşleşmesi; bu tarama Raw sekmesindeki OWASP Check ile yapılır (Multipart isteklerde gövdenin tamamı ayrıca taranır mı?) | Yöntem 3 |
İmza adı; Attack Area = Raw@dosya-alanı | Dosya içeriğinde imza eşleşmesi (OWASP Check in Upload) | Yöntem 3 |
İmza adı; Attack Area = Form@alan | Dosya adında ya da başka bir form alanının değerinde imza eşleşmesi; dosya alanının değeri dosya adıdır | Yöntem 1 ya da Belirli bir parametrede OWASP taramasını kapatabilir miyim? |
Raw Body Size; Attack area = Raw | Gövdenin bildirilen boyutu (Content-Length) kuralın aralığı dışında | Yöntem 3 |
Block Invalid Form Contents; Attack area = Form | Çok parçalı gövde çözümlenemedi: bir parçada dosya adı (filename) var ama Content-Type yok ya da tersi, dosya adı tırnaksız ya da boş (dosya seçilmeden gönderilen dosya alanı filename="" taşır), parça sınırları tutarsız | İstemci düzeltilir ya da Yöntem 2'de kutu kaldırılır |
Block All Form Contents; Attack Area = Form | Eşleşen kural form gövdesini hiç kabul etmiyor (Block All Form Contents) | Yöntem 2'de kutu kaldırılır |
Allowed Methods; Attack Area = Path | Yükleme metodu (POST ya da PUT) sayfa tipinin Allowed Methods listesinde değil | Yöntem 1 |
Block Unparsed Contents; Attack area = Raw | Gövde denetim tamponuna sığmadı ya da bekleme süresinde tamamlanmadı | Büyük POST istekleri engelleniyor veya yarıda kesiliyor; neden? |
| Event Logs'ta kayıt yok, yanıt 418 | Blocking mode'da tarama 2 saniyelik süre sınırı içinde tamamlanamadı; büyük dosyalarda gövdenin tamamı tarandığı için olasılık artar | 418 alan bir istek Event Logs'ta neden görünmüyor? |
| Event Logs'ta kayıt yok, yanıt 408 ya da yükleme yarıda kesiliyor | WAF açıkken gövde tampona alınarak beklenir; tampona alınan bölüm HTTP Request Timeout (varsayılan 30 sn) içinde gelmedi | Büyük dosya yüklemeleri başarısız oluyor; neden? |
Kesin kurallar:
- Yol, sorgu ve başlık denetimlerinden sonra çok parçalı bir yükleme isteğinin gövdesi şu sırayla denetlenir: Raw Body Size → tampon (Block Unparsed Contents) → Block All Form Contents → gövdenin çözümlenmesi (Block Invalid Form Contents) → gövdenin tamamının Raw imza taraması → Allowed Upload Mime Types → dosya içeriklerinin imza taraması → dosya adı ve alan değerlerinin Form imza taraması → Form uzunluk ve alan listesi kısıtları. Toplam puan engelleme eşiğine ulaştığı anda denetim durur; kayıt o ana kadarki saldırıları gösterir. Bir ihlal giderildikten sonra sıradaki denetim ortaya çıkabilir.
- Dosya türü istemcinin bildirdiği
Content-Type'tan değil, dosyanın içeriğinden tespit edilir; içerikten tür çıkmayan düz metinde tür dosya adının uzantısından tamamlanır. Tanınmayan ikili içerikapplication/octet-stream, belirli bir biçimi olmayan metintext/plainsayılır. Listedeki girişler tespit edilen türle alt dize olarak eşleşir (imagebütün görsel türlerini kapsar) ve küçük harfle yazılır (Dosya türü kontrolü istemcinin gönderdiği Content-Type'a mı, dosyanın içeriğine mi bakar?). - Any Paths kuralının hazır listesinde 14 tür vardır:
application/octet-stream,application/pdf,text/plain,text/csv,application/json,application/zip,image/jpeg,image/png,image/gif,image/webp,image/svg+xmlve üç Office Open XML türü (DOCX, XLSX, PPTX). İçeriğinden tanınan ama listede olmayan türler (ör.video/mp4,video/quicktime,application/x-rar-compressed,application/x-7z-compressed, eski Word ve Excel biçimleriapplication/msword,application/vnd.ms-excel,text/html,application/xml) engellenir. - Any paths'te Raw Body Size aralığı 1 – 268.435.456 bayttır (256 MiB) ve tampona sığmayan gövde için Allow Unparsed Body seçilidir. Analysis & Learning'in oluşturduğu sayfa tiplerinde ise Allowed Upload Mime Types yalnızca öğrenme sırasında görülen türleri içerir, Raw Body Size en az 16.384 bayt olmak üzere görülen en büyük gövdeye göre genişletilir, Block Unparsed Body ve Block Invalid Form Contents seçili gelir.
- İstek, eşleştiği sayfa tipinin Form ve Raw ortak kuralıyla denetlenir. Sayfa tipinin kendi ortak kuralı yoksa değerler path'e uyan glob kuraldan ya da Any paths'ten devralınır ve detay panelinin Rule Source satırında görünür (devralma).
- Bütün bu denetimler Blocking Mode'da engeller, Monitor Mode'da yalnızca kayıt üretir; Learning Mode'da puanlanmaz. Tarama zaman aşımı yalnızca Blocking mode'da, Request Body Limits penceresindeki Fail-open kapalıyken (varsayılan) engeller; Learning ve Monitor mode'da taraması tamamlanamayan istek geçirilir (tek istisna, taramanın WAF kuralları yüklenirken ve host grubu belirlenmeden kesilmesidir: vService'te Blocking mode'da bir grup varsa bu istek engellenir (WAF Mode · Blocking Mode)).
Nereden İzlenir?
| Ekran | Yol | Ne gösterir |
|---|---|---|
| Event Logs | Left Monitor Panel → WAF-Protected vServices → vService → Event Logs | Attacks sekmesinde Attack name, Attack area, Description, Corresponding rule, Learning suggestion; Request & Location sekmesinde Matching path rules ve HTTP headers |
| Page Types | WAF Management → host grubunun mod kartı → N page types | Kuralın Form ve Raw sekmelerindeki değerler; devralınan değerlerde Rule source |
| Debug Mode Logs | Left Monitor Panel → Load Balancer vServices → vService → Logs & Tracking (vService Debug mode'dayken) | Event Logs'ta kaydı olmayan isteklerde Security action ve Termination state; ekran Load Balancer alanında izleme yetkisi ister |
Nasıl Teşhis Edilir?
- Kullanıcıdan engelleme sayfasındaki Request ID ve olay saati alınır; yanıt 408 ya da kopan bağlantıysa Büyük dosya yüklemeleri başarısız oluyor; neden? sayfasına geçilir.
- Event Logs'un sunucu filtresi sekmesinde Request Unique ID alanına Request ID yazılır ve Save & Get Logs tıklanır. Kayıt yoksa 418 alan bir istek Event Logs'ta neden görünmüyor? sayfasındaki adımlar izlenir.
- Satıra tıklanır; Attacks sekmesinde her saldırının Attack Name ve Attack Area değeri okunur ve yukarıdaki tabloyla eşleştirilir. Allowed Upload Mime Types kaydında Description tespit edilen türü yazar.
- Corresponding Rule isteğin eşleştiği kuralı (sayfa tipi ya da Any paths) gösterir; değişiklik bu kurala yapılır. Learning Suggestion öğretme işleminin ne değiştireceğini yazar (ör.
Allowed upload mime types: video/mp4 will be added). - Yapısal ihlal (tür, boyut, yapı) bir false positive değil de gerçekten reddedilmesi gereken bir dosyaysa değişiklik yapılmaz; WAF beklendiği gibi çalışmıştır.
Çözüm: Dört Yöntem
Yöntemler birbirinin alternatifidir. Tek tek false positive'ler kayıttan öğretilir; aynı yükleme sayfası için kalıcı ayar Form ya da Raw ortak kuralında yapılır.
| Durumunuz | Uygun yöntem |
|---|---|
| Event Logs'ta kayıt var; engel false positive | Yöntem 1: Event Logs'tan Allow |
| Dosya türü reddediliyor ya da form yapısı denetimi engelliyor | Yöntem 2: Yükleme sayfasının Form ortak kuralı |
| Gövde ya da dosya içeriğinde imza eşleşmesi; Raw Body Size aşıldı | Yöntem 3: Yükleme sayfasının Raw ortak kuralı |
| Dosya türü izin listesine komut satırından eklenecek | Yöntem 4: WEB-CLI |
| Kayıt Block Unparsed Contents ya da kayıtsız 418 | Büyük POST istekleri engelleniyor veya yarıda kesiliyor; neden? |
| Yükleme yalnızca güvenilir bir kaynaktan yapılıyor ve hiç denetlenmesin isteniyor | Belirli IP'leri veya istekleri WAF incelemesinden tamamen muaf tutabilir miyim (Whitelist Condition)? |
Yöntem 1: Event Logs'tan Allow Önerilen
- Nasıl çalışır Kayıttaki saldırı öğretilir: dosya türü izin listesine eklenir, imza ilgili alanın OWASP Exclusions listesine alınır, Raw Body Size aralığı genişletilir ya da yapı denetimi (Block Invalid Form Contents, Block All Form Contents) kapatılır. Yapılacak değişiklik Learning Suggestion satırında önceden yazar.
- Nerede açılır Left Monitor Panel → WAF-Protected vServices → vService → Event Logs → kayıt → Attacks
- Gereksinim WAF değiştirme yetkisi; kaydın Event Logs'ta bulunması (host grubu Monitor ya da Blocking mode'da)
- vService tipi HTTP
Adım adım yapılandırma
Left Monitor Panel'de WAF-Protected vServices kategorisi seçilir, vService'e tıklanır ve Event Logs sekmesi açılır.
Sunucu filtresi sekmesinde Request Unique ID alanına engelleme sayfasındaki Request ID yazılır ya da Date Range yüklemenin yapıldığı zamanı kapsayacak şekilde seçilir (sunucu filtresi).
Save & Get Logs tıklanır.
Yükleme isteğinin satırına tıklanır ve önizlemede Attacks sekmesi seçilir; Attack Name, Attack Area, Description ve Learning Suggestion okunur.
Saldırı tablosunda yalnızca false positive olan saldırının kutusu işaretlenir. Gerçek bir saldırı da işaretlenirse o da öğretilir.
Tablonun üstündeki buton tıklanır. Buton engellenmiş bir kayıtta Allow, Monitor mode'da yazılmış bir kayıtta Teach adını taşır (Allow / Teach).
Are you sure? sorusunda Yes tıklanır. Değişiklik ayrı bir kaydetme ya da dağıtım adımı olmadan uygulanır. Cluster kurulumunda değişiklik varsayılan auto-sync ile eş cihaza da gönderilir; Manual Sync Mode açıksa Synchronize ile gönderilir. Ayrıntı: Yanlışlıkla engellenen bir isteğe nasıl izin veririm?
Doğrulama
Event Logs'ta öğretilen kaydın Attacks kolonuna bakılır.
İlk sayı 0; satır yeşilAynı dosya yeniden yüklenir.
Yükleme tamamlanır; yeni kayıt yokYöntem 2: Yükleme Sayfasının Form Ortak Kuralı
- Nasıl çalışır Yükleme yolunun sayfa tipinde Form sekmesinin ortak kuralı düzenlenir: Allowed Upload Mime Types listesine tür eklenir ya da Block Invalid Form Contents / Block All Form Contents kaldırılır. Değişiklik yalnızca bu sayfa tipine uygulanır; Any paths ve diğer sayfalar değişmez.
- Nerede açılır Left Monitor Panel → WAF-Protected vServices → vService → WAF Management → N page types → kural → Form sekmesi
- Gereksinim WAF değiştirme yetkisi
- vService tipi HTTP
Adım adım yapılandırma
Left Monitor Panel'de WAF-Protected vServices seçilir, vService'e tıklanır ve WAF Management sekmesi açılır. İsteğin düştüğü host grubunun mod kartındaki N page types bağlantısı tıklanır; Page Types sekmesi açılır (ekrana erişim).
Listede yükleme yolunun kendi satırı yoksa (kayıttaki Corresponding Rule Any paths ya da geniş bir glob kuralıysa) araç çubuğundaki Add tıklanır. Yükleme yolunun sayfa tipi varsa 5. adıma geçilir.
Path alanına yükleme isteğinin yolu joker karakter olmadan (ör. /upload) yazılır; değer büyük/küçük harfe duyarlıdır ve sonunda / olmamalıdır. Allowed Methods varsayılan olarak Any Methods'tur (Exact path ekleme ekranı).
Add tıklanır; sayfa tipi listeye eklenir. Yeni sayfa tipi Form ve Raw denetimlerini kendi ortak kuralı tanımlanana kadar path'e uyan glob kuraldan ya da Any paths'ten devralır.
Listede yükleme yolunun satırına tıklanır; sağda kuralın detay paneli açılır.
Panelin sekme şeridinde Form tıklanır. Rule source satırı görünüyorsa değerler başka bir kuraldan devralınmaktadır.
Kuralın kendi Form ortak kuralı yoksa Add Common Rule for Form, varsa Edit Common Rule for Form tıklanır. Ekleme formu boş açılmaz; Any paths kuralının Form değerleriyle dolu gelir (Add common rule for Form ekranı).
Kayıttaki ihlale göre:
| Kayıt | Formda yapılan |
|---|---|
| Allowed Upload Mime Types | Allowed Upload Mime Types listesine kayıttaki Description değeri (ör. video/mp4) küçük harfle eklenir; bütün görseller için image yeterlidir |
| Block Invalid Form Contents | Block Invalid Form Contents işareti kaldırılır; çözümlenemeyen gövde engellenmez, ham içerik olarak Raw imza taramasından geçer |
| Block All Form Contents | Block All Form Contents işareti kaldırılır |
OWASP Check in Upload dosya içeriklerinin taranmasını yönetir ve varsayılan olarak işaretlidir; kapatılması gövdenin tamamının Raw taramasını kapatmaz (Upload taramasını kapattım, dosyalar hâlâ engelleniyor; neden?).
Formdaki Add (yeni ortak kural) ya da Edit (mevcut ortak kural) tıklanır; WAF yapılandırması ayrı bir dağıtım adımı olmadan yeniden üretilip uygulanır. Cluster kurulumunda değişiklik varsayılan auto-sync ile eş cihaza da gönderilir; Manual Sync Mode açıksa Synchronize ile gönderilir.
Doğrulama
Kuralın Form sekmesindeki Allowed Upload Mime Types satırına bakılır.
Eklenen tür listede; Rule source satırı yokEvent Logs'ta engellenen yükleme kaydının Attacks kolonuna bakılır.
İlk sayı düşerYöntem 3: Yükleme Sayfasının Raw Ortak Kuralı
- Nasıl çalışır Gövdenin tamamının ve dosya içeriklerinin imza taraması Raw sekmesinin OWASP Check ayarını ve OWASP Exclusions listesini kullanır; false positive imza bu listeye eklenir. Aynı formda Raw Body Size aralığı genişletilir.
- Nerede açılır Left Monitor Panel → WAF-Protected vServices → vService → WAF Management → N page types → kural → Raw sekmesi
- Gereksinim WAF değiştirme yetkisi
- vService tipi HTTP
Adım adım yapılandırma
WAF Management sekmesinde host grubunun mod kartındaki N page types bağlantısı tıklanır. Yükleme yolunun sayfa tipi yoksa önce Yöntem 2'nin 2–4. adımlarıyla oluşturulur.
Listede yükleme yolunun satırına tıklanır; detay paneli açılır.
Panelin sekme şeridinde Raw tıklanır.
Add Common Rule for Raw (kuralın kendi Raw ortak kuralı yoksa) ya da Edit Common Rule for Raw tıklanır (Add common rule for Raw ekranı). Ekleme formu Any paths'in Raw değerleriyle dolu açılır.
| Kayıt | Formda yapılan |
|---|---|
İmza adı, Attack area Raw ya da Raw@dosya-alanı | OWASP Check işaretli kalır; OWASP Exclusions listesinde kayıttaki imza (Attack name) seçilir |
| Raw Body Size | Raw Body Size aralığının üst sınırı bayt cinsinden yükleme sayfasının kabul edeceği en büyük gövdeye göre artırılır |
OWASP Check kaldırılırsa bu sayfadaki gövdenin tamamı ve yüklenen dosyaların içerikleri imza taramasından hiç geçmez; bu yalnızca riskin kabul edildiği yükleme uçlarında yapılır. OWASP exclusions listesi Max. OWASP Exclusions değerinden (varsayılan 25) uzun olursa bu alandaki imza taraması tümüyle kapanır.
Formdaki Add ya da Edit tıklanır; değişiklik ayrı bir dağıtım adımı olmadan uygulanır. Cluster kurulumunda değişiklik varsayılan auto-sync ile eş cihaza da gönderilir; Manual Sync Mode açıksa Synchronize ile gönderilir.
Doğrulama
Kuralın Raw sekmesindeki OWASP check ve Raw Body Size satırlarına bakılır.
OWASP check satırındaki istisna sayısı artar; Raw body size yeni aralığı gösterirYöntem 4: WEB-CLI
- Nasıl çalışır Kuralın mevcut Form ortak parçasındaki Allowed Upload Mime Types listesine WEB-CLI
waf rule-parts updatekomutuyla tür eklenir. - Nerede açılır WEB-CLI →
waf host-groups·waf fw-rules·waf rule-parts - Gereksinim WEB-CLI erişimi ve WAF değiştirme yetkisi; kuralın kendi Form ortak parçasının bulunması
- vService tipi HTTP
Adım adım yapılandırma
waf host-groups list poolId <vService>Varsayılan host grubunun kimliği defaultHost'tur.
waf fw-rules list poolId <vService> hostGroupId <grup>Any paths kuralının kimliği wr-default'tur.
waf rule-parts list poolId <vService> hostGroupId <grup> ruleId <kural>Bölgesi form olan ve argüman adı taşımayan parça ortak parçadır. Listede yoksa kural bu bölgeyi devralmaktadır; ortak parça arayüzde Yöntem 2'deki Add Common Rule for Form ile oluşturulur. WEB-CLI'daki waf rule-parts add … loc form komutu Block All Form Contents ve Block Invalid Form Contents alanlarını belirtilmediğinde açık yazar (loc form alanları).
waf rule-parts show poolId <vService> hostGroupId <grup> ruleId <kural> <parça>Çıktıdaki formAllowedMimeTypes.0, formAllowedMimeTypes.1 … satırları listedeki türlerdir.
--formAllowedMimeTypes.N o sıradaki mevcut türün yerine geçer; bu yüzden yeni tür ilk boş sıraya yazılır. Any paths'in hazır listesi değiştirilmediyse 14 tür (sıra 0–13) vardır ve ilk boş sıra 14'tür:
waf rule-parts update poolId <vService> hostGroupId <grup> ruleId <kural> id <parça> --formAllowedMimeTypes.14 video/mp4İmza istisnası (OWASP exclusions) arayüzden, Yöntem 1 ya da Yöntem 3 ile eklenir.
Doğrulama
Parça yeniden görüntülenir.
Komut: waf rule-parts show poolId <vService> hostGroupId <grup> ruleId <kural> <parça>
formAllowedMimeTypes.14 video/mp4; önceki türler yerindeSık Yapılan Hatalar
- Any paths'i gevşetmek. Any paths'e yapılan değişiklik hiçbir sayfa tipine uymayan bütün isteklere yayılır; yükleme yoluna kendi sayfa tipi ve ortak kuralı tanımlanır.
- İstemcinin bildirdiği Content-Type'ı listeye eklemek. Tür dosyanın içeriğinden tespit edilir; listeye kayıttaki Description değeri eklenir.
- Değişikliği isteğin eşleşmediği kuralda yapmak. Ayar, kayıttaki Corresponding Rule'da yazan kurala yapılır; exact bir sayfa tipine ya da glob kurala düşen istek Any paths'teki değişiklikten etkilenmez.
- OWASP check in upload'ı kapatmanın bütün taramayı durdurduğunu sanmak. Gövdenin tamamı Raw sekmesinin OWASP ayarıyla ayrıca taranır (Upload taramasını kapattım, dosyalar hâlâ engelleniyor; neden?).
- WEB-CLI'da dolu bir sıraya yazmak.
--formAllowedMimeTypes.0listedeki ilk türün yerine geçer; öncewaf rule-parts showile ilk boş sıra bulunur. - Kayıt yoksa WAF'ı elemek. Tarama zaman aşımıyla engellenen istek Event Logs'a yazılmaz; iz Debug Mode Logs'ta kalır (418 alan bir istek Event Logs'ta neden görünmüyor?).
Dokümantasyonda nasıl yapılır
