Mobil uygulamamın backend API'sini koruyabilir miyim?
Kısa cevap
Evet. WAF isteği gönderenin tarayıcı mı mobil uygulama mı olduğuna göre farklı denetlemez; mobil backend'in API istekleri de aynı imza ve yapısal denetimlerden geçer. Mobil trafiğe özgü ayarlar öğrenme, engelleme yanıtı ve test cihazları tarafındadır. Analysis & Learning penceresinde varsayılan olarak işaretli gelen Only Browsers, tarayıcı olarak tanınmayan istemcileri elediği için mobil uygulama trafiğini analize sokmaz; mobil API'nin kuralları öğretilirken işareti kaldırılır ve Country Filter mobil kullanıcıların ülkelerini kapsayacak biçimde ayarlanır. Learning Methods penceresindeki AI Learning'in Only Browsers seçeneği varsayılan olarak kapalıdır. Uygulama engellendiğinde HTML yerine JSON alsın diye Blocking Page penceresinde JSON Default Blocking Page şablonu seçilir. Test cihazlarının trafiği Teacher ile tanıtılır: uygulamanın test sürümü TR7-LEARN header'ında Teacher Header alanındaki değeri gönderir; bu istekler engellenmez; engelleme eşiğine ulaşan ya da Monitor durumlu bir imzayı tetikleyen istekler her öğretme döneminde kural setine öğretilir. İstemcinin gerçekten kurumun uygulaması olduğunu doğrulama ve istek hızı sınırlama WAF'ta yoktur: uygulamanın gönderdiği bir header Required Headers ile zorunlu kılınabilir ama taklit edilebilir; hız sınırı L7 DDoS & Threat Protection'da ve Load Balancer Conditions ve action'larıyla kurulur.
Sorun: Mobil Trafik Tarayıcı Trafiği Gibi Görünmez
Mobil uygulamanın backend'e gönderdiği istekler bir web tarayıcısından gelmez: User-Agent alanında uygulamanın ya da HTTP kütüphanesinin adı bulunur, istekler genellikle JSON gövdelidir ve uygulama engelleme yanıtını HTML olarak değil JSON olarak okur. WAF'ın denetimleri bu farktan etkilenmez; ancak varsayılan ayarlar tarayıcı trafiğine göre seçilmiştir:
| Varsayılan | Mobil API'ye etkisi | Ayar |
|---|---|---|
| Analysis & Learning penceresinde Only Browsers işaretli | Mobil istemcilerin istekleri analize girmez; analiz mobil API için kural üretmez | Analizde işaret kaldırılır |
| Analysis & Learning penceresinde Country Filter = Use Selected (Local Networks, Turkey) | Diğer ülkelerdeki kullanıcıların istekleri analize girmez | Ülkeler eklenir ya da No Filter seçilir |
| Engelleme yanıtı HTML sayfası, durum kodu 418 | Uygulama HTML'i ayrıştıramaz; 418'i tanımayabilir | JSON Default Blocking Page; gerekirse Blocking Status Code |
| Learning Methods penceresinde AI Learning Only Browsers kapalı | Mobil trafik AI Learning'e girer | Değişiklik gerekmez |
Çözüm
Ayarlar birbirinin alternatifi değildir; mobil API'ye birlikte uygulanır. Ön koşul: vService'te WAF açıktır (Bir vService'te WAF korumasını nasıl etkinleştiririm?); mobil API ayrı bir alan adındaysa (ör. api.example.com) web sitesinden ayrı mod ve kural setiyle çalışması için kendi host grubu eklenir (Host Group nasıl eklenir; Virtual Host Patterns alanına ne yazılır?).
Mobil API Ayarları
- Nasıl çalışır Kural seti mobil trafikten ya da API tanımından kurulur, engellenen istemciye JSON yanıt döner ve test cihazları Teacher olarak tanınır.
- Nerede açılır Left Monitor Panel → WAF-Protected vServices → vService → WAF Management → Blocking Page ve Learning Methods kartları · mod kartındaki Analysis & Learning
- Gereksinim WAF alanında değiştirme yetkisi; Teacher için uygulamanın test sürümünde header ekleme imkânı
- vService tipi HTTP
Adım adım yapılandırma
API'nin OpenAPI tanımı varsa kurallar içe aktarılır (OpenAPI tanımımdan API koruma kurallarını otomatik oluşturabilir miyim?); yoksa host grubunun Learning modunda topladığı trafik analiz edilir. Analiz penceresinde (mod kartındaki Analysis & Learning yazısı) Only Browsers işareti kaldırılır, Country Filter mobil kullanıcıların ülkelerini kapsayacak biçimde ayarlanır ve Start Analyzing tıklanır. Analiz sonucunda çıkan path'ler kontrol edilir; listede yalnız WAF kuralı oluşturulacak endpoint'ler kalmalıdır, bilinmeyen ya da şüpheli path'lerin uygulamadan önce Exclude from Analysis ile analizden çıkarılması önerilir. Kalan adımlar API için pozitif güvenlik modelini (izin verilen endpoint, metot, parametre) nasıl kurarım? sayfasının 2. yöntemindedir.
WAF Management sekmesinde Inspection & Blocking bölümündeki Blocking Page kartının sağ üstündeki kalem ikonu tıklanır (Blocking Page düzenleme ekranı).
Formun üstündeki hazır şablonlardan JSON Default Blocking Page tıklanır ve onay sorusu onaylanır. Hazır şablon mevcut engelleme sayfası ayarlarının yerine geçer; tanımlı Conditional Blocking Pages girdileri de kaldırılır; koşullu sayfa varsa onay penceresi kaldırılacak sayfa sayısını belirtir. Kaynak manuel içeriğe döner, içerik türü application/json olur ve gövde saldırı bilgisini taşıyan JSON nesnesiyle doldurulur (API istemcileri için HTML yerine JSON engelleme yanıtı dönebilir miyim?).
Uygulama engellemeyi belirli bir kodla algılıyorsa Blocking Status Code listesinden kod (ör. 403) seçilir; varsayılan değeri 418'dir. Şablonlar durum kodunu değiştirmez.
Edit tıklanır. Ayar vService genelinde, bütün host gruplarında geçerlidir.
Learning & Reporting bölümündeki Learning Methods kartının sağ üstündeki kalem ikonu tıklanır (Learning Methods düzenleme ekranı).
Teacher anahtarı açılır; Teacher Header alanına test sürümünün göndereceği gizli değer yazılır ve Teaching Frequency seçilir. Test cihazları sabit bir ağdan bağlanıyorsa Teacher IP de kullanılabilir (yalnızca IPv4) (Teacher nedir; hangi kaynakları Teacher olarak tanımlayabilirim (IP, header, cookie)?).
Edit tıklanır.
Uygulamanın test sürümü, her isteğinde TR7-LEARN adlı header'da 7. adımdaki değeri gönderecek biçimde derlenir (Teacher Header'ının veya cookie'sinin adı ne olmalı (TR7-LEARN); Conditional Learning için hangi ad kullanılır (TR7-ANALYZE)?). Teacher host grubu Monitor ya da Blocking modundayken öğretir; bu değer yayımlanan sürüme konmaz.
Uygulama her istekte belirli bir header (ör. x-app-version) gönderiyorsa endpoint'in kuralında Header sekmesi → Add Common Rule for Header ile Required Headers listesine eklenir ve Add tıklanır (Zorunlu parametre tanımlayabilir miyim (Required Query Parameters / Required Headers / Required Form Fields)?). Bu denetim header'ın varlığına bakar; değerin doğruluğunu ya da istemcinin kimliğini doğrulamaz.
Host grubunun mod kartında başlık şeridinin sağ alt köşesindeki Edit yazısı tıklanır, WAF Mode = Monitor Mode seçilip formdaki Edit tıklanır; mobil uygulamanın akışları Event Logs'ta izlenir, sorun yoksa aynı yoldan Blocking Mode seçilir (Learning modundan Monitor'a, Monitor'dan Blocking'e ne zaman geçmeliyim?). Cluster'da değişiklikler varsayılan auto-sync ile eş cihaza gönderilir; Manual Sync Mode açıksa Synchronize ile gönderilir.
Doğrulama
Engellenecek bir istek gönderilir ve yanıtın içerik türüne bakılır.
Komut: curl -s -i -H "User-Agent: okhttp/4.12.0" "https://api.example.com/v1/items?q=1%27%20OR%20%271%27=%271"
Content-Type: application/json; gövdede attackInfoTest sürümünün istekleri sonrasında Teacher Tracking sekmesine bakılır (AI Learning da açıksa sekmenin adı AI Learning & Teacher Tracking olur); Teacher Tracking görünümü seçilip Refresh tıklanır.
Test cihazının false positive'leri sıradaki öğretme döneminde listelenirSık Yapılan Hatalar
Teacher değerini yayımlanan uygulamaya koymak
Teacher kimliğini taşıyan istekler hiçbir modda engellenmez (taraması süre sınırını aşan istek de geçirilir) ve kuralları gevşetir. Değer uygulamanın mağazaya çıkan sürümüne konursa uygulamayı inceleyen herkes WAF'ı kendi trafiğine öğretebilir; değer yalnızca test sürümünde kullanılır ve öğretme bitince Teacher kapatılır (Yanlış tanımlanmış bir Teacher'ın riski nedir?).
- Analizde Only Browsers işaretini bırakmak. Mobil istemcilerin istekleri analize girmez; analiz mobil API için kural üretmez ya da eksik üretir.
- Country Filter'ı varsayılanda bırakmak. Varsayılan yalnızca Local Networks ve Turkey'dir; diğer ülkelerdeki kullanıcıların istekleri analize girmez.
- Required Headers'ı kimlik doğrulama sanmak. Header taklit edilebilir; istemcinin gerçekten uygulama olduğu WAF'ta doğrulanmaz.
- Engelleme yanıtını HTML bırakmak. Uygulama HTML gövdeyi ayrıştıramaz ve hatayı kullanıcıya anlamsız gösterir; JSON şablonu ve uygulamanın tanıdığı bir durum kodu kullanılır.
- TLS'i TR7'de sonlandırmadan koruma beklemek. WAF'ın HTTPS içeriğini görmesi için TLS bu vService'te sonlandırılır; uygulama sertifika sabitleme (pinning) kullanıyorsa TR7'nin sunduğu sertifika ya da anahtar sabitlenir (WAF, HTTPS trafiğinin içeriğini görebilir mi; bunun için ne gerekir?).
Dokümantasyonda nasıl yapılır
İlgili sorular
