Debug/test parametreleri içeren istekleri engelleyebilir miyim?
Kısa cevap
Evet, HTTP vService'te. Query Parameter koşulunda parametre adı (ör. debug) yazılır ve eşleştirme olarak Is present seçilir; koşul bir Block aksiyonuna bağlanır ve parametreyi debug=… biçiminde taşıyan istek, değeri ne olursa olsun Kurum Servisine ulaşmadan engellenir. Değersiz ?debug biçimi, birden çok parametre ve harf varyantları tek bir Path + Query koşulunda Regex ile yakalanabilir. WAF etkinse sayfa tipinin Allowed Query Parameters listesi, listede olmayan her parametre adını ihlal sayar.
Sorun: Canlı Ortamda Debug Parametreleri Açık Kalıyor
Uygulamalar geliştirme sırasında debug, test ya da trace gibi parametrelerle ek bilgi döndürebilir. Bu parametreler canlı ortamda açık kaldığında hata ayrıntıları ve iç bilgiler dışarıya görünebilir; bu parametreleri taşıyan isteklerin Kurum Servisine hiç ulaşmaması istenir.
Çözüm: Dört Yöntem
Yöntem 1 ve 2 aynı Block aksiyonunu farklı koşullarla kurar; Yöntem 3 WAF'ın pozitif listesidir; Yöntem 4, Yöntem 2'nin komut satırı karşılığıdır.
| Durumunuz | Uygun yöntem |
|---|---|
| Bir ya da birkaç bilinen parametre adı | Yöntem 1: Query parameter (Is present) + Block |
Birden çok parametre tek koşulda; Debug, DEBUG gibi harf varyantları da yakalanmalı | Yöntem 2: Path + Query (Regex) + Block |
| WAF lisansı var; yalnızca izin verilen parametre adları kabul edilmeli | Yöntem 3: WAF → Allowed Query Parameters |
| Komut satırından kurulum | Yöntem 4: WEB-CLI |
Yöntem 1: Query Parameter (Is Present) + Block Önerilen
- Nasıl çalışır Koşul, adı girilen parametrenin sorgu dizgesinde bulunup bulunmadığına bakar;
=ile yazılan parametre değeri ne olursa olsun (?debug=1,?debug=true) eşleşir. Değer taşımayan?debugbiçimi bu koşulla yakalanmaz; onu da yakalamak için Yöntem 2 kullanılır. Parametre adı büyük/küçük harfe duyarlıdır. - Nerede açılırLoad Balancer → Conditions → Query Parameter · Load Balancer → Actions → Block
- Gereksinim Yok
- vService tipi HTTP (Query parameter koşulu ve Block aksiyonu yalnızca HTTP vService'te kullanılır)
Adım adım yapılandırma
Load Balancer → Conditions → Add ile koşul formu açılır (nasıl eklenir).
Condition Name = debug-param, Criteria = Query Parameter seçilir; Query Parameter alanına debug yazılır ve eşleştirme listesinde Is present seçilir. Bu seçimde Query ve Case Insensitive alanları gizlenir. Her parametre için ayrı koşul oluşturulur (debug parametresi senaryosu).
Koşul Add ile kaydedilir; başka bir parametre (ör. test) için Add & Repeat kullanılırsa form yeni koşul için açık kalır.
Load Balancer → Actions → Add ile aksiyon formu açılır.
Action Name = debug-engelle, Action Type = Block seçilir; Execution Level varsayılan On Request, Deny Type varsayılan Standard bırakılır, Status Code varsayılan 403'tür (sayfanın varlığını gizlemek için 404 seçilebilir). Engel yerine bilgi sayfası gösterilmek istenirse Block yerine Show Content seçilir; bu aksiyonda Status code varsayılan 200 olduğu için 403 ya da 404 seçilmelidir (Belirli isteklere backend'e gitmeden doğrudan içerik dönebilir miyim (Show Content)?).
Conditions alanında debug-param seçilir; birden çok parametre koşulu varsa aynı grupta or ile bağlanır. Conditions alanı boş bırakılırsa aksiyon bütün trafiğe uygulanır.
Aksiyon Add ile kaydedilir.
Load Balancer → Load Balancer vService List ekranında HTTP vService seçilip Edit ile düzenleme formu açılır.
Details → Actions alanında debug-engelle seçilir. Aksiyon vService'e eklenmedikçe çalışmaz.
Form Save ile kaydedilir. Kurum Servisi tarafında değişiklik gerekmez. Cluster'da değişiklik varsayılan olarak eş cihaza otomatik aktarılır; Manual Sync Mode açıksa Synchronize ile gönderilir.
Doğrulama
Komut: curl -s -o /dev/null -w '%{http_code}' 'https://www.example.com/?debug=1'
403Komut: curl -s -o /dev/null -w '%{http_code}' 'https://www.example.com/'
200Yöntem 2: Path + Query (Regex) + Block
- Nasıl çalışırPath + Query koşulu yol ile sorgu dizgesini birlikte (ör.
/urun?debug=1) değerlendirir; Regex ve Case Insensitive ile birden çok parametre adı ve harf varyantları tek koşulda yakalanır. Değer ham (URL kodlu) hâliyle karşılaştırılır. - Nerede açılırLoad Balancer → Conditions → Path + Query
- Gereksinim Yok
- vService tipi HTTP
Adım adım yapılandırma
Load Balancer → Conditions → Add ile koşul formu açılır.
Condition Name = debug-param-regex, Criteria = Path + Query, eşleştirme listesinde Regex seçilir; Query alanına [?&](debug|test|trace)(=|&|$) yazılır ve Case Insensitive işaretlenir. Desen ?debug=1, ?x=1&TEST, ?trace isteklerini yakalar; ?debugger=1 ya da ?x=debug isteklerini yakalamaz.
Koşul Add ile kaydedilir.
Yöntem 1'in 4–7. adımları uygulanır; Conditions alanında debug-param-regex seçilir.
Yöntem 1'in 8–10. adımları uygulanır: vService Edit ile açılır, Details → Actions alanında aksiyon seçilir ve form Save ile kaydedilir.
Doğrulama
Komut: curl -s -o /dev/null -w '%{http_code}' 'https://www.example.com/?Debug=1'
403Yöntem 3: WAF → Allowed Query Parameters
- Nasıl çalışır Sayfa tipindeki Allowed Query Parameters bir pozitif listedir: listede olmayan her parametre adı Structure Policies kategorisinde ihlal olarak puanlanır. Ad eşleştirmesi ham ve büyük/küçük harfe duyarlıdır.
- Nerede açılır Left Monitor Panel → WAF-Protected vServices → vService → WAF Management → Page Types → kural → Query sekmesi
- Gereksinim WAF lisansı; WAF etkin HTTP vService; Argument Checks açık
- vService tipi HTTP
Adım adım yapılandırma
vService'te WAF açık değilse HTTP vService düzenlenir, Details altındaki WAF kutusu işaretlenip Save ile kaydedilir; ayrıntı: WAF, L7 DDoS & Threat Protection ve AGS'yi bir vService'e nasıl bağlarım?
WAF Management sekmesinde Page Types listesinden kural (tüm site için Any paths) açılır; Query sekmesinde Add common rule for Query (kural varsa Edit common rule for Query) tıklanır (ekran).
Allowed Query Parameters kısıtı açılır ve uygulamanın kullandığı parametre adları tek tek eklenir. debug, test gibi adlar listeye eklenmez. Listedeki ad sayısı Max. Allowed Arguments sınırını (varsayılan 25) aşarsa bu kural için liste denetimi devre dışı kalır.
Form Add ile kaydedilir. Argument Checks kapalıysa bu denetim üretilmez.
WAF Management sekmesinde mod kartının Edit butonuyla WAF Mode = Blocking Mode seçilip kaydedilir (WAF mode Edit ekranı). WAF Learning modunda başlar; Learning modunda bu denetim çalışmaz (yalnızca kısıt önerisi öğrenilir), Monitor modunda ihlal raporlanır ancak istek geçirilir.
Doğrulama
?debug=1 ile istek gönderilir; WAF-Protected vServices → vService → Event Logs ekranına bakılır.
Allowed Query Parameters ihlali, Attack blockedYöntem 4: WEB-CLI
- Nasıl çalışır Koşul ve Block aksiyonu
lb condition/lb actionile oluşturulur, aksiyonlb serviceile vService'e eklenir. WEB-CLI'da Query parameter koşulunun parametre adı alanı bulunmadığından Path + Query koşulu kullanılır. - Nerede açılır TR7 WEB-CLI →
lb condition·lb action·lb service - Gereksinim WEB-CLI erişimi
- vService tipi HTTP
Adım adım yapılandırma
WEB-CLI her satırı ayrı bir komut olarak çalıştırır; komutlar tek satırda yazılır. | karakteri tırnak içinde bile komutu ikiye böler; bu yüzden Yöntem 2'deki (debug|test|trace) deseni WEB-CLI'a yazılamaz. Her parametre için | içermeyen ayrı bir koşul oluşturulur ve koşullar aksiyonda or ile birleştirilir. Tek desenle çalışılmak istenirse koşul arayüzden (Yöntem 2) girilir.
[?&]debug([=&].*)?$ deseni, Yöntem 2'deki desenin debug kısmıyla aynı istekleri yakalar: ?debug, ?debug=1, ?x=1&debug&y=2; ?debugger=1 ve ?x=debug eşleşmez (içerik eşleştiren ölçütler).
lb condition add criteria pathq query '[?&]debug([=&].*)?$' --content_placement regex --caseInsensitive true --name debug-param
lb condition add criteria pathq query '[?&]test([=&].*)?$' --content_placement regex --caseInsensitive true --name test-paramAksiyonun --cond alanı koşulun adını değil kimliğini ister. lb condition add başarılı olduğunda çıktı vermez; kimlikler aşağıdaki listenin id sütununda görülür (lbConditions- ile başlar).
lb condition listİki koşul tırnak içinde or ile birleştirilir; Status code belirtilmezse 403'tür (engelleme aksiyonları).
lb action add type deny name debug-engelle --cond "<debug-param-kimliği> or <test-param-kimliği>"rules.0, rules.1… satırları vService'e bağlı aksiyonları gösterir.
lb service show <vService>Yeni aksiyon ilk boş indekse, yani mevcut aksiyon sayısına yazılır. Örnekte vService'te iki aksiyon (rules.0, rules.1) olduğu için --rules.2 kullanılır; dolu bir indekse yazmak oradaki aksiyonun yerine geçer.
lb service update id <vService> --rules.2 debug-engelleDoğrulama
Komut: curl -s -o /dev/null -w '%{http_code}' 'https://www.example.com/?x=1&TEST=2'
403Sık Yapılan Hatalar
- Case insensitive'in parametre adına uygulandığını sanmak. Query parameter koşulunda ad büyük/küçük harfe duyarlıdır ve Is present seçiliyken Case insensitive alanı görünmez; harf varyantları için Yöntem 2 kullanılır.
- Is present yerine Exact match seçmek. Exact match yalnızca girilen değeri yakalar;
?debug=trueile?debug=1farklı kalır. - Block'u koşulsuz bırakmak. Conditions alanı boşsa bütün trafik engellenir.
- WEB-CLI'da
|içeren desen yazmak. WEB-CLI|karakterinde komutu böler; desen parçalanır ve komut hatalı çalışır. --condalanına koşul adını yazmak. WEB-CLI'da--condkoşul kimliği bekler; ad yazılırsa aksiyon var olmayan bir koşula bağlanır.- Aksiyonu vService'e eklememek. Action'ım neden tetiklenmiyor?
Dokümantasyonda nasıl yapılır
