Özel ağla hiç konuşmayan bir genel form yine de özel ağın değerlendirmesi gereken veriler üretir. Tünel yalnızca kimin kimi aradığını değiştirir. İndirmeden sonraki her şey bir içe aktarma kararıdır ve özel tarafa aittir. Bu kılavuz tek bir gönderimi tarayıcıdan kaydedilmiş bir iç kayda kadar izler.

Gönderimin İndiği Yerden Başlayın

Tarayıcı, denetlenen bir kabul deposuna bir satır yazan ve onaydan fazlasını döndürmeyen genel bir uç noktaya gönderir. O depo devir noktasıdır ve genel katmanın yazabileceği tek şey o olmalıdır. Ham veriyi orada değiştirmeden, geldiği zamanla ve kararlı bir kayıt tanımlayıcısıyla birlikte tutun.

Ardından özel bir çalışan bekleyen satırları tünel üzerinden çeker ve her biriyle ne yapacağına karar verir. Kendi kimliği altında çalışır ve bu, sonraki bölümün konusudur.

curl --silent --fail \
  --cert /etc/importer/client.crt --key /etc/importer/client.key \
  "https://intake.corp.internal/api/pending?limit=20" \
  -o /var/lib/importer/pending.json

İçe Aktarıcıya Yalnızca İhtiyacı Olan Yetkiyi Verin

Genel web süreci ile iç uygulamaya yazan kimlik iki farklı asıl olmalıdır. Genel bir sunucunun yalnızca form verisi teslim etmesi gerektiği için iç yönetime ihtiyacı yoktur ve iki taraf için tek bir paylaşılan hesap herhangi bir web hatasını iç yazmaya dönüştürür. Çalışana kendi kimlik bilgilerini verin, bunları tek bir içe aktarma işlemiyle sınırlayın ve her içe aktarmayı hangi asılın yaptığını kaydedin. Tünel sınırını süs değil anlamlı kılan tam olarak bu ayrımdır.

Çalışanın hangi kaynaktan okuyabileceğini de sınırlayın. Uygulama bir kuyruk veya aktarım hizmeti kullanıyorsa, o hizmet kendi kimlik doğrulamasını ve erişim ilkesini korur, çünkü VPN yükün içindeki hiçbir şeyin kimliğini doğrulamaz.

Kısa ömürlü bir işlev de aynı incelemeden muaf değildir. Çalışırken ağ konumu ve kimlik bilgileri hâlâ yetki verir; daha kısa ömür yalnızca pencereyi daraltır. Ömür, kimliğin hangi işlemleri yapabileceğine karar vermenin yerini tutmaz.

İçeride Bir Şey Değişmeden Önce Doğrulayın

Genel form alanları, aksi kanıtlanana kadar saldırganın denetlediği metindir ve OWASP'ın girdi doğrulama kılavuzu tam da bu nedenle arka uç akışlarını güvenilmez kaynaklar arasında sayar. Şifrelenmiş bir aktarım, baytların bozulmadan geldiğini söyler; izin verilebilir bir isteği tanımladığını değil. Her ayrıcalıklı adımdan önce ayrıştırın ve doğrulayın, böylece kötü bir satır eyleme geçebilecek bir kod yoluna asla ulaşmaz.

İzin verilen alanları, biçimlerini, boyutlarını ve uyulması gereken iş kurallarını tanımlayın. Bir tarih doğru biçimlendirilmiş olabilir ve yine de istenen işlem için yanlış olabilir; iç bir hesabı veya onay durumunu adlandıran bir yük kendine bunların hiçbirini verememelidir.

Reddedilen satırları bir düzeltme tahmin etmek yerine bir inceleme sonucuna gönderin veya bunları bir kabuğa ya da ham veritabanı arayüzüne iletmeyin. Kayıt tanımlayıcısını ve başarısız olan kuralı günlüğe yazın, başvuru sahibinin yazdığı her alanı değil.

Tek Bir İşlemde Yeniden Deneme Noktası Oluşturun

İlk onay kaybolduğu için submission-1042 kaydı iki kez çekilirse, çalışanın kaynak kaydı ve onun kaydedilmiş sonucunu tanıması için kalıcı bir yola ihtiyacı vardır. İşi bir kez çalıştıran bir zamanlama, her satırın bir kez uygulandığını kanıtlamaz. Yinelenen teslimat normaldir, bu yüzden tasarım bunu emmelidir.

İç uygulamanın kendi işlemini ve yinelenen kayıt mekanizmasını kullanın; kaynak tanımlayıcısını, sonucu ve onayı tek bir tutarlı sırada tutun. Yalnızca amaçlanan işlem kaydedildikten veya kalıcı olarak atandıktan sonra onaylayın ve kabul satırını yalnızca baytlar indirildi diye asla silmeyin.

Ardından bunu üç sabit test verisiyle kanıtlayın: geçerli bir satır, hatalı biçimlendirilmiş bir satır ve aynı denetlenen kaynak tanımlayıcısının iki kez teslim edilmesi. Her biri çalışanın kullandığı aynı uç noktadan geçer.

for f in fixtures/valid-submission.json fixtures/bad-date.json; do
  curl --silent --fail --cert /etc/importer/client.crt \
    -X POST --data @"$f" https://intake.corp.internal/api/records
done
curl --silent --fail --cert /etc/importer/client.crt \
  -X POST --data @fixtures/valid-submission.json https://intake.corp.internal/api/records

İlk iki satır farklı iç durumlarda bitmelidir ve üçüncüsü ikincisini oluşturmak yerine o kaynak kayıt için zaten kaydedilmiş tanımlayıcıyı döndürmelidir. Başka her şey içe aktarmanın henüz yinelenebilir olmadığı anlamına gelir.

İlgili makaleler