API Güvenlik Testi: Kapsam Matrisi, BOLA ve Gerçek Sayılar
API güvenliği

API Güvenlik Testi: Kapsam Matrisi, BOLA ve Gerçek Sayılar

API güvenlik testi, envanter ve kapsam sayısı olmadan yapılan bir taramadır. Dört envanter, yetkilendirme matrisi aritmetiği, 403-404 sızıntısı, token doğrulamaları, tek kullanımlık kod aritmetiği, GraphQL toplu işleme, yarış koşulları ve yasal sınır.

Siber Güvenlik Ekibi
16 dk okuma
Konular
API sızma testi
OWASP API Top 10
BOLA
yetkilendirme testi
GraphQL güvenliği

API güvenlik testi, daha uzun bir kelime listesiyle çalıştırılan bir tarama değildir. Kimin, hangi nesne üzerinde, hangi işlemi yapabileceğine dair iddiaların, sayılabilir bir envanter üzerinde tek tek sınanmasıdır. API ihlallerine yol açan hatalar nadiren egzotiktir: nesne kimliğini alıp sahipliğini kontrol etmeden o nesneyi döndüren bir uç nokta, imzası veya hedef kitlesi hiç doğrulanmamış bir token, tüm kiracıların satırlarını döndüren bir liste uç noktası, hesap başına sınırı olmayan altı haneli bir tek kullanımlık kod ve işlem sınırı olmayan bir durum değişikliği. Bunların hepsi iki hesapla ve bir betikle test edilebilir. Çoğu projede eksik olan şey araç değil, aritmetiktir: kaç doğrulama çalıştırıldı, kaç uç noktaya karşı, kaç rolle ve test başlamadan önce envanterde gerçekte ne vardı.

Test, arkasındaki envanter kadar iyidir

Hiç kimsede olmayan sayıyla başlayın. Akamai'nin 2026 API Güvenlik Etki Araştırması, on ülkeden 1.840 güvenlik yöneticisi ve uygulayıcısıyla yapıldı ve katılımcıların yüzde 87'sinin son on iki ayda en az bir API kaynaklı güvenlik olayı yaşadığını ortaya koydu; bu oran 2022'de yüzde 76'ydı. Aynı araştırma, katılımcıların yüzde 77'sinin eksiksiz bir API envanterine sahip olduğunu iddia ettiğini, ancak bunların yalnızca yüzde 23'ünün hangi API'lerin hassas veri döndürdüğünü bildiğini gösteriyor - ve bu oran dört yıldır yükselmek yerine düşüyor. Keşif çalışmaları da aynı yönü işaret ediyor: Cloudflare'in makine öğrenmesi tabanlı uç nokta keşfi, kurumların kendi katalogladığından yaklaşık yüzde 31 daha fazla API uç noktası buldu.

Bu fark, her API testinin ilk bulgusudur ve tek bir istek gönderilmeden önce ölçülebilir. Yalnızca OpenAPI belgesinde yazanları test ederseniz, birinin belgelemeyi hatırladığı yüzeyi test edersiniz; bu da normalde en dikkatli geliştirilen kısımdır.

Uzaktan İzleme Teklifleri

Uzaktan İzleme Teklifleri

Sphnix ile başlayın ve mSpy ile Eyezy'yi karşılaştırın.

Dört envanter, dört farklı gerçek

  • Spesifikasyon. OpenAPI, gRPC protobuf veya GraphQL şeması. Belgelenmiş uç noktaları ve bildirilen güvenlik şemalarını bulur; belge güncellenmeden yayına çıkan her şeyi kaçırır.
  • Gözlenen trafik. Ağ geçidi veya kenar kayıtlarındaki otuz günlük trafik, yöntem ve rota şablonuna göre gruplanır. Gerçek istemcilerin çağırdığı gölge uç noktaları, hiç emekliye ayrılmamış mobil sürümleri bulur.
  • İstemci dosyaları. Mobil uygulama paketlerindeki ve web JavaScript'indeki dizeler. Yalnızca uygulamanın çağırdığı uç noktaları bulur: iç yönetim yolları, eski sürümler, açık kalmış hata ayıklama rotaları.
  • Alan adları ve dağıtımlar. Sertifika şeffaflık kayıtları, DNS kayıtları ve CI sisteminin oluşturduğu her önizleme veya hazırlık ortamı. Üretim verisi taşıyan ve hız sınırı olmayan ortamı bulur.

Neredeyse her zaman eksik olan satırlar

  • Eski mobil istemciler için hâlâ açık duran önceki ana sürüm: eski kimlik doğrulama modeli ve hız sınırı yok.
  • Liste ve dışa aktarma uç noktaları: çok sayıda nesneyi döndüren liste çağrısı ve hepsini döndüren CSV veya toplu dışa aktarma.
  • Genel API ile aynı girişten erişilebilen, token yerine paylaşılan bir başlıkla doğrulanan servisler arası rotalar.
  • Üçüncü taraflardan veri alan iş ortağı ve webhook alıcı uç noktaları; sistemde en az gözden geçirilen kod burasıdır.
  • Geçen haftanın dalının hâlâ çözümlenen ve üretim veritabanının bir kopyasına bakan önizleme dağıtımı.

Dört listeyi tek bir tabloda birleştirin; her satır bir uç nokta ve yöntem olsun: rota, kimlik doğrulama şeması, nesne kimliğinin yol, sorgu veya gövdede geçip geçmediği, döndürdüğü verinin sınıfı, herkese açık olup olmadığı ve sahibi olan ekip. Test bu tabloya göre ölçülür. Aynı zamanda müşterinin sonradan soracağı sorunun tek dürüst cevabı da budur: API'm test edildi mi, yoksa bir örneği mi test edildi?

Asıl bulgu yetkilendirmede, ve hiçbir tarayıcı onu bulamaz

Nesne düzeyinde bozuk yetkilendirme (BOLA), OWASP API Güvenlik İlk 10 listesi oluşturulduğundan beri ilk sırada ve bunun yapısal bir nedeni var: API sizin kim olduğunuzu doğrular, ardından bu nesnenin size ait olup olmadığını kontrol etmeyi atlar. Bir tarayıcının bunu bulması imkânsızdır; çünkü bulmak için iki geçerli kimlik ve her biri için geçerli bir nesne kimliği gerekir. Tarayıcı 401 veya 403 görür ve yoluna devam eder; savunmasız uç nokta ise yalnızca gerçek bir kullanıcı, kendisine ait olmayan gerçek bir nesneyi istediğinde 200 döner.

Testin kendisi eski ve sıkıcıdır, ve işe yarar. Aynı rolde iki hesap oluşturun. A hesabıyla bir nesne oluşturun ve yanıttan kimliğini alın. B hesabıyla o kimliği isteyin. Doğru kurulmuş bir API 403, varlığı açıklamak istemiyorsa 404 döner. Savunmasız olan 200 ve A'nın verisini döndürür. Bu bölümün geri kalanı, aynı testin insanların tekrarlamayı unuttuğu yerlerde tekrarlanmasıdır.

Aynı hatanın beş varyantı

  • Okuma. B, A'nın nesnesini yol, sorgu dizesi, gövde ve başlık üzerinden ister - dört konumun hepsi, çünkü işleyiciler hangi alanı yetkilendirdikleri konusunda tutarlı değildir.
  • Yazma. B, A'nın nesnesine PATCH veya PUT gönderir. Okumada sahipliği kontrol edip güncellemede unutan işleyici, tahmin etmeye gerek bırakmayacak kadar yaygındır.
  • Silme. Yalnızca test için oluşturulmuş nesnelere karşı. Dikkatsiz çalıştırıldığında testi olaya dönüştüren varyant budur.
  • İç içe. B, A'nın alt nesnesini, üst nesne üzerinden sahiplik ima eden bir yolla ister: siparişin altındaki fatura, faturanın altındaki ek, gönderinin altındaki yorum. Her adım, üstü kontrol edip yaprağı unutma fırsatıdır.
  • Koleksiyon. B, liste uç noktasını A'nın kimliğiyle filtre parametresi olarak çağırır veya çok kiracılı bir sistemde hiç filtre olmadan çağırır. Tek nesne işleyicisi genellikle doğrudur; liste işleyicisi çoğu zaman değildir ve ölçekte sızdırır.

Çok kiracılı bir üründe kiracı kimliği doğrulanmış tokendan gelmeli, istekten asla okunmamalıdır. Yalnızca tek kiracı içinde nesne kimliği değiştiren bir test, kiracılar arası okuma açıkken geçer; bu yüzden iki hesap farklı kullanıcı olduğu kadar farklı kiracıda da olmalıdır. İlgili tuzak kimlik biçimidir: rastgele UUID'ler numaralandırmayı yavaşlatır ama kontrolün yerini almaz, çünkü başka bir uç nokta, dışa aktarma, e-posta veya günlük tarafından açığa çıkarılan bir kimlik de aynı şekilde tekrar oynatılabilir.

Düzeltmenin nasıl göründüğü rapor için önemlidir. Her işleyicinin geçmek zorunda olduğu tek bir paylaşılan katmana konan yetkilendirme kontrolü bir hata sınıfını kapatır. Başarısız olan işleyiciye eklenen kontrol bir uç noktayı kapatır ve bir sonraki sürümün aynı deseni yeniden keşfetmesini bekler. Hangisini önerdiğinizi yazın; bulgunun gelecek yılki testte tekrar etmesinin nedeni bu farktır.

Kapsam matrisi: "her uç noktayı test et" cümlesini bir sayıya çevirmek

Her kontrol listesi aynı şeyi söyler ve orada durur: her nesne kapsamlı uç noktayı iki hesapla test et. Kimse bu cümleyi işe çevirmez; bu yüzden aynı API üzerinde iki çalışma, gerçekte yapılan iş bakımından on kat farklı olabilir. Bunun yerine aritmetiği yapın.

Nesne referansı alan uç noktaları sayın; yol, sorgu, gövde veya başlık fark etmez. Buna E diyelim. Test edebileceğiniz kimlikleri sayın: iki farklı kiracıda iki sıradan kullanıcı, ikinci role sahip bir kullanıcı, bir yönetici ve kimlik doğrulamamış çağıran. Buna R diyelim. Yetkilendirme yüzeyi E çarpı R'dir ve her hücre iki istektir: çağıranın kendi nesnesi başarılı olmalı, yabancı nesnenin kimliği başarısız olmalıdır. Nesne kimliği alan 70 uç noktası olan 120 uç noktalı bir API, dört kimlikle test edildiğinde 280 doğrulama ve 560 istek demektir.

Örnek: 120 uç nokta, 4 kimlik

  • 120 uç noktanın 70'i nesne kimliği alıyor: E = 70.
  • Kimlikler: A kullanıcısı, başka kiracıdaki B kullanıcısı, bir yönetici ve kimlik doğrulamamış çağıran: R = 4.
  • Doğrulama = 70 x 4 = 280. İstek = doğrulama başına 2 = 560.
  • Kimlik başına saniyede iki istek hızında betik çalışma süresi beş dakikanın altında. İnsan emeği istekleri göndermekte değil, rol başına test verisini kurmakta.
  • Rapor "yönetim uç noktaları elle incelendi" diyorsa o satır matrisin dışındadır ve kapsam sayısı bunu söylemek zorundadır.

Bu sayı üç işi görür. İşi ve dolayısıyla fiyatı boyutlandırır, müşteriye başka bir tedarikçinin teklifiyle karşılaştırabileceği bir payda verir ve yeniden teste bir taban çizgisi sağlar: aynı betik tekrar çalıştığında geçen veya kalan 280 satır üretir. Payda söyleyemeyen bir tedarikçiden betiği isteyin; kapsam odur.

Örnekleme meşrudur, ama rastgele değil bilinçli olmalıdır. Boyuttan bağımsız olarak her örnekte bulunmayı hak eden üç sınıf vardır: en yeni uç noktalar (en az gözden geçirilmiş), en eski uç noktalar (en az bakım görmüş) ve yönetim ile iş ortağına bakan uç noktalar (en az kullanıcı ve dolayısıyla en az hata bildirimi). Olgun bir API üzerinde rastgele örnek, çoğunlukla başkasının zaten bulduğu hataları yeniden test eder.

403 mü 404 mü kararı, koruduğundan fazlasını sızdırır

Yabancı bir nesne için 403 ile 404 arasındaki seçim çoğu rehberde zevk meselesi gibi ele alınır. Ölçülebilir sonucu olan bir ürün kararıdır ve testi ucuzdur: A'ya ait var olan bir nesnenin kimliğini ve hiç var olmayan bir kimliği alın, ikisini de B olarak isteyin. Durum kodunu, yanıt gövdesini, hata metnini, başlıkları ve gecikmeyi karşılaştırın.

Var olan nesne 403, olmayan nesne 404 döndürüyorsa API az önce yetkisiz bir çağırana varlığı doğrulamıştır. Sıralı kimliklerde bu, başarısız bir yetkilendirme kontrolünü bir numaralandırma kaynağına çevirir: saldırgan nesne uzayının boyutunu, büyüme hızını ve hangi kimliklerin canlı olduğunu öğrenir, tek biri için yetkili olmadan. Gerekçe "kendi nesnesini başka hesaptan yer imlerine eklemiş meşru kullanıcı için 403 daha iyi deneyim" ise çözüm kararı rota bazında verip belgelemektir, işleyici bazında ve tutarsız değil.

Testin doğruladığı şeyler

  • Yabancı ve var olmayan kimlik için aynı durum kodu.
  • Aynı yanıt gövdesi biçimi ve uzunluğu; kimlik yanıtta geri yansıtılmıyor.
  • Gerçek sahibi, nesne türünü veya başarısız alanı adlandıran hata metni farkı yok.
  • Birkaç milisaniyeyi aşmayan gecikme farkı; yetkilendirmeden önce yapılan veritabanı sorgusu ölçülebilir bir boşluk olarak görünür.
  • Aynı davranış yalnızca okumada değil, güncelleme ve silmede de geçerli.

Neden ayrı bir bulgu hak ediyor

  • Her yerde 403 döndüren yetkilendirme düzeltmelerinden sonra da yaşamaya devam eder; yani ancak adlandırıldığında kapatılabilir.
  • Sadece okuma maruziyetini haritalama yeteneğine çevirir; haritalama bir saldırı zincirinin ilk aşamasıdır.
  • Karar verildiğinde çerçevenin hata işleyicisinde tek satırdır; bu da onu kapatılması alışılmadık derecede ucuz bir bulgu yapar.

Yük göndermeden yapılabilecek token testleri

Kimlik doğrulama katmanı API olaylarının ikinci büyük payını üretir ve hataları sömürü aracıyla değil bir metin düzenleyiciyle ve tekrar oynatma ile test edilebilir. Wallarm'ın 2026'da açıklanmış API ihlalleri analizi bunların yüzde 52'sini bozuk kimlik doğrulamaya, yüzde 27'sini üçüncü taraf API'lerin güvensiz kullanımına bağladı ve katalogladığı API güvenlik açıklarının çoğunluğuna hiç kimlik doğrulamadan erişilebildiğini not etti. Bu oranları doğa yasası değil, hataların nerede kümelendiğinin tarifi olarak okuyun; işe yarayan kısım aşağıdaki listedir.

Token yolunda dokuz doğrulama

  1. Algoritma sabitlenmiş. Algoritması none olarak ayarlanmış ya da servisin kendi açık anahtarını sır olarak kullanan HMAC ile yeniden imzalanmış token reddedilmeli. İkisi de eski saldırılar ve elle yazılmış doğrulayıcılarda hâlâ tutuyor.
  2. İmza gerçekten kontrol ediliyor. İmzadaki tek karakteri değiştirin ve 401 bekleyin. Talepleri ayrıştırıp imza kontrolünü atlayan doğrulayıcı, literatürün ima ettiğinden daha yaygın.
  3. Anahtar kaynağı sabit. Anahtar tanımlayıcı, JWKS adresi ve sertifika adresi alanları, servisin çağıranın kontrol ettiği bir konumdan anahtar çekmesine yol açmamalı.
  4. Süre sunucuda uygulanıyor. Süresi geçmiş token başarısız olmalı ve saat kayması toleransı raporda yazılabilecek kadar küçük olmalı. Yirmi dört saatlik bir tolerans bir bulgudur.
  5. Hedef kitle ve düzenleyici doğrulanıyor. Bir servis için üretilmiş token başka bir servis tarafından kabul edilmemeli. Sistemdeki en zayıf servisi diğerlerine anahtar yapan hata budur.
  6. Token türü uygulanıyor. Kimlik tokeni veya yenileme tokeni erişim tokeni olarak tekrar oynatıldığında başarısız olmalı.
  7. İptal penceresi ölçülüyor. Hesabı kapatın, sonra erişim tokenini tekrar oynatın. Birçok sistem tokenin ömrü boyunca iptal edemez; bu bir tasarım tercihidir ve rapor bunu geçti veya kaldı diye değil dakika cinsinden yazmalıdır.
  8. Yenileme rotasyonu. Tüketilmiş bir yenileme tokeninin tekrar kullanımı tüm aileyi geçersiz kılmalı; aksi halde çalınmış token kurbanın parola değişikliğinden sağ çıkar.
  9. Taşıma. Sorgu dizesindeki tokenlar erişim kayıtlarına, referrer başlıklarına, tarayıcı geçmişine ve vekil önbelleklerine düşer. Düşmediğini varsaymadan önce kayıtlara bakın.

API anahtarları en çok verilen ve en az yönetilen kimlik bilgisi olduğu için kendi dört sorusunu hak eder: anahtar hangi kapsamı taşıyor, ne zaman sona eriyor, kim döndürebiliyor ve istemcide nerede saklanıyor? Mobil uygulamaya gömülü bir anahtar, belge ne derse desin genel bir anahtardır. Süresi olmayan ve anahtar başına hız sınırı bulunmayan bir anahtar kalıcı ve ölçülmeyen bir kimlik bilgisidir; rapor da bunu böyle anlatmalıdır.

Kütle atama: hiç kabul etmek istemediğiniz alan

Nesne düzeyinde bozuk yetkilendirmeyi üreten aynı eksik kontrol, kütle atamaya da yol açar: işleyici istek gövdesini modelin üzerine bağlar, böylece istemcinin gönderdiği her alan veritabanına yazılan bir alan olur. Test tek istektir. Kendi nesnenizi güncelleyen bir uç nokta alın, her seferinde bir ayrıcalıklı alan ekleyin ve yanıtı izleyin.

Her yazma uç noktası için üç istek sınıfı

  • Bilinmeyen alan. Şemada olmayan bir alan. 200, işleyicinin bilinmeyen anahtarları yok saydığını gösterir ve iyidir; 500, bağlama katmanının korumasız olduğunu gösterir.
  • Bilinen ama size ait olmayan alan. Var olan ve rolünüzün ayarlamaması gereken bir alan: rol, kiracı kimliği, doğrulama bayrağı, kredi bakiyesi, fiyat, onay durumu, zaman damgaları. Değer uygulanmış bir 200 bulgudur ve yığın izinden daha değerlidir.
  • Okuma tarafında fazla veri. Aynı hatanın ters yönü. Yanıttaki anahtarları istemcinin gerçekte kullandıklarıyla karşılaştırın; parola özeti, iç not, yumuşak silme bayrağı veya başka kiracının adını döndüren bir kullanıcı nesnesi, arayüz hiç göstermese de bir veri sızıntısıdır.

Kalıcı çözüm, uç nokta başına iki izin listesidir - role göre yazılabilir alanlar ve role göre okunabilir alanlar - ve bunlar modelden üretilmek yerine rota tanımının yanında tutulmalıdır. Çerçeve düzeyindeki "doldurulabilir" haritaları birinin sütun eklemesiyle kayar ve bu kayma, bir test onu sayana kadar görünmez.

İş mantığı: yükü değil aritmetiği test edin

Kontrol listesi odaklı test, numaralandırma biçimindedir: değiştirilecek kimlik ve bulanıklaştırılacak parametre arar. Para kaybettiren hatalar aritmetik biçimindedir ve test edenin neyin doğru kalması gerektiğini bilmesini gerektirir. Önce değişmezleri yazın; sonra her biri bir testtir.

Altı değişmez ticaret ve iş akışı API'lerinin çoğunu kapsar. Para korunur: satır toplamı genel toplama eşittir ve iadeler ödemeleri aşmaz. Miktarlar negatif değildir ve ürünün gerektirdiği yerde tam sayıdır. Bir indirim bir kez kullanılır, kurallar izin vermiyorsa üst üste binmez ve promosyonun hariç tuttuğu kategoriye uygulanmaz. Durum makinesi yalnızca ileri ve yalnızca izin verilen kenarlardan gider: ödeme öncesi hiçbir şey sevk edilmez, bir sipariş iki kez iade edilmez, iptal edilmiş bir sipariş eski bir isteğin tekrar oynatılmasıyla yeniden açılmaz. Kotalar ve lisans sayıları sunucuda uygulanır, düğmeyi gizleyen istemcide değil. Zaman pencereleri işlem anında uygulanır: dün sona ermiş bir deneme, deneme sırasında alınmış bir token tutularak bugün kullanılamaz.

İki örnek bu sınıfın neden hiçbir tarayıcı raporunda görünmediğini gösterir. Negatif tutarı kabul eden bir iade uç noktası, iadeyi bir tahsilata veya tersini çevirir; hangisi olduğu doğrulamanın işaretin hangi tarafına yazıldığına bağlıdır. Siparişi geçersiz kılarken stoğu yine de düşen bir sıfır miktarı, defterle depo arasında kalıcı bir uyumsuzluk yaratır - hata yok, uyarı yok, sadece üç hafta sonra tutmayı bırakan bir sayı. İkisi de enjeksiyon gibi görünmez; ikisi de işin beklediği aritmetiği bilen bir testçi tarafından bulunur.

Tekrarlanabilirlik de buraya aittir. Aynı ödeme veya kullanım isteğini aynı idempotency anahtarıyla iki kez gönderin ve tek etki bekleyin; anahtarsız iki kez gönderdiğinizde API kopyayı çalıştırmak yerine reddetmelidir. Zaman aşımında yeniden deneyen bir istemci normal davranıştır ve idempotency olmayan bir API bu normal davranışı çift tahsilata çevirir.

Hız sınırları, anahtar uzayı aritmetiği ve sınırı olması gereken uç noktalar

"Hız sınırı uygulayın" cümlesi çoğu API rehberindeki en az uygulanabilir cümledir. Sınırlar iki farklı şeyi bağlar - tahmin edilebilir sırlar ve pahalı iş - ve bunlara ihtiyaç duyan uç noktalar aynı değildir. Birinci sınıf için soyut saniye başına istek tartışması yapmak yerine aritmetiği hesaplayın.

Bir anahtar uzayı saldırgana ne verir

  • Altı haneli tek kullanımlık kod 1.000.000 olasılıktır. Kilitlenme olmadan saniyede 10 denemede beklenen tükenme yaklaşık 27,8 saat; saniyede 1.000 denemede yaklaşık 17 dakika sürer.
  • Dört haneli PIN 10.000 olasılıktır: saniyede 10 denemede yaklaşık 17 dakika, daha yüksek hızda saniyeler.
  • Küçük bir alfabeden altı karakterle üretilen parola sıfırlama tokeni tek kullanımlık kodla aynı sınıftadır ve genellikle verilen 15 dakikalık geçerlilik, yalnızca deneme sınırı varsa işe yarar.
  • Sonuç yapısaldır: kimlik bilgisi uç noktalarında sınır hesap başına olmalı ve başarısız denemeleri saymalı, az sayıda denemeden sonra kilitlenme veya geri çekilme uygulanmalıdır. Yalnızca IP başına sınır tek bir hesaba yapılan saldırıyı bağlamaz.

IP başına anahtarlama, saldırganla ilgisi olmayan bir nedenle başarısız olur. Mobil operatörler binlerce aboneyi tek bir taşıyıcı düzeyi NAT adresi arkasına koyar; kurumsal ağlar da aynısını bir vekil üzerinden yapar. Saldırıyı bağlayan bir sınır aynı zamanda meşru kullanıcıların anlamlı bir bölümünü yoğun saatte bloke eder, böylece ekipler sınırı hiçbir şeyi bağlamayana kadar yükseltir. Çalışan anahtarlar tokendaki kimlik, işlem yapılan hesap ve API anahtarıdır; IP, kimlik doğrulaması olmayan uç noktalar için tamamlayıcı bir işarettir, birincil kontrol değil.

Her kimlik bilgisi ve her pahalı uç nokta için beş şeyi test edin. Kimlik için bir sınır var mı. Giriş, tek kullanımlık kod, parola sıfırlama ve davet kabulünde hesap için daha sıkı ikinci bir sınır var mı. Sınır başarıları değil başarısızlıkları sayıyor mu. Aşıldığında yeniden deneme ipucuyla 429 dönüyor mu, yeniden deneme fırtınasını büyüten bir 500 değil mi. Ve pahalı uç noktalar - arama, rapor üretimi, görsel dönüştürme, toplu dışa aktarma - istek yerine maliyete göre sınırlanıyor mu; çünkü 400 sütunlu bir dışa aktarmaya yapılan tek istek bir aramayla karşılaştırılamaz.

GraphQL, webhook ve dosya yükleme: kontrol listesinin unuttuğu yüzeyler

GraphQL testin mantığını değil biçimini değiştirir. Üretimde introspection genellikle kapalıdır ve bu kimseyi durdurmaz: hata mesajlarındaki alan önerileri ("şunu mu demek istediniz") şemayı tek tahminde numaralandırır ve istemci paketi genellikle ürünün gerçekte kullandığı işlemleri içerir. Test aynı yetkilendirme testidir, ama dikkatli olunmazsa yanlış katmana uygulanır - nesne düzeyindeki kontrol çözümleyicide veya veri katmanında olmalıdır, çünkü kiracı üyeliğini kontrol eden bir üst alan alttaki iç içe seçimi korumaz.

Toplu işleme (batching), GraphQL'in hız sınırlarını aşma biçimidir ve adıyla anılmayı hak eder. Tek bir HTTP isteği, her biri ayrı bir çözümleyici çağrısı olarak çalışan yüzlerce takma adlı işlem taşıyabilir. HTTP isteklerini sayan bir sınır bir görür; veritabanı beş yüz görür. Test, yüzlerce takma adlı giriş denemesi veya nesne araması içeren bir istektir ve sonuç ya tek bir hız sınırı yanıtıdır ya da yanıt demeti. Önlem, ayrıştırılmış sorgudan hesaplanan maliyet sınırları, kalıcı sorgular veya işlem izin listesi ve azami sorgu derinliğidir - uç noktanın önündeki istek sayacı değil.

Webhook alıcıları

  • İmza doğrulaması ham istek gövdesi üzerinde, JSON ayrıştırmasından önce yapılmalı. Ayrıştırılmış nesneyi yeniden serileştirmek baytları değiştirir ve dürüst doğrulamayı bozar; bu yüzden birçok alıcı aslında hiçbir şeyi doğrulamaz.
  • İmzalı zaman damgası üzerinde, dakika cinsinden bir tekrar oynatma penceresi; yakalanan bir teslimat gelecek hafta tekrar oynatılamasın.
  • Yükün alıcıya bir adres çektirebilmesi: teslim makbuzu olan bir sunucu tarafı istek sahteciliği.
  • İmza başlığı yoksa imzasız teslimatın kabul edilip edilmediği. Bir başlığı silmek en ucuz saldırıdır.

Dosya yükleme

  • İçerik türü, istemcinin gönderdiği başlıktan değil dosya imzasından okunmalı.
  • Dosyanın nereye düştüğü: tahmin edilebilir adlarla genel bir kova, uç nokta yetkili olsa bile veri sızıntısıdır.
  • Ad işleme: dizin geçiş dizileri ve nesne anahtarına dönüşen dosya adları.
  • Yüklenen bir SVG veya HTML'in uygulamanın kendi kaynağından sunulup sunulmadığı; bu, yüklemeyi kalıcı siteler arası betik çalıştırmaya çevirir.

Yarış koşulları ve iki istek testi

Kontrol et-sonra-yap dizisi sıralı çalıştığında doğru, paralel çalıştığında yanlıştır; bu yüzden kod incelemesinden, birim testlerinden ve işleyiciyi baştan sona okuyan bir güvenlik incelemesinden geçer. Test, durum değiştiren bir uç noktaya aynı anda gönderilen iki aynı istektir: hediye kartı kullanma, bakiye çekme, bir sınıftaki son kontenjanı alma, tek seferlik teslim yuvasını kapma. Bir istek başarılı olmalı, diğeri reddedilmelidir; iki başarı bakiye iki kez harcandı demektir.

Bunun kod incelemesi yerine API testine ait olmasının nedeni, hatanın tek bir işleyicide görünmemesidir: eksik olan bir işlem sınırı veya benzersiz kısıttır. Çözüm de aynıdır - ikinci isteğin karşılayamayacağı bir veritabanı kısıtı veya koşullu güncelleme, artı istekte bir idempotency anahtarı - ve uygulama düzeyinde bir kilit değil, çünkü o kilit tek örnekte çalışır ve ikinci örnekte çalışmaz. Müşteri süreç içi bir mutex'in neden yetmediğini sorduğunda cevap dağıtım şemasıdır.

Üretimi bozmadan yıkıcı testler yürütmek

Çoğu API testi, test edilen sistem için risk yerine kontrol listesine göre sıralanır; bir silme testinin öğleden sonra dörtte gerçek bir müşterinin kaydına denk gelmesinin nedeni budur. İşi etki alanına göre sıralayın ve bu sıralamayı kapsam belgesinin parçası yapın.

Bu sırayla dört bant

  • Yalnızca okuma. Numaralandırma, envanter uzlaştırması, token doğrulamaları, okuma ve liste uç noktalarında yetkilendirme. Kendi kontrolünüzdeki hız sınırıyla üretimde güvenlidir.
  • Yıkıcı olmayan yazmalar. Kütle atama, iş mantığı ve durum geçişleri, yalnızca test edenin kimliklendirilebilir bir işaretle özel bir test kiracısında oluşturduğu nesnelere karşı.
  • Yıkıcı yazmalar. Silme ve iptal testleri yalnızca önceden oluşturulmuş nesnelere; temizlik elle avlanmak yerine işarete karşı bir sorguyla yapılır.
  • Kaynak tüketimi ve yük. Yalnızca yazılı bir zaman penceresi içinde, nöbetteki mühendis bilgilendirilmiş, bir durdurma koşulu tanımlı ve yetkilendirmede bu test sınıfına açıkça izin verilmişse. O cümle yoksa izin de yoktur.

Rehberlerin çoğunda eksik olan diğer disiplin kanıtın kendisiyle ilgilidir. Bir test, kişisel veri içeren bir kayda erişimi kanıtlıyorsa isteği, durum kodunu, etkilenen kayıt sayısını ve alan adlarını kaydedin; bulgunun tekrar üretilebilmesi için bir örnek değeri özetleyin; sonra gövdeyi silin. Bir bulguyu kanıtlamak için müşteri faturasının ekran görüntüsünü almak, güvenlik testini veri koruma olayına çevirmenin yoludur ve arkasından denetim geldiğinde bir avukatın soracağı ilk soru budur. Türkiye'de KVKK, Avrupa'da GDPR aynı ilkeyi ister: asgari tut, yalnızca kanıt için gerekeni sakla.

Otomasyonun kanıtlayabildiği ve kanıtlayamadığı

Dürüst ayrım, araç listesinden daha önemlidir; çünkü olgun bir programda en sık görülen hata, hattın API'yi kapsadığına inanan müşteridir. Otomatik kontroller dört şeyde gerçekten iyidir: taşıma ve başlık yapılandırması, bilinen güvenlik duyurularına karşı bağımlılık sürümleri, spesifikasyon uygunluğu (hiç güvenlik şeması bildirmeyen uç noktaları veya yetkilendirme başlığını gölgeleyen parametreleri yakalayan bir denetleyici) ve 500'leri bulguya çeviren şema bulanıklaştırma. Bu dördünün hiçbiri ihlallerin olduğu yer değildir.

Nesne yetkilendirmesini bulamazlar, çünkü tarayıcının geçerli kimliği ve ikinci bir kimliği yoktur. İş mantığını bulamazlar, çünkü değişmez işin kendisinde, şemada değildir. Zincirlenmiş akışları bulamazlar; tek tek zararsız üç uç nokta birleşerek ayrıcalık yükseltmesine dönüşebilir. Yarış koşulunu bulamazlar ve tek bir meşru görünen toplu istek olarak gelen hız sınırı aşımını da bulamazlar.

Otomatikleştirilebilen şey, çoğu ekibin beklediğinden daha dar ve daha değerlidir: yetkilendirme matrisinin kendisi. Rol başına iki önceden oluşturulmuş hesapla çalışan, her dağıtımda hazırlık ortamına karşı koşan ve yabancı bir kimliğin 403 veya 404 döndürdüğünü, çağıranın kendi kimliğinin 200 döndürdüğünü doğrulayan bir betik. Kritik her uç nokta bir satır alır, betik hesaplar arası 200'de derlemeyi düşürür ve ekip aynı hatayı yeni işleyicilerde yeniden üretmeyi bırakır. Eğilim çizgisini değiştiren tek kontrol budur ve elle bulunan bir bulgunun kapalı kalmasını sağlayan yeniden test artefaktı da budur.

Raporlama: önem derecesi kategoriye değil erişilebilirliğe göre

Bir bulgunun önem derecesi, ilk on listesinin hangi satırına benzediğini değil saldırganın ne elde ettiğini anlatmalıdır. Dört eksen bunu tek bir puandan daha iyi yapar. Erişilebilirlik: genel internet, iç ağ veya kimlik doğrulama öncesi. Gereken yetki: yok, herhangi bir kimliği doğrulanmış kullanıcı, ayrıcalıklı kullanıcı. Veri sınıfı: kimlik bilgileri, ödeme verisi, kişisel veri veya telemetri. Etki yarıçapı: tek nesne, tek kiracı veya tüm platform.

Aynı hatayı bu eksenlerden iki kez geçirdiğinizde sonuç kendini gösterir. Ağ politikası ve ayrıcalıklı bir rolle korunan dahili bir uç noktada nesne düzeyinde yetkilendirme hatası orta düzey bir bulgudur. Başka bir müşterinin faturasını döndüren genel bir uç noktada aynı hata, bir betiğin dakikada bin kez tekrarlayabileceği bildirilebilir bir kişisel veri maruziyetidir; rapor bunu yüksek sesle söylemelidir, çünkü bir hatayı olaya çeviren şey hızdır.

Bir bulguyu uygulanabilir kılan

  • Tam istek, iki kimlik ve iki kimlik değeri adlandırılmış olarak.
  • Düzeltmenin yeri: ağ geçidi politikası, işleyici veya veri katmanı. Yeri olmayan bulgu bir sonraki toplantıda yeniden tartışılır.
  • Ait olduğu sınıf ve önerilen düzeltmenin sınıfı mı yoksa vakayı mı kapattığı.
  • Testin hangi varsayım altında yapıldığı ve test edilemeyenlerin açıkça yazılması.

Bir bulguyu kapatan

  • Aynı isteğin aynı test verisine karşı artık 403 veya 404 dönmesi - yeşil bir panelin ekran görüntüsü değil.
  • Doğrulamanın dağıtım hattına eklenmesi, böylece kapanış onu yapan kişiden uzun yaşasın.
  • Sözleşmeye yazılmış yeniden test penceresi; otuz gün tipiktir ve raporu değil düzeltmeyi kapsamalıdır.
  • Düzeltme kısmi olduğunda kalan riskin not edilmesi, çünkü kısmi düzeltme normal sonuçtur.

Kapsam ve maliyet: gün sayısı neden uç nokta çarpı roldür

Yayımlanmış fiyat listeleri aynı biçimde buluşur, çünkü hepsi aynı aritmetiği fiyatlar. Budget Security'nin 2026 fiyat listesi on ile yirmi beş uç nokta için dört ile beş gün, karma rollere sahip kırk ile seksen uç nokta için altı ile dokuz gün, birden çok servise yayılmış yüz ve üzeri uç nokta için on ile on yedi gün öneriyor. Orta ölçekli bir API değerlendirmesi için yayımlanmış tedarikçi teklifleri kabaca 3.000 ile 28.000 arasında kümeleniyor ve birkaç firma kurumsal ölçekli her iş için 14.500 civarında bir taban veriyor. Bu sayıların hiçbiri hangi uç noktalar ve kaç kimlik olduğu bilinene kadar bir şey ifade etmez; bu yüzden kapsam matrisi teklifin ekinde değil ilk sayfasındadır.

Tahmini hareket ettiren altı değişken var ve müşteri genellikle hepsini etkileyebilir. Uç nokta başına desteklenen yöntem sayısı, çünkü oluştur, oku, güncelle ve sil bir kaynak dört testtir, bir değil. Rol modeli, çünkü beş rol matrisi çarpar ve rol hiyerarşisi üstüne yükseltme testleri ekler. Yüzeyin belgelenmiş olup olmadığı, çünkü keşif ilk doğrulamadan önce günler süren iştir. Müşterinin rol başına hesapları ve test verisini sağlayıp sağlamadığı, çünkü bunları kurmak tek başına işin beşte biri olabilir. Yük testinin kapsamda olup olmadığı, ki bu takvimi olduğu kadar yetkilendirme belgesini de değiştirir. Ve yeniden test koşulları, çünkü yeniden test edilmeyen düzeltme sonuç değil iddiadır.

Bu yüzden kapsam belgesine yazılması gerekenler gösterişsiz ve somuttur: uç nokta listesi ve sayısı, rol listesi, ortamlar, test verisinin sahibi, test penceresi, yük veya hizmet engelleme testine izin verilip verilmediği, rapor biçimi, yeniden test penceresi ve ürünün tükettiği iş ortağı ile tedarikçi API'lerinin kendi yazılı yetkilendirmesi olmadan kapsam dışı olduğunu belirten bir satır. Web ve mobil uygulamayı API ile birlikte kapsayan bir sızma testi genellikle tek çalışma olarak planlanır, çünkü aynı oturum ve aynı test hesapları ikisine de hizmet eder.

Yasal sınır ve yetkilendirme belgesi

Bir API testindeki her istek, birinin sistemine yapılmış bir erişim isteğidir ve testi saldırıdan ayıran tek şey, ilk istek gönderilmeden önce imzalanmış bir belgedir. Bu belge sistemleri ve alan adlarını, kaynak adresleri, zaman penceresini, izin verilen teknikleri, hariç tutulan teknikleri, veri işleme kurallarını, acil durum iletişimini ve test sürerken kapsamı yazılı olarak genişletmeye yetkili kişiyi adlandırır. Test ortasında kapsam genişletilecekse genişletme önce kâğıt üzerinde olur; bir mühendisin sözlü "devam edin"i şirket adına yetkilendirme değildir.

Üç sınır, ayrımı net tutmak için açıkça yazılmalı. Kendi sistemlerinizi test etmek izin açısından sınırsız, değişiklik kontrolü açısından sınırlıdır. Müşterinin sistemlerini test etmek sözleşmeyle sınırlıdır ve sözleşme onların tedarikçilerine uzanmaz. Ürününüzün tükettiği bir API'yi - ödeme sağlayıcısı, harita servisi, kimlik servisi - test etmek, o hizmetle müşteri olma ilişkinizle yetkilendirilmez ve koşulları neredeyse her zaman yasaklar; geçerli alternatif, bozuk, gecikmeli ve düşmanca yanıtları döndüren bir taklit sunucu kurup entegrasyonunuzun bunları nasıl işlediğini test etmektir. Sahibi olmadığınız, keşfettiğiniz bir API ise ne kadar açık görünürse görünsün hiçbir zaman kapsamda değildir.

Son sınır, çalışmanın güvenlik raporu mu yoksa olay mı olarak biteceğini belirleyen sınırdır: etkiyi kanıtlamak veriyi almak değildir. Erişimi tek bir kayıt ve asgari alanla kanıtlayın, sayıyı kaydedin, durun. "Ölçeği göstermek için" müşteri tablosunu indiren bir API testi, yetkili testten yetkisiz veri işlemeye geçmiştir ve o noktada müşterinin avukatı kapsam belgesini sempatiyle okumaz.

İlk gün test planı ve düzeltme sırası

Aşağıdaki plan, ucuz ve verimi yüksek doğrulamaların veriye veya yüke dokunan her şeyden önce gelmesi için bilinçli olarak sıralanmıştır. Test hesapları hazır olan olgun bir API'de tek güne sığar ve çoğu projede en önemli bulguyu üretir: bir koleksiyon uç noktasında eksik nesne düzeyi kontrolü.

İlk gün, bu sırayla

  1. Spesifikasyonu gözlenen trafikle karşılaştırın ve ikisinde de olmayan her uç noktayı kaydedin. Test etmeden önce ne olduklarını sorun.
  2. Kimlik kümesini kurun: farklı kiracılarda iki kullanıcı, bir ikinci rol, bir yönetici, kimlik doğrulamamış çağıran.
  3. Dokuz token doğrulamasını çalıştırın ve iptal penceresini dakika cinsinden kaydedin.
  4. Nesne yetkilendirme matrisini veri sınıfı en yüksek beş uç noktada, ardından tüm koleksiyon uç noktalarında çalıştırın.
  5. Yabancı ve var olmayan kimlikleri durum, gövde, gecikme ve hata metni açısından karşılaştırın.
  6. Her yazma uç noktası için üç kütle atama isteği gönderin: bilinmeyen alan, ayrıcalıklı alan, okuma tarafında fazla veri.
  7. Giriş, tek kullanımlık kod, parola sıfırlama ve davet kabulünde hesap başına sınırı ölçün.
  8. Değeri en yüksek durum değişikliğine karşı bir iki istek yarışı çalıştırın.
  9. Bir yükleme ve bir webhook alıcısı test edin.
  10. Kapsam sayısını kanıt tazeyken yazın: çalıştırılan doğrulama bölü uç nokta çarpı kimlik.

Düzeltme sırası neredeyse her raporda aynıdır ve bulguları yalnızca CVSS puanına göre sıralamak yerine bunu söylemek gerekir. Birincisi, her işleyicinin geçtiği tek bir paylaşılan katmanda nesne yetkilendirmesini uygulayın, çünkü bu vaka yerine sınıfı kapatır. İkincisi, tokenları algoritma sabitlenmiş, hedef kitle ve düzenleyici kontrol edilmiş biçimde sunucuda doğrulayın, çünkü yanlış servis tarafından kabul edilen token bir yanal hareket aracıdır. Üçüncüsü, her kimlik bilgisi uç noktasına başarısızlıkları sayan ve kilitlenme uygulayan hesap başına sınır koyun, çünkü anahtar uzayı aritmetiğini bağlayan tek kontrol budur. Dördüncüsü, yanıt projeksiyonlarını tanımlayın; modeller kimsenin istemediği alanları sızdırmayı bıraksın. Beşincisi, para veya stok hareket ettiren durum değişikliklerine veritabanı kısıtı ve idempotency anahtarı ekleyin. Altıncısı, 403 veya 404 politikasını bir kez yazın ve hata işleyicisinde uygulayın.

Bunların hiçbiri baştan yazmayı gerektirmez ve hepsi sonradan, sorunu bulan aynı betikle test edilebilir. Bir API testinin tutması gereken ölçüt de budur: bulguları yeniden çalıştırılabilen, kapsamı sayılabilen ve düzeltmeleri hatta bir doğrulama bırakan bir rapor.

Sphnix izleme paneli

Mesajları, konumu, sosyal medya ve etkinlik sinyallerini yetkili bir panelden takip edin.

Sphnix’i dene →

Profesyonel yardıma mı ihtiyacınız var?

Yetkili kurtarma, güvenlik testi ve olay desteği için doğrulanmış etik hackerlarla çalışın.

Hacker kirala →

Sorularınız mı var? Uzmanlarımız yardıma hazır.

Ücretsiz danışma için bize ulaşın →

Sık sorulan sorular

İki ayrı ritim gerekir. Rol başına iki hazır hesapla yabancı nesne kimliğinin 403 veya 404 döndürdüğünü doğrulayan yetkilendirme matrisi, hazırlık ortamına yapılan her dağıtımda çalışmalı; maliyeti dakikalarla ölçülür ve kaçırıldığında kimsenin fark etmediği bir gerileme üretir. Elle yürütülen tam çalışma ise en az yılda bir ve yetkilendirme modeli, kiracı modeli, kimlik sağlayıcı veya iş ortağı entegrasyonu değiştiğinde yapılmalı; çünkü bu değişiklikler son testin dayandığı varsayımları geçersiz kılar. Düzenlenmiş ortamlarda yıllık taban sıkılaşır: PCI DSS uygulama sızma testini en az yılda bir ve önemli değişiklik sonrası ister, ISO 27001 A.8.8 kontrolü teknik güvenlik açığı yönetiminin sürekli olmasını bekler.

Hayır. Bulmak için iki geçerli kimlik ve her birine ait geçerli bir nesne kimliği gerekir; tarayıcıda ikisi de yoktur: en fazla tek hesapla kimlik doğrular, ikinci bir kiracının nesnelerini tutmak için bir nedeni yoktur ve 403 gördüğünde testin başlangıcı değil sonu sanır. Tarayıcılar taşıma yapılandırması, bağımlılık sürümleri, spesifikasyon uygunluğu ve şema bulanıklaştırma için yararlıdır; ama API ihlallerinin çoğuna yol açan yetkilendirme hatalarını iki kez giriş yapıp kimliği değiştiren bir betik bulur.

Beş şey: spesifikasyon (OpenAPI, protobuf veya şema) ve envanterin uzlaştırılması için otuz günlük ağ geçidi kaydı; her kiracıda her rol için belgelenmiş kimlik bilgilerine sahip hazır hesaplar; yıkıcı testlerin gerçek kayıtlara dokunmaması için ayrı bir test kiracısı veya açıkça işaretlenmiş test verisi; alan adlarını, zaman penceresini ve izin verilen teknikleri adlandıran yazılı yetkilendirme; ve test sırasında kapsam değişikliğini yazılı olarak onaylayabilecek bir kişi. En çok fark yaratan hazır hesaplardır: müşteri sağlayamadığında bunları kurmak tek başına işin beşte biri olabilir.

Yayımlanmış fiyat listeleri on ile yirmi beş uç noktalı bir API için dört ile beş gün, karma rollere sahip kırk ile seksen uç nokta için altı ile dokuz gün, birden çok servise yayılmış yüz ve üzeri uç nokta için on ile on yedi gün öneriyor; orta ölçekli bir değerlendirme için tedarikçi teklifleri kabaca 3.000 ile 28.000 arasında kümeleniyor ve birkaç firma 14.500 civarında taban veriyor. Maliyeti belirleyen şey uç nokta çarpı kimlik sayısıdır; buna yüzey belgelenmemişse keşif emeği ve müşterinin test verisini sağlayıp sağlamadığı eklenir. Herhangi bir tedarikçiden kapsam paydasını isteyin; gün sayısı oradan çıkar.

Müşteri ilişkiniz buna yetki vermez. Tedarikçinin koşulları neredeyse her zaman kendi servislerinin güvenlik testini yasaklar ve yetkiniz kendi sistemlerinizi kapsar, onlarınkini değil. Bunun yerine kendi tarafınızı test edin: bozuk, gecikmeli, yinelenen ve düşmanca yanıtlar döndüren bir taklit sunucu kurun ve entegrasyonunuzun bu yanıtları doğruladığını, veri sızdırmadan hata verdiğini ve güvenli tarafta kaldığını görün. Tedarikçinin API'sinin güvensiz olduğunu düşünüyorsanız, test etmek yerine güvenlik iletişim adresine veya açıklama programına bildirin.

Bu makaleyi paylaş

Bu yazının önbelleğe alınmış bir sürümünü görüntülüyorsunuz. Güncellemeler kısa süre içinde görünebilir.