İçeriğe geç

4.1 · Seviye 0 · Dijital Dünyanın Temelleri

HTTP isteği ve yanıtı

yöntemler, başlıklar, durum kodları; tarayıcının sunucuyla konuşması

Siber Güvenlik Akademisi — M04, İnternet ve Web · 1.876 kelime · 3 saha durumu · ≈ 9 dk okuma · 13 dk dinleme

Saha durumlarındaki kişiler ve kurumlar kurgusaldır; kaynaklar gerçektir. Bu akademi savunma odaklıdır: saldırılar mekanizma düzeyinde anlatılır, adım adım saldırı tarifi verilmez. Uygulamalar yalnız kendi cihazında, kendi hesabında ya da yalıtılmış bir laboratuvarda yapılır; başkasının sistemine izinsiz erişim suçtur. Dersler hukuki danışmanlığın yerini tutmaz.

Açılış

Selin'in şirketine bir müşteri destek talebi gönderdi: parola sıfırlama sayfasında bir hata aldığını yazmış, yardımcı olsun diye de ekranın tamamının görüntüsünü eklemişti. Destek ekibi talebi Selin'e iletti. Selin görüntüye baktığında önce hatayı değil, adres çubuğunu fark etti. Adresin sonunda, müşterinin parolasını sıfırlamaya yarayan uzun ve gizli bir kod duruyordu.

Kod artık birkaç yerdeydi: müşterinin ekran görüntüsünde, destek sisteminin kayıtlarında, talebi okuyan üç kişinin e-postasında ve büyük olasılıkla müşterinin tarayıcı geçmişinde. Kodun süresi bir saatti ve süre dolmuştu, bu yüzden bir zarar olmamıştı. Ama Selin bir şeyi sorgulamaya başladı: sitenin tasarımı, bir sırrı tam da paylaşılmak için yapılmış bir yere, adrese koyuyordu.

Bu ders, tarayıcı ile sunucu arasındaki konuşmanın kendisini anlatıyor: bir isteğin nelerden oluştuğunu, bir cevabın neler söylediğini ve bu konuşmanın hangi parçalarının kimler tarafından görülebileceğini.

Tek fikir

Web, tarayıcının sunucuya gönderdiği isteklerden ve sunucunun verdiği yanıtlardan oluşur. İsteğin her parçası, adresi, başlıkları ve içeriği, onu gönderen tarafın kontrolündedir; sunucu hiçbirine körü körüne güvenemez ve adrese yazılan hiçbir şey sır değildir.

Nasıl çalışır

Modül 3'te paketlerin bir sunucunun 443 numaralı portuna nasıl ulaştığını gördük. Şimdi o porttan içeri giren konuşmanın içeriğine bakıyoruz. Web sayfaları, uygulamaların arka plandaki veri alışverişi ve pek çok mobil uygulama aynı protokolle konuşur.

Bir istek dört parçadan oluşur. Birincisi yöntemdir, yani ne yapılmak istendiği: bir kaynağı getirmek için GET, bir form ya da veri göndermek için POST, bir şeyi silmek için DELETE gibi. İkincisi hedeftir, yani adresin alan adından sonraki kısmı; soru işaretinden sonra gelen parametreler de buraya dahildir. Üçüncüsü başlıklardır. Dördüncüsü, bazı isteklerde bulunan içeriktir; bir formun gönderdiği veriler gibi.

Yöntemlerin bir güvenlik anlamı var.

Selin'in sorunu tam olarak buydu. Parola sıfırlama kodu adresin içindeydi ve adres, standardın tarif ettiği bütün yerlere düşmüştü: ekran görüntüsüne, destek kayıtlarına, tarayıcı geçmişine.

Sunucu her isteğe bir yanıtla döner ve yanıtın ilk satırında bir sayı vardır.

Durum kodları güvenlik çalışanları için bir alfabedir. Bir sunucunun kayıtlarında aynı adresten gelen yüzlerce 404, birinin var olmayan sayfaları tek tek yokladığını gösterebilir; ardı ardına gelen 401'ler, bir hesaba parola denendiğini. Beşyüzlü bir hata ise bazen sunucunun beklenmedik bir girdiyle karşılaştığının işaretidir.

HTTP'nin bir özelliği daha var: durumsuzdur. Her istek kendi başına gelir ve sunucu bir önceki isteği kendiliğinden hatırlamaz. Seni oturum boyunca tanıması için ek bir mekanizma gerekir; onu bu modülün üçüncü dersinde, çerez ve oturumu konuşurken göreceğiz.

Son ve en önemli nokta şudur: isteğin her parçası istemcinin kontrolündedir. Bir tarayıcı isteği hazırlar, ama herhangi bir program da aynı isteği istediği başlıklarla, istediği parametrelerle ve istediği içerikle gönderebilir. Bir formdaki gizli bir alan, bir başlıktaki tarayıcı adı ya da bir parametredeki fiyat, sunucuya gelen istekte istemcinin yazdığı şeydir. Sunucu bunlara, kendisi doğrulamadan güvenemez.

Sahada

Savunma

HTTP'ye dair savunmanın bir kısmı siteyi yazanların, bir kısmı siteyi kullananların işidir.

Siteyi yazanlar için ilk ilke, istemciden gelen hiçbir şeye güvenmemektir. Fiyatlar, kullanıcı numaraları, yetki bilgileri ve formlardaki gizli alanlar sunucuda yeniden hesaplanır ya da doğrulanır. Selin'in ödeme sayfasında doğru olan buydu. Bu ilkeyi Seviye 6'da web uygulaması güvenliğinde ayrıntılı işleyeceğiz.

İkinci ilke, değişiklik yapan işlemleri güvenli yöntemlerle kabul etmemektir. Bir kaydı silmek, bir ödeme yapmak ya da bir ayarı değiştirmek GET isteğiyle yapılabiliyorsa, bir bağlantıya tıklamak ya da bir resmin yüklenmesi bu işlemi tetikleyebilir. Standardın tanımı burada bir tasarım kuralına dönüşür.

Üçüncü ilke, sırları adrese koymamaktır. Parola sıfırlama kodları, oturum belirteçleri ve kişisel bilgiler adresin içinde taşınmamalı; taşınması gerekiyorsa çok kısa ömürlü olmalı ve kullanıldığı anda geçersizleşmelidir. Selin'in ekibi sıfırlama akışını değiştirdi: kod artık bağlantı açıldıktan hemen sonra adresten kaldırılıyor, tek kullanımlık ve on beş dakikalık bir süreyle sınırlı tutuluyordu.

Kullananlar için savunma daha basittir. Paylaştığın bir ekran görüntüsünde adres çubuğunun ne gösterdiğine bak. Bir bağlantıyı iletmeden önce, içinde giriş gerektirmeyen bir erişim kodu olup olmadığını düşün; büronun müşteriye gönderdiği paylaşım bağlantısı gibi, bazı bağlantılar birer anahtardır. Ve bir sitenin adresi https ile başlamıyorsa, girdiğin her şeyin yolda düz metin olarak taşındığını bil; bunu bu modülün dördüncü dersinde ayrıntılı göreceğiz.

Kurumlar için son bir savunma da kayıtlardır. Web sunucusunun kayıtları her isteği ve durum kodunu tutar; Kaan'ın gördüğü yoklama, bu kayıtlar okunduğu için görünür oldu.

Uygulama

Bu uygulamada kendi bilgisayarından bir web sitesine bir istek gönderecek ve gelen yanıtın başlıklarını okuyacaksın. Gönderdiğin, tarayıcının her gün gönderdiği türden sıradan bir istektir.

Bu son gözlem önemlidir: arama kutularına yazdıklarının adrese girdiği her durumda, o kelime tarayıcı geçmişinde ve yoldaki kayıtlarda görünebilir.

Defter: İncelediğin sitenin durum kodu, şifresiz adresten şifreli adrese yönlendirme yapıp yapmadığı ve gördüğün güvenlik başlıkları, tehditler bölümünde kısa bir satır olarak. Kendi kullanımın için bir kural: paylaşmadan önce ekran görüntüsünde adres çubuğuna bakmak.

Hata köşesi

Yaygın yanlış"Sayfadaki form alanı gizliyse kullanıcı onu değiştiremez."
Doğrusu

Gizli alan yalnız ekranda görünmez; isteğin bir parçası olarak istemcinin kontrolündedir ve tarayıcının araçlarıyla ya da başka bir programla istendiği gibi değiştirilebilir. Sunucu, istemciden gelen her değeri, gizli olsun olmasın, kendisi doğrulamalıdır.

Yaygın yanlış"Adres şifreli bağlantıyla gittiği için içindeki bilgi gizlidir."
Doğrusu

Şifreli bağlantı adresi yolda korur, ama adres yine de tarayıcı geçmişine, yer imlerine, ekran görüntülerine, sunucu kayıtlarına ve paylaşılan bağlantılara düşer. Standart bu yüzden adreslerin paylaşılmak için tasarlandığını, korunmak için değil, açıkça söyler.

Yaygın yanlış"404 hatası zararsızdır, bulunamadı demektir."
Doğrusu

Tek bir 404 genellikle zararsızdır. Ama aynı kaynaktan kısa sürede gelen yüzlerce 404, birinin sitedeki gizli ya da unutulmuş sayfaları aradığını gösterebilir. Durum kodları tek tek değil, desen olarak okunur.

Etik ve sınırlar

Bu derste kendi bilgisayarından sıradan bir istek gönderdin; bu, bir web sitesinin olağan kullanımıdır. Bir sitenin isteklerini değiştirmek, gizli alanları kurcalamak ya da var olmayan sayfaları tek tek yoklamak ise başka bir şeydir: Selin'in ekibi bunu kendi sitelerinde ve bir test hesabıyla yaptı, Kaan'ın gördüğü yoklama ise sitenin sahibinin izni olmadan yapılmış bir keşif girişimiydi. Başkasının sitesinde bir isteği değiştirerek fiyatı, yetkiyi ya da başka birinin verisini değiştirmeye çalışmak, sitenin sahibinin yetkisi olmadan yapıldığında bilişim suçu sayılabilir ve iyi niyet bunu değiştirmez. Böyle bir açığa tesadüfen rastlarsan, onu denemeden sitenin sahibine bildirirsin. Bir ekran görüntüsünde ya da bir bağlantıda başkasının erişim koduna rastlarsan da onu kullanmazsın.

Kapanış

  1. Web, istemcinin gönderdiği HTTP istekleri ile sunucunun yanıtlarından oluşur; bir istek yöntem, hedef, başlıklar ve gerektiğinde içerikten, bir yanıt ise durum kodu, başlıklar ve içerikten oluşur.
  2. İsteğin her parçası istemcinin kontrolündedir; sunucu fiyatları, kimlikleri ve gizli alanları kendisi doğrulamalı, değişiklik yapan işlemleri güvenli yöntemlerle kabul etmemelidir.
  3. Adresler paylaşılmak için tasarlanmıştır, korunmak için değil; sırlar adrese konmaz, durum kodları ise kayıtlarda desen olarak okunarak yoklamaları ve denemeleri ortaya çıkarır.

Üç soru

  1. Selin'in şirketinin parola sıfırlama kodunu adresin içinde taşıması neden bir tasarım sorunuydu?
  2. Ödeme sayfasındaki gizli form alanında taşınan bir tutara sunucunun güvenmesi neden yanlıştır?
  3. Bir web sunucusunun kayıtlarında aynı adresten iki dakikada gelen dört yüz 404 neyi gösterebilir?

Yanıtlar

  1. Adresler paylaşılmak için tasarlanır; ekran görüntülerine, tarayıcı geçmişine, yer imlerine ve sunucu ve aracı kayıtlarına düşer. Sıfırlama kodu adresin içinde olduğu için müşteri ekran görüntüsünü paylaştığında kod destek sistemine ve birkaç kişinin e-postasına yayıldı. Standart, hassas bilgiyi adrese koymanın akıllıca olmadığını açıkça söyler; ekip kodu kısa ömürlü, tek kullanımlık yaptı ve açıldıktan sonra adresten kaldırdı.
  2. Gizli alan, isteğin istemci tarafından hazırlanan bir parçasıdır ve kullanıcı ya da herhangi bir program onu değiştirebilir. Sunucu o değere güvenirse, biri tutarı değiştirerek daha az ödeyebilir. Doğru tasarım, tutarı sunucunun kendi kayıtlarından yeniden hesaplamaktır.
  3. Birinin otomatik bir araçla sitedeki olası yönetim panellerini, yedek dosyalarını ya da unutulmuş sayfaları sırayla yokladığını gösterebilir. Hepsinin 404 ile bitmesi aranan şeylerin bulunamadığını gösterir; böyle bir desende 200 ile biten bir satır olsaydı, açıkta bir şey bulunduğu anlamına gelebilirdi ve asıl o satır incelenmeliydi.

Sonraki derse köprü

Bu derste isteği ve yanıtı sunucunun gözünden okuduk. Ama yanıt tarayıcıya ulaştığında hikâye bitmiyor: tarayıcı gelen içeriği bir sayfaya dönüştürüyor, içindeki betikleri çalıştırıyor ve bir sayfanın başka bir sitenin verisine dokunup dokunamayacağına karar veriyor. Sıradaki ders tarayıcının ne yaptığını soruyor: sayfayı çizmeyi, betik çalıştırmayı ve web'in en önemli güvenlik sınırlarından biri olan aynı köken politikasını.

Anlamadığın bir yer mi var?

Mentor yalnız bu dersin metnine dayanarak cevap verir. Metinde geçmeyen bir şey sorarsan uydurmaz, geçmediğini söyler.