Bir panel sahibi güvenliği düşündüğünde aklına dışarıdan gelen saldırı gelir: yük, parola deneme, açık tarayıcıları. Oysa açık API'si olan bir panelin ikinci bir kapısı vardır ve o kapı tamamen meşru görünür: istekler geçerli bir anahtarla, sizin kendi kayıtlı müşterinizden gelir ve normal trafikten ayırt edilemez. Bir bayinin tek bir curl satırıyla panelinize ne yapabileceğini, bunu hangi denetimlerin durdurduğunu ve düğme gizlemenin neden hiçbir işe yaramadığını ele alıyoruz.

Anahtarınız elinde olan bir saldırı

Sıradan saldırıdan farkı temeldir ve geri kalan her şey buradan çıkar. Dıştan gelen saldırı kapıda karşılanır: trafik süzgeci, giriş deneme sınırı, captcha - bunun için panel güvenliği üzerine ayrı bir inceleme var. Burada ise tam tersi: trafik meşru, anahtar gerçek, müşteri var ve hiçbir kapı süzgeci bu isteği geri çevirmez.

Üstelik çoğu zaman kötü niyet de yoktur. Pratikte üç kaynak var:

Temel kural: arayüz hiçbir şeyi korumaz

En sık buraya takılırlar. Düğmeyi gizlemek, hizmeti vitrinden çekmek, bir bölümü kapatmak - bunların hepsi yalnızca tarayıcının gördüğünü değiştirir. Anahtarı olan müşteri ise tarayıcıyı hiç açmaz.

Bizim çekirdeğimizde bu kural üç ayrı sunucu denetimiyle sabitlenmiştir ve her birinin açıklamasında aynı düşünce yazılıdır: o olmasa yasak tek bir curl satırıyla aşılırdı.

Bir de dördüncüsü, en geneli. Siparişin bütün denetimleri - hizmetin uygunluğu, miktar sınırları, e-posta onayı, hizmet tipi, bakiyenin yetip yetmediği - bütün girişlerin geçtiği tek bir yerde durmalıdır: vitrin formu da, API de, misafir ödemesi de. Bunları çağıran taraflara dağıtmak olmaz: er ya da geç bir giriş, diğerinin reddettiğini kabul eder ve bu ayrışma sessizce olur.

Sahte ve çöp siparişler

İkinci katman, biçimsel olarak geçerli ama size hiçbir şey getirmeyen siparişler. Her biri sağlayıcıya gider, onun sınırlarını yer ve ayıklaması sizin vaktinizi alır.

Limitleri tüketmek

Üçüncü katman en can sıkıcısı, çünkü tek bir müşteriye değil hepsine birden vurur. Durumları arasız döngüyle soran bir betik ortak istek bütçesini yer ve onunla birlikte bütün diğer bayiler takılır.

Sayısal ölçekler. Bizde müşteri API'si dakikada yüz küsur istekle, yönetici API'si kabaca üç katıyla sınırlı; bu bir tutarsızlık değil: müşteri anahtarını genelde bir insan ya da küçük bir betik kullanır, yönetici API'sine ise robot ve yığınlarla gelir. Yaygın motor üzerindeki panellerde sınır daha da sıkıdır - panel başına saniyede beş istek civarı, ve gerçek bir entegrasyonda buna çarpmak sanıldığından kolaydır.

Önceden akla gelmeyen iki sonuç:

Doğru yanıt yasak değil, toplu metotlar ve anlaşılır belgelerdir. Durumları yüze kadar numarayla yığın hâlinde sormak, tek tek döngüyle aynı işi görür ama iki taraf için de yüz kat ucuzdur. Bayileriniz bunu bilmiyorsa, tek tek dövmeye devam ederler.

Anahtarlarla ne yapmalı

Bütün bunlar nasıl görülür

İçeriden kötüye kullanımın asıl sorunu, sorun gibi görünmemesidir: siparişler oluşur, para döner, panel çalışır. Elde olması gereken asgari şeyler:

Özet

Açık API bir delik değil, panelin büyümesinin asıl yoludur: anahtarı olan bayi, elle toplanamayacak bir hacim getirir ve API zaten bunun için vardır. Sadece bir siteyi savunduğunuz gibi savunulmaz. Bütün kurallar sunucuda durur, bütün girişler aynı denetimlerden geçer, sınırlar önceden ilan edilir, toplu metotlar belgelenir ve anahtar tek tıkla yenilenir. Gizlenmiş düğme hiçbir şeyi korumaz ve bunu deneyerek öğrenmektense baştan kabul etmek ucuzdur. Anahtarın kime ve niçin verileceği bayiler için panel API'si yazısında.

Bunun canlı bir panelde nasıl işlediğini hiç para harcamadan görebilirsiniz: kendi kataloğumuz üzerinden geçen siparişler hiç sayılmaz, üçüncü taraf sağlayıcılarda ise ayın ilk 100 siparişi ücretsizdir. Anahtar hemen verilir, yani kendi betiğinizi daha ilk gün üzerinde çalıştırabilirsiniz.