Lab erişimi için :https://tryhackme.com/r/room/httpindetail
HTTP (HyperText Transfer Protocol) Nedir?
HTTP, bir web sitesini görüntülediğinizde kullanılan protokoldür ve Tim Berners-Lee ve ekibi tarafından 1989-1991 yılları arasında geliştirilmiştir. HTTP, web sunucularıyla iletişim kurmak ve web sayfası verilerini (HTML, görseller, videolar vb.) iletmek için kullanılan kurallar bütünüdür.
HTTPS (HyperText Transfer Protocol Secure) Nedir?
HTTPS, HTTP’nin güvenli versiyonudur. HTTPS verileri şifreler, bu sayede aldığınız ve gönderdiğiniz verilerin görünmesini engeller ve ayrıca doğru web sunucusuyla iletişim kurduğunuzdan emin olmanızı sağlar, yani bir taklitçi sunucu olmadığını doğrular.
- HTTP neyin kısaltmasıdır?
CEVAP: HyperText Transfer Protocol
- HTTPS’deki S harfi ne anlama gelir?
CEVAP: Secure
3.web sayfasında bir sorun var, challange flag’i nedir?
CEVAP: THM{INVALID_HTTP_CERT}
İstekler ve Yanıtlar:
Bir web sitesine eriştiğimizde, tarayıcınız HTML, resimler gibi varlıklar için bir web sunucusuna istek göndermeli ve yanıtları indirmelidir. Bunun öncesinde, tarayıcıya bu kaynaklara nasıl ve nereden erişileceğini belirtmeniz gerekir; işte bu noktada URL’ler devreye girer.
URL Nedir? (Uniform Resource Locator)
Eğer interneti kullandıysanız, daha önce bir URL kullanmışsınızdır. URL, internet üzerindeki bir kaynağa nasıl erişileceğini belirten bir talimattır. Aşağıdaki görsel, bir URL’nin tüm özellikleriyle nasıl göründüğünü gösterir (her istekte tüm özellikler kullanılmaz).
- Şeması (Scheme): Kaynağa erişmek için hangi protokolün kullanılacağını belirtir, örneğin HTTP, HTTPS, FTP (Dosya Transfer Protokolü).
- Kullanıcı (User): Bazı hizmetler oturum açmak için kimlik doğrulaması gerektirir; URL’ye kullanıcı adı ve şifre ekleyerek giriş yapabilirsiniz.
- Ana Makine (Host): Erişmek istediğiniz sunucunun alan adı veya IP adresi.
- Port: Bağlanacağınız port; genellikle HTTP için 80 ve HTTPS için 443’tür, ancak 1–65535 arasında herhangi bir portta barındırılabilir.
- Yol (Path): Erişmeye çalıştığınız kaynağın dosya adı veya konumu.
- Sorgu Dizisi (Query String): İstenen yola gönderilebilecek ek bilgiler. Örneğin,
/blog?id=1
blog yoluna, id’si 1 olan blog makalesini almak istediğinizi belirtir. - Parça (Fragment): İstenen sayfadaki belirli bir konumu işaret eder. Bu, genellikle uzun içerikli sayfalarda kullanılır ve sayfanın belirli bir kısmına doğrudan bağlantı sağlar, böylece kullanıcı sayfayı eriştiği anda bu kısmı görebilir.
İstek Yapmak
Bir web sunucusuna tek bir satırla “GET / HTTP/1.1” isteği göndermek mümkündür.
Ancak daha zengin bir web deneyimi için, diğer verileri de göndermeniz gerekir. Bu diğer veriler, başlıklar olarak adlandırılan şeylerde gönderilir; başlıklar, iletişim kurduğunuz web sunucusuna ek bilgi sağlar, ancak bunu Başlık görevinde daha ayrıntılı olarak ele alacağız.
Örnek İstek:
GET / HTTP/1.1
Host: tryhackme.com
User-Agent: Mozilla/5.0 Firefox/87.0
Referer: https://tryhackme.com/
Bu isteğin her satırını analiz edelim:
- Satır 1: Bu istek GET yöntemini (bunun hakkında daha fazla bilgi HTTP Yöntemleri görevinde) gönderir, ana sayfayı
/
ile talep eder ve web sunucusuna HTTP protokolünün 1.1 sürümünü kullandığımızı belirtir. - Satır 2: Web sunucusuna tryhackme.com web sitesini istediğimizi belirtiriz.
- Satır 3: Web sunucusuna Firefox sürüm 87 tarayıcısını kullandığımızı belirtiriz.
- Satır 4: Web sunucusuna bizi bu sayfaya yönlendiren web sayfasının https://tryhackme.com olduğunu belirtiriz.
- Satır 5: HTTP istekleri her zaman boş bir satırla biter, bu da web sunucusuna isteğin tamamlandığını bildirir.
Örnek Yanıt:
HTTP/1.1 200 OK
Server: nginx/1.15.8
Date: Fri, 09 Apr 2021 13:34:03 GMT
Content-Type: text/html
Content-Length: 98
<html>
<head>
<title>TryHackMe</title>
</head>
<body>
Welcome To TryHackMe.com
</body>
</html>
Yanıtın her satırını analiz edelim:
- Satır 1: HTTP 1.1, sunucunun kullandığı HTTP protokol sürümüdür ve ardından HTTP Durum Kodu gelir, bu durumda “200 OK” isteğin başarıyla tamamlandığını belirtir.
- Satır 2: Web sunucu yazılımını ve sürüm numarasını belirtir.
- Satır 3: Web sunucusunun mevcut tarihi, saati ve saat dilimi.
- Satır 4: Content-Type başlığı, istemciye gönderilecek bilginin türünü belirtir, örneğin HTML, görseller, videolar, pdf, XML.
- Satır 5: Content-Length, yanıtın uzunluğunu belirtir, böylece verilerin eksik olup olmadığını doğrulayabiliriz.
- Satır 6: HTTP yanıtı, HTTP yanıtının sona erdiğini belirtmek için boş bir satır içerir.
- Satırlar 7-14: İstenen bilgi, bu durumda ana sayfa.
1. Yukarıdaki örnekte hangi HTTP protokolü kullanılıyor?
CEVAP:HTTP/1.1
2. Hangi yanıt başlığı tarayıcıya ne kadar veri bekleyeceğini söyler?
CEVAP: Content-Length
3. HTTP Method’ları:
HTTP method’ları, istemcinin bir HTTP isteği gönderirken niyet ettiği eylemi belirtmenin bir yoludur. Birçok HTTP yöntemi vardır, ancak en yaygın olanlarını ele alacağız; genellikle GET ve POST yöntemleriyle karşılaşırsınız.
- GET İsteği Web sunucusundan bilgi almak için kullanılır.
- POST İsteği Web sunucusuna veri göndermek ve potansiyel olarak yeni kayıtlar oluşturmak için kullanılır.
- PUT İsteği Web sunucusuna veri göndererek bilgileri güncellemek için kullanılır.
- DELETE İsteği Web sunucusundan bilgi/kayıt silmek için kullanılır.
Soru 1: Yeni bir kullanıcı hesabı oluşturmak için hangi yöntem kullanılır?
Cevap: POST
Soru 2: E-posta adresinizi güncellemek için hangi yöntem kullanılır?
Cevap: PUT
Soru 3: Hesabınıza yüklediğiniz bir resmi kaldırmak için hangi yöntem kullanılır?
Cevap: DELETE
Soru 4: Bir haber makalesini görüntülemek için hangi yöntem kullanılır?
Cevap: GET
4. HTTP Durum Kodları:
Önceki görevde, bir HTTP sunucusunun yanıt verdiğinde ilk satırın her zaman bir durum kodu içerdiğini ve bu durum kodunun istemciye isteğin sonucunu ve potansiyel olarak nasıl işlemesi gerektiğini bildirdiğini öğrendiniz. Bu durum kodları 5 farklı aralığa ayrılabilir:
HTTP Durum Kodları türkçe:
Durum Kodu Aralığı | Kapsam | Açıklama |
---|---|---|
100-199 | Bilgi Yanıtı | İstemciye isteğinin ilk kısmının kabul edildiğini ve geri kalanını göndermeye devam etmesi gerektiğini belirtir. Bu kodlar artık çok yaygın değildir. |
200-299 | Başarı | İstemciye isteğinin başarılı olduğunu bildirmek için kullanılır. |
300-399 | Yönlendirme | İstemcinin isteğini başka bir kaynağa yönlendirmek için kullanılır. Bu, başka bir web sayfasına veya tamamen farklı bir web sitesine olabilir. |
400-499 | İstemci Hataları | İstemciye isteğinde bir hata olduğunu bildirmek için kullanılır. |
500-599 | Sunucu Hataları | Sunucu tarafında meydana gelen hatalar için ayrılmıştır ve genellikle sunucunun isteği işleme konusunda büyük bir problem yaşadığını gösterir. |
Yaygın HTTP Durum Kodları:
Çok sayıda farklı HTTP durum kodu bulunmaktadır ve uygulamalar kendi durum kodlarını da tanımlayabilirler. İşte karşılaşmanız olası olan en yaygın HTTP yanıt kodları:
Durum Kodu | Anlamı | Açıklama |
---|---|---|
200 | OK | İstek başarıyla tamamlandı. |
201 | Created | Bir kaynak oluşturuldu (örneğin, yeni bir kullanıcı veya yeni bir blog yazısı). |
301 | Moved Permanently | İstemcinin tarayıcısını yeni bir web sayfasına yönlendirir veya arama motorlarına sayfanın başka bir yere taşındığını bildirir. |
302 | Found | Yukarıdaki kalıcı yönlendirmeye benzer, ancak bu geçici bir değişikliktir ve yakında tekrar değişebilir. |
400 | Bad Request | Tarayıcıya isteğinde bir şeylerin yanlış veya eksik olduğunu bildirir. İstemcinin göndermediği belirli bir parametre gerekiyorsa kullanılabilir. |
401 | Not Authorised | Bu kaynağı görüntülemek için yetkilendirilmiş olmanız gerekir, genellikle bir kullanıcı adı ve şifre ile. |
403 | Forbidden | Giriş yapmış olsanız bile bu kaynağı görüntüleme izniniz yok. |
405 | Method Not Allowed | Kaynak bu yöntem isteğine izin vermiyor; örneğin, /create-account kaynağı GET isteği alırken POST isteği bekliyordu. |
404 | Page Not Found | İstediğiniz sayfa/kaynak mevcut değil. |
500 | Internal Service Error | Sunucu isteğinizle ilgili bir hata ile karşılaştı ve bunu düzgün bir şekilde nasıl ele alacağını bilmiyor. |
503 | Service Unavailable | Sunucu isteğinizi karşılayamıyor, çünkü aşırı yüklenmiş veya bakımda. |
Bu HTTP durum kodlarının bazılarını tarayıcıda nasıl göründüğünü görmek için sağdaki “Siteyi Görüntüle” düğmesine tıklayın.
- Yeni bir kullanıcı veya blog yazısı oluşturduğunuzda hangi yanıt kodunu alabilirsiniz?
CEVAP: 201
- Var olmayan bir sayfayı erişmeye çalıştığınızda hangi yanıt kodunu alabilirsiniz?
CEVAP: 404
- Web sunucusu veritabanına erişemezse ve uygulama çökerse hangi yanıt kodunu alabilirsiniz?
CEVAP: 503
- Önce giriş yapmadan profilinizi düzenlemeye çalışırsanız hangi yanıt kodunu alabilirsiniz?
CEVAP: 401
Başlıklar (Headers):
Başlıklar, bir HTTP isteği yaparken web sunucusuna gönderebileceğiniz ek veri parçalarıdır.
HTTP isteği yaparken başlıklar kesinlikle gerekli olmamakla birlikte, bir web sitesini düzgün görüntülemeniz zor olabilir.
Yaygın İstek Başlıkları:
Bu başlıklar, istemciden (genellikle tarayıcınız) sunucuya gönderilir.
- Host: Bazı web sunucuları birden fazla web sitesi barındırır, bu nedenle başlıkları sağlayarak hangi web sitesini talep ettiğinizi belirtebilirsiniz, aksi takdirde sunucunun varsayılan web sitesini alırsınız.
- User-Agent: Bu, tarayıcı yazılımınız ve sürüm numaranızdır. Tarayıcı yazılımınızı bildirmek, web sunucusuna sitenin tarayıcınız için uygun şekilde formatlanmasına yardımcı olur ve ayrıca bazı HTML, JavaScript ve CSS öğeleri sadece belirli tarayıcılarda mevcuttur.
- Content-Length: Form gibi verileri bir web sunucusuna gönderirken, içerik uzunluğu web sunucusuna web isteğinde ne kadar veri bekleyeceğini bildirir. Böylece sunucu eksik veri olup olmadığını kontrol edebilir.
- Accept-Encoding: Tarayıcının desteklediği sıkıştırma yöntemlerini bildirir, böylece veri internet üzerinden iletilirken daha küçük hale getirilebilir.
- Cookie: Sunucuya gönderilen ve bilgilerinizi hatırlamaya yardımcı olan veriler (daha fazla bilgi için çerezler görevine bakın).
Yaygın Yanıt Başlıkları:
Bu başlıklar, bir isteğe yanıt olarak sunucudan istemciye döner.
- Set-Cookie: Her istekte geri gönderilen ve web sunucusuna depolanan bilgiler (daha fazla bilgi için çerezler görevine bakın).
- Cache-Control: Tarayıcının içeriği ne kadar süre önbellekte tutması gerektiğini belirtir, bu süre dolduğunda tekrar istenir.
- Content-Type: İstemciye hangi tür verinin döndüğünü belirtir, yani HTML, CSS, JavaScript, Görseller, PDF, Video vb. İçerik türü başlığı kullanılarak tarayıcı veriyi nasıl işleyeceğini bilir.
- Content-Encoding: Veriyi internet üzerinden iletmek için hangi yöntemle sıkıştırıldığını belirtir.
Hangi başlık web sunucusuna hangi tarayıcının kullanıldığını bildirir?
CEVAP: User-Agent
Hangi başlık tarayıcıya döndürülen veri türünü bildirir?
CEVAP: Content-Type
Hangi başlık tarayıcıya hangi web sitesinin talep edildiğini bildirir?
CEVAP: Host
Çerezler (Cookies):
Çerezleri muhtemelen duymuşsunuzdur, bunlar bilgisayarınızda saklanan küçük veri parçalarıdır. Çerezler, bir web sunucusundan “Set-Cookie” başlığı aldığınızda kaydedilir. Daha sonra yaptığınız her istekte, çerez verilerini web sunucusuna geri gönderirsiniz. HTTP durumundan dolayı (önceki isteklerinizi takip etmez), çerezler web sunucusuna kim olduğunuzu hatırlatmak, web sitesindeki bazı kişisel ayarları veya web sitesini daha önce ziyaret edip etmediğinizi hatırlamak için kullanılabilir. İşte bir örnek HTTP isteği:
Çerezler birçok amaç için kullanılabilir, ancak en yaygın olarak web sitesi kimlik doğrulaması için kullanılır. Çerez değeri genellikle şifreyi görebileceğiniz bir düz metin dizisi olmaz, bunun yerine tahmin edilmesi zor olan benzersiz bir gizli kod (token) olur.
Çerezlerinizi Görüntüleme
Tarayıcınızın geliştirme araçlarını kullanarak web sitesine gönderdiğiniz çerezleri kolayca görüntüleyebilirsiniz. Tarayıcınızda geliştirme araçlarına nasıl erişeceğinizden emin değilseniz, bu görevdeki üst kısımda bulunan “Siteyi Görüntüle” düğmesine tıklayarak nasıl yapılacağına dair bir rehber bulabilirsiniz.
Geliştirme araçlarını açtıktan sonra, “Ağ” (Network) sekmesine tıklayın. Bu sekme, tarayıcınızın talep ettiği tüm kaynakların bir listesini gösterir. Her birine tıklayarak isteğin ve yanıtın detaylı bir dökümünü alabilirsiniz. Tarayıcınız bir çerez göndermişse, bunu isteğin “Çerezler” (Cookies) sekmesinde görebilirsiniz.
1. Çerezleri bilgisayarınıza kaydetmek için hangi başlık kullanılır?
CEVAP: Set-Cookie
Bu, demo HTTP istekleri yapmak için bir emülatördür, yukarıdaki görevlerden öğrendiklerinizi kullanarak aşağıdaki soruları tamamlamak için kullanabilirsiniz.
2. /blog adresine bir GET isteği yapın ve gear simgesini kullanarak URL alanında id parametresini 1 olarak ayarlayın
/user/1 için bir DELETE isteği yapın
Kullanıcı adı parametresi admin olarak ayarlanmış şekilde /user/2 adresine bir PUT isteği yapın
thm kullanıcı adını ve letmein parolasını /login adresine POST edin