GraphQL API Koruması
¶
Wallarm, temel WAAP abonelik planında bile GraphQL içindeki düzenli saldırıları (SQLi, RCE, vb.) varsayılan olarak tespit eder. Ancak, protokolün bazı yönleri, aşırı bilgi ifşası ve DoS ile ilgili GraphQL’e özgü saldırıların uygulanmasına izin verir. Bu belge, GraphQL policy (GraphQL istekleri için bir dizi limit) belirleyerek API’lerinizi bu saldırılardan korumak için Wallarm’ın nasıl kullanılacağını açıklar.
Genişletilmiş koruma kapsamında, GraphQL API Koruması gelişmiş API Security abonelik planının bir parçasıdır. Plan satın alındığında, korumayı GraphQL API protection mitigation control içinde kuruluşunuzun GraphQL policy’sini belirleyerek başlatın.
Desteklenen GraphQL biçimleri¶
GraphQL sorguları tipik olarak bir GraphQL sunucu uç noktasına HTTP POST istekleri olarak gönderilir. İstek, gövdenin sunucuya hangi medya türünde gönderildiğini belirtmek için bir CONTENT-TYPE
başlığı içerir. CONTENT-TYPE
için Wallarm şunları destekler:
-
yaygın seçenekler:
application/json
veapplication/graphql
-
ayrıca karşılaşılabilecek seçenekler:
text/plain
vemultipart/form-data
GraphQL sorguları HTTP GET istekleri olarak da gönderilebilir. Bu durumda sorgu, URL’de bir sorgu parametresi olarak eklenir. GET istekleri GraphQL sorguları için kullanılabilse de özellikle daha karmaşık sorgular için POST isteklerinden daha az yaygındır. Bunun nedeni, GET isteklerinin tipik olarak idempotent (yani tekrarlansa da farklı sonuçlar üretmeyen) işlemler için kullanılması ve daha uzun sorgular için sorun yaratabilecek uzunluk sınırlamalarına sahip olmasıdır.
Wallarm, GraphQL istekleri için hem POST hem de GET HTTP yöntemlerini destekler.
Yapılandırma yöntemi¶
Abonelik planınıza bağlı olarak, GraphQL API koruması için aşağıdaki yapılandırma yöntemlerinden biri kullanılabilir:
-
Mitigation controls (Advanced API Security aboneliği)
-
Rules (Cloud Native WAAP aboneliği)
Mitigation control tabanlı koruma
¶
NGINX Node 6.2.0 veya üstünü gerektirir ve şu anda Native Node tarafından desteklenmemektedir.
Varsayılan koruma¶
Wallarm, varsayılan GraphQL API protection mitigation controls sağlar. Bunlar, GraphQL API anormalliklerini tespit etmek için genel bir yapılandırma içerir ve tüm trafik için Monitoring
mode içinde etkinleştirilmiştir.
Varsayılan GraphQL kontrolünü incelemek için Wallarm Console → Security Controls → Mitigation Controls bölümünde, GraphQL API protection kısmındaki Default
etiketli kontrolleri kontrol edin.
Varsayılan kontrolleri çoğaltabilir, düzenleyebilir veya devre dışı bırakabilirsiniz. Düzenleme, uygulamanın özel ihtiyaçlarına, trafik kalıplarına veya iş bağlamına göre varsayılan bir kontrolü özelleştirmenize olanak tanır. Örneğin, Scope alanını daraltarak kontrolü GraphQL’e özgü uç noktalara sınırlayabilir veya eşik değerlerini ayarlayabilirsiniz.
Subject to change
The list of default mitigation controls is subject to change:
- New controls may be introduced over time.
- If a mitigation control is disabled, Wallarm may still update its parameters to improve quality and performance.
Mitigation control oluşturma ve uygulama¶
GraphQL mitigation control’ün GraphQL’e özgü uç noktalar için oluşturulması önerilir. Tüm sistem için all traffic mitigation control olarak oluşturulması önerilmez.
Mitigation controls hakkında genel bilgiler
Devam etmeden önce: herhangi bir mitigation control için Scope ve Mitigation mode ayarlarının nasıl yapıldığını öğrenmek için Mitigation Controls makalesini kullanın.
GraphQL policy’yi ayarlamak ve uygulamak için:
-
Wallarm Console → Mitigation Controls bölümüne gidin.
-
Add control → GraphQL API protection öğesini kullanın.
-
Mitigation control’ün uygulanacağı Scope alanını tanımlayın.
-
Trafik metriklerinize uygun olarak GraphQL istekleri için eşik değerlerini belirleyin (boş/belirsiz bırakılırsa, bu kritere göre herhangi bir sınırlama uygulanmaz):
- Maximum total query size in kilobytes - tüm bir GraphQL sorgusunun boyutu için üst sınırı belirler. Bu, aşırı büyük sorgular göndererek sunucu kaynaklarını sömüren Hizmet Reddi (DoS) saldırılarını önlemek için kritik öneme sahiptir.
- Maximum value size in kilobytes - bir GraphQL sorgusu içindeki herhangi bir tekil değerin (değişken veya sorgu parametresi) maksimum boyutunu belirler. Bu limit, saldırganların değişkenler veya argümanlar için aşırı uzun string değerleri gönderdiği Excessive Value Length türü saldırılarla sunucuyu bunaltma girişimlerini azaltmaya yardımcı olur.
- Maximum query depth - bir GraphQL sorgusu için izin verilen maksimum derinliği belirler. Sorgu derinliğini sınırlayarak, kötü amaçlı hazırlanmış, derin iç içe sorgulardan kaynaklanan performans sorunları veya kaynak tükenmesi önlenebilir.
- Maximum number of aliases - tek bir GraphQL sorgusunda kullanılabilecek alias sayısına sınır koyar. Alias sayısını kısıtlamak, alias işlevselliğini kötüye kullanarak aşırı karmaşık sorgular oluşturan Kaynak Tüketimi ve DoS saldırılarını engeller.
- Maximum batched queries - tek bir istekte gönderilebilecek toplu sorguların sayısına üst sınır koyar. Bu parametre, birden fazla işlemi tek bir istekte birleştirerek hız sınırlama gibi güvenlik önlemlerini atlatmayı amaçlayan toplu sorgu (batching) saldırılarını engellemek için gereklidir.
- Block/register introspection queries - etkinleştirildiğinde, GraphQL şemanızın yapısını ortaya çıkarabilecek introspection istekleri potansiyel saldırılar olarak değerlendirilecektir. Introspection sorgularını devre dışı bırakmak veya izlemek, şemanın saldırganlara ifşa olmasını önlemek için kritik bir önlemdir.
- Block/register debug requests - bu seçenek etkinleştirildiğinde, debug modu parametresi içeren istekler potansiyel saldırılar olarak kabul edilir. Bu ayar, üretimde yanlışlıkla açık bırakılan debug modunu yakalamak ve arka uç hakkında hassas bilgileri ortaya çıkarabilecek aşırı hata mesajlarına saldırganların erişmesini engellemek için yararlıdır.
Varsayılan olarak, bir policy maksimum POST istek sorgu boyutunu 100 KB, değer boyutunu 10 KB, sorgu derinliği ve toplu sorgu limitlerini 10, alias sayısını 5 olarak belirler; ayrıca introspection ve debug sorgularını reddeder. Ekran görüntüsünde gösterildiği gibi (not: yaygın meşru GraphQL sorgularınızın istatistiklerini dikkate alarak varsayılan değerleri kendi değerlerinizle değiştirebilirsiniz):
-
Mitigation mode bölümünde yapılacak işlemi ayarlayın.
-
Add’e tıklayın.
Mitigation control örnekleri¶
GraphQL uç noktalarınız için saldırıları engelleyecek policy ayarlanması¶
Diyelim ki example.com/graphql
altında bulunan uygulama GraphQL uç noktalarına gelen istekler için limitler belirleyerek onlara yönelik tüm potansiyel GraphQL’e özgü saldırıları engellemek istiyorsunuz. example.com
için filtration mode monitoring
.
Bunu yapmak için:
-
GraphQL API protection mitigation control’ü ekran görüntüsünde gösterildiği gibi ayarlayın (not: bunlar örnek değerlerdir - gerçek hayattaki kurallar için yaygın meşru GraphQL sorgularınızın istatistiklerini dikkate alarak kendi değerlerinizi tanımlamalısınız):
-
example.com
için filtration modemonitoring
durumunda ve GraphQL uç noktaları içinblock
istiyorsanız, Override filtration mode rule’ünü ekran görüntüsünde gösterildiği gibi yapılandırın:
Belirli uç noktalar için policy'nin değiştirilmesi¶
Önceki örneğe devam ederek, example.com/graphql/v2
alt uç noktası için daha sıkı limitler belirlemek istediğinizi varsayalım. Limitler daha sıkı olduğundan, herhangi bir şeyi engellemeden önce monitoring
modunda test edilmelidir.
Bunu yapmak için:
-
GraphQL API protection mitigation control’ü ekran görüntüsünde gösterildiği gibi ayarlayın (not: bunlar örnek değerlerdir - gerçek hayattaki kurallar için yaygın meşru GraphQL sorgularınızın istatistiklerini dikkate alarak kendi değerlerinizi tanımlamalısınız):
-
example.com/graphql
için filtration modeblock
veexample.com/graphql/v2
içinmonitoring
istiyorsanız, Override filtration mode rule’ünü ekran görüntüsünde gösterildiği gibi yapılandırın:
Rule tabanlı koruma¶
Wallarm Console → Security Controls → Rules içinde işlem yaptığınız dışında, GraphQL API protection mitigation control için açıklanan ayarların aynısını kullanın.