REST trafiğinde endpoint, metod ve path çoğu zaman isteğin ne yaptığını anlatır. GraphQL'de ise bu bilgi büyük ölçüde body içindedir. Aynı `/graphql` endpoint'i üzerinden okuma, yazma, nested sorgu, introspection, fragment ve değişkenli operation taşınabilir. Bu nedenle yalnızca URL veya metod seviyesinde kontrol yapan güvenlik katmanı GraphQL'in gerçek davranışını göremez.
GraphQL introspection üretim ortamında açık kalırsa uygulama şeması dışarı sızabilir. Saldırgan hangi type'ların, field'ların ve ilişkilerin bulunduğunu öğrenerek daha hedefli sorgular hazırlayabilir. Bu doğrudan veri sızıntısı olmayabilir; fakat saldırı yüzeyinin haritasını çıkaran ciddi bir bilgi ifşasıdır.
Bir diğer risk nested query ve fragment yapılarıdır. Aşırı derin iç içe sorgular, tek bir HTTP isteğiyle kurum servisinde yoğun işlem yükü oluşturabilir. Normal oran sınırlama yalnızca istek sayısına bakıyorsa, tek isteğin maliyeti görünmez kalır. GraphQL'de DoS riski çoğu zaman istek adedinden değil, sorgunun yapısından gelir.
Query batching de benzer bir boşluk üretir. Birden fazla query tek body içinde gönderildiğinde, dışarıdan tek HTTP isteği gibi görünür; ancak içeride çoklu operation çalışabilir. Bu durum klasik rate-limit ve endpoint bazlı güvenlik kontrollerinin etkisini azaltır.
TR7 GraphQL Derin Denetim, GraphQL trafiğini pattern tabanlı WAAP kurallarıyla inceler: introspection, nested-depth DoS ve query batching davranışlarını query, raw, json ve form scope'larında tespit ederek üretim politikalarına bağlar.
TR7, GraphQL güvenliğini şema farkındalığı iddiasıyla değil, üretimde sık görülen GraphQL kötüye kullanım pattern'lerini WAAP imza motoruna taşıyarak ele alır.
TR7, `__schema`, `__type`, `IntrospectionQuery` ve `fragment FullType` gibi introspection göstergelerini regex tabanlı kurallarla yakalar. Bu kurallar production ortamında block, staging ortamında monitor veya daha düşük skorla çalıştırılabilir.
Aşırı iç içe GraphQL sorguları tek istekle yüksek işlem yükü oluşturabilir. TR7 50101 kural ailesi, derin `{ ... { ... } }` zincirlerini pattern seviyesinde tespit eder ve yüksek skorla WAAP kararına dahil eder.
Bir body içinde birden fazla query gönderilmesi klasik rate-limit mantığını zayıflatabilir. TR7 50102 kuralı, batch query pattern'lerini tespit ederek bu davranışı log, skor veya block kararına bağlamayı sağlar.
GraphQL sorgusu yalnızca raw body içinde değil, JSON, form veya query alanlarında da taşınabilir. TR7 kuralları query, raw, json ve form scope'larında çalışarak farklı istemci implementasyonlarını aynı WAAP politikası içinde kapsar.
GraphQL Derin Denetim, GraphQL'e özgü riskleri imza tabanlı WAAP kuralları, scope seçimi ve endpoint sıkılaştırma kontrolleriyle yönetir.
50100 kuralı, GraphQL introspection için yaygın kullanılan `__schema`, `__type`, `IntrospectionQuery` ve `fragment FullType` pattern'lerini hedefler. Varsayılan risk seviyesi orta düzey sinyal olarak konumlandırılır ve score 4 ile değerlendirilebilir. Production ortamında introspection kapalı olması gereken endpoint'lerde bu kural block veya monitor modunda kullanılabilir. Böylece şema keşfi denemeleri WAAP olay akışında görünür hale gelir.
50101 kuralı, aşırı iç içe GraphQL sorgularını pattern seviyesinde tespit etmek için kullanılır. Derin `{` zincirleri ve yoğun nested yapı, tek isteğin arka tarafta yüksek işlem maliyeti üretmesine neden olabilir. Bu kural score 6 seviyesinde daha güçlü saldırı sinyali olarak değerlendirilebilir. Amaç, schema-aware complexity hesabı yapmak değil, tehlikeli nested query pattern'lerini erken yakalamaktır.
50102 kuralı, tek body içinde birden fazla query gönderilmesini hedefleyen batch pattern'lerini tespit eder. Query batching bazı istemciler için meşru olabilir; bu nedenle kural state ve score değerleri uygulama davranışına göre ayarlanmalıdır. Monitor modunda başlayıp gerçek trafik gözlemiyle netleştirmek doğru yaklaşımdır. Kötüye kullanım netleştiğinde kural bloklama politikasına alınabilir.
TR7 enriched kurallarının yanında waf_db içinde 50100, 50101 ve 21360+ ailesi gibi GraphQL varyantları bulunur. Bu varyantlar `__schema {`, `__type`, `__typename` ve nested mutation pattern'leri gibi farklı yazım biçimlerini kapsar. Böylece tek regex'e bağlı kalmadan introspection ve nested sorgu davranışları için daha geniş imza yüzeyi oluşturulur. Operatör bu kuralların state ve score değerlerini servis özelinde override edebilir.
GraphQL sorguları her zaman aynı formatta gelmez. Bazı istemciler JSON body içinde `query`, `variables` ve `operationName` alanlarını kullanır; bazıları raw body veya form alanları üzerinden gönderim yapabilir. TR7 kuralları query, raw, json ve form scope'larında çalışarak bu farklı taşıma biçimlerini denetim kapsamına alır. Bu, GraphQL endpoint'lerinde sadece tek body formatına güvenme hatasını azaltır.
GraphQL kontrolleri hem API endpoint hem web application hedefleri için uygulanabilir. Aynı WAAP kural modeli, servis tipine göre farklı state, score veya scope değerleriyle yönetilebilir. Örneğin internal test endpoint'inde introspection monitor kalırken, public production endpoint'inde block yapılabilir. Bu esneklik, tek kural setinin farklı ortam politikalarına uyarlanmasını sağlar.
`/graphql` endpoint'i için yalnızca POST metoduna izin verme, beklenen JSON key'leri `query`, `variables` ve `operationName` ile sınırlama veya body size limiti uygulama gibi kontroller tanımlanabilir. Bu kontroller GraphQL imzalarının yerine geçmez; onları tamamlayan pozitif güvenlik katmanıdır. Beklenmeyen metod veya beklenmeyen JSON alanları erken aşamada reddedilebilir. Böylece endpoint davranışı daha öngörülebilir hale gelir.
GraphQL trafiğinde uygulamaya özel mutation, field adı veya riskli operation pattern'i varsa custom WAAP rule olarak eklenebilir. Örneğin body içinde belirli bir `mutation` kelimesi veya hassas operation adı görüldüğünde daha yüksek skor verilebilir. Bu özel kurallar ana WAAP skor sistemine katılır ve log/SIEM akışında görünür. Schema-aware alan denetimi yapılmasa bile uygulama-spesifik riskler pattern tabanlı yakalanabilir.
GraphQL Derin Denetim, mevcut gerçek yetenekleriyle imza tabanlıdır; operation parsing, complexity hesabı ve schema-aware field WAAP iddiası bu sayfanın kapsamına alınmaz.
GraphQL kontrolleri regex ve scope tabanlı pattern detection yaklaşımıyla çalışır. Operation type ayrımı, gerçek depth counter veya query complexity score hesaplama bu modelin parçası değildir. Bu ayrım doğru konumlandırma için özellikle önemlidir.
50100, 50101, 50102 ve waf_db varyantları servis ihtiyacına göre enabled, monitor veya disabled durumuna alınabilir. Score değerleri de uygulamanın false-positive toleransına göre ayarlanabilir. Production GraphQL endpoint'lerinde monitor ile başlayıp gerçek trafik gözleminden sonra bloklama doğru devreye alma modelidir.
GraphQL endpoint'lerinde method whitelist, JSON key allow-list ve body size limiti uygulanabilir. Bu kontroller imza tespitinin yanında request şeklinin beklenen sözleşmeye uymasını sağlar. Özellikle public API'lerde `/graphql` endpoint'inin yalnızca beklenen formatı kabul etmesi saldırı yüzeyini daraltır.
Per-operation rate-limit GraphQL parser seviyesinde uygulanmaz. Tek body içindeki operation sayısını semantik olarak ayrıştırıp her operation'a ayrı limit verme iddiası yoktur. Query batching pattern'i imza olarak yakalanabilir ve genel rate-limit politikalarıyla birlikte kullanılabilir.
Persisted queries için özel destek bu özellik kapsamında bulunmaz. İstek içinde görünen GraphQL pattern'leri WAAP imzalarıyla incelenir. Query'nin hash üzerinden çözümlenip şema veya kayıtlı operation bilgisiyle doğrulanması bu sayfada iddia edilmez.
Belirli bir GraphQL schema alanına, örneğin `User.email` gibi field seviyesine özel native denetim yapılmaz. Kurallar body üzerinde pattern eşleştirme yaklaşımıyla çalışır. Field bazlı özel ihtiyaçlar varsa custom regex kuralı ile sınırlı ve dikkatli şekilde ele alınmalıdır.
Güvenlik ekibi staging ortamında introspection'a izin verirken production endpoint'inde 50100 kuralını block modunda çalıştırabilir. Şema keşfi denemeleri loglanır, skorlanır ve politika gereği engellenir.
Aşırı iç içe fragment veya query yapıları kurum servisinde yüksek işlem maliyeti oluşturabilir. 50101 kuralı bu pattern'leri score 6 seviyesinde yakalayarak WAAP bloklama kararına güçlü sinyal verir.
Mobil istemci endpoint'ine tek request içinde çok sayıda query gönderilmeye çalışıldığında 50102 kuralı batch pattern'ini tespit eder. Operasyon ekibi önce monitor modunda davranışı izleyebilir, kötüye kullanım netse enabled moda alabilir.
API ekibi `/graphql` endpoint'inde yalnızca POST metoduna ve `query`, `variables`, `operationName` JSON alanlarına izin verebilir. Beklenmeyen metodlar veya alanlar uygulamaya ulaşmadan reddedilerek endpoint davranışı daraltılır.
Introspection, nested DoS ve query batching risklerini üretim ortamında görünür ve yönetilebilir hale getirin. Kendi servislerinizle canlı bir kurulumda gezdirelim.