top of page

HTTP Header’ları

Yazarın fotoğrafı: Songül ÖZÜGÜRLER
Songül ÖZÜGÜRLER
28 Nis
5 dakikada okunur

HTTP Header’ları

Önceki bölümde HTTP istekleri ve response header’larıyla ilgili örnekler görmüştük. Bu HTTP header’ları, istemci ile sunucu arasında bilgi taşır. Bazı header’lar yalnızca isteklerde veya yalnızca response’larda kullanılırken, bazı genel header’lar her ikisinde de ortak olarak bulunur.

Header’lar tek bir değere ya da birden fazla değere sahip olabilir. Bu değerler header adından sonra iki nokta üst üste ile ayrılarak eklenir. Header’ları şu kategorilere ayırabiliriz:

HTTP Header’ları

- General Headers

- Entity Headers

- Request Headers

- Response Headers

- Security Headers

Şimdi bu kategorilerin her birini inceleyelim.

General Headers

General header’lar hem HTTP isteklerinde hem de response’larda kullanılır. Bağlamsaldır ve içeriğin kendisini değil, mesajı tanımlamak için kullanılır.

Header | Örnek | Açıklama

Date Date: Wed, 16 Feb 2022 10:38:44 GMT Mesajın oluşturulduğu tarih ve saati tutar. Zamanın standart UTC saat dilimine çevrilmesi tercih edilir.

Connection Connection: close Mevcut ağ bağlantısının istek tamamlandıktan sonra açık kalıp kalmayacağını belirler. Bu header için yaygın kullanılan iki değer close ve keep-alive ’dır. İstemci veya sunucu tarafından gönderilen close değeri bağlantıyı sonlandırmak istediklerini ifade ederken, keep-alive header’ı bağlantının daha fazla veri ve giriş almak için açık kalması gerektiğini belirtir.

Entity Headers

General header’lara benzer şekilde, Entity Headers hem istek hem de response tarafında ortak olabilir. Bu header’lar bir mesajla taşınan içeriği (entity) tanımlamak için kullanılır. Genellikle response’larda ve POST veya PUT isteklerinde bulunurlar.

Header | Örnek | Açıklama

Content-Type Content-Type: text/html Taşınan kaynağın türünü tanımlamak için kullanılır. Bu değer istemci tarafında tarayıcılar tarafından otomatik olarak eklenir ve sunucu response’unda geri döndürülür. charset alanı UTF-8 gibi encoding standardını belirtir.

Media-Type Media-Type: application/pdf Media-type, Content-Type’a benzer ve taşınan veriyi tanımlar. Bu header, sunucunun bizim girdimizi nasıl yorumlayacağını belirlemede kritik bir rol oynayabilir. charset alanı bu header ile birlikte de kullanılabilir.

Boundary boundary="b4e4fbd93540" Aynı mesaj içinde birden fazla içerik olduğunda bunları ayırmak için bir işaretleyici görevi görür. Örneğin form data içinde bu boundary, formun farklı parçalarını ayırmak için --b4e4fbd93540 şeklinde kullanılır.

Content-Length Content-Length: 385 Taşınan entity’nin boyutunu tutar. Sunucu bu header’ı mesaj gövdesinden veri okumak için kullanır. Tarayıcı ve cURL gibi araçlar tarafından otomatik olarak oluşturulur.

Content-Encoding Content-Encoding: gzip Veri aktarılmadan önce birden fazla dönüşümden geçebilir. Örneğin büyük miktarda veri mesaj boyutunu azaltmak için sıkıştırılabilir. Kullanılan encoding türü Content-Encoding header’ı ile belirtilmelidir.

Request Headers

İstemci, bir HTTP işleminde Request Headers gönderir. Bu header’lar HTTP isteğinde kullanılır ve mesajın içeriğiyle ilgili değildir. Aşağıdaki header’lar HTTP isteklerinde yaygın olarak görülür.

Header | Örnek | Açıklama

Host Host: www.inlanefreight.com Kaynağın sorgulandığı host’u belirtmek için kullanılır. Bu bir domain adı veya IP adresi olabilir. HTTP sunucuları farklı web sitelerini barındıracak şekilde yapılandırılabilir ve bu siteler hostname’e göre ortaya çıkar. Bu da Host header’ını önemli bir enumeration hedefi yapar; çünkü hedef sunucuda başka host’ların varlığına işaret edebilir.

User-Agent User-Agent: curl/7.77.0 Kaynak isteyen istemciyi tanımlamak için kullanılır. Bu header, tarayıcı, sürümü ve işletim sistemi gibi istemci hakkında birçok bilgi açığa çıkarabilir.

Referer Referer: http://www.inlanefreight.com/ Mevcut isteğin nereden geldiğini belirtir. Örneğin Google arama sonuçlarından bir linke tıklamak, referer’ın https://google.com olmasına neden olur. Bu header’a güvenmek tehlikeli olabilir çünkü kolayca manipüle edilebilir ve istenmeyen sonuçlara yol açabilir.

Accept Accept: */* İstemcinin hangi media type’ları anlayabildiğini tanımlar. Virgülle ayrılmış birden fazla media type içerebilir. */* değeri tüm media type’ların kabul edildiğini ifade eder.

Cookie Cookie: PHPSESSID=b4e4fbd93540 name=value formatında cookie-value çiftlerini içerir. Cookie, istemci tarafında ve sunucuda depolanan ve tanımlayıcı görevi gören bir veri parçasıdır. Bunlar her istekte sunucuya gönderilir ve böylece istemcinin erişimi korunur. Cookie’ler ayrıca kullanıcı tercihlerini kaydetmek veya session takibi yapmak gibi amaçlara da hizmet edebilir. Tek bir header içinde noktalı virgülle ayrılmış birden fazla cookie bulunabilir.

Authorization Authorization: BASIC cGFzc3dvcmQK Sunucunun istemcileri tanımlaması için kullanılan başka bir yöntemdir. Başarılı authentication’dan sonra sunucu, istemciye özgü benzersiz bir token döndürür. Cookie’lerin aksine token’lar sadece istemci tarafında saklanır ve her istekte sunucu tarafından alınır. Kullanılan webserver ve uygulama tipine bağlı olarak birden fazla authentication türü vardır.

Request header’larının tam listesi ve kullanımları burada bulunabilir.

Response Headers

Response Headers HTTP response içinde kullanılabilir ve içerikle ilgili değildir. Age, Location ve Server gibi bazı response header’ları response hakkında daha fazla bağlam sağlamak için kullanılır. Aşağıdaki header’lar HTTP response’larında yaygın olarak görülür.

Header | Örnek | Açıklama

Server Server: Apache/2.2.14 (Win32) İsteği işleyen HTTP sunucusu hakkında bilgi içerir. Sunucu hakkında sürüm gibi bilgiler edinmek ve daha fazla enumeration yapmak için kullanılabilir.

Set-Cookie Set-Cookie: PHPSESSID=b4e4fbd93540 İstemcinin tanımlanması için gereken cookie’leri içerir. Tarayıcılar cookie’leri parse eder ve gelecekteki istekler için saklar. Bu header, Cookie request header’ı ile aynı formatı takip eder.

WWW-Authenticate WWW-Authenticate: BASIC realm="localhost" İstemciyi, istenen kaynağa erişmek için gereken authentication türü hakkında bilgilendirir.

Security Headers

Son olarak Security Headers var. Tarayıcı çeşitliliğinin ve web tabanlı saldırıların artmasıyla, güvenliği artıran bazı header’ların tanımlanması gerekli hale geldi. HTTP Security header’ları, tarayıcının web sitesine erişirken uyması gereken belirli kuralları ve politikaları belirtmek için kullanılan bir response header sınıfıdır.

Header | Örnek | Açıklama

Content-Security-Policy Content-Security-Policy: script-src 'self' Web sitesinin dışarıdan enjekte edilen kaynaklara karşı politikasını belirler. Bu JavaScript kodu veya script kaynakları olabilir. Bu header tarayıcıya yalnızca belirli güvenilir domain’lerden kaynak kabul etmesini söyler ve böylece Cross-site scripting (XSS) gibi saldırıları engeller.

Strict-Transport-Security Strict-Transport-Security: max-age=31536000 Tarayıcının web sitesine düz metin HTTP protokolü üzerinden erişmesini engeller ve tüm iletişimin güvenli HTTPS protokolü üzerinden yapılmasını zorunlu kılar. Bu, saldırganların web trafiğini sniff etmesini ve parola gibi hassas bilgilere erişmesini engeller.

Referrer-Policy Referrer-Policy: origin Tarayıcının Referer header’ı üzerinden belirtilen değeri dahil edip etmeyeceğini belirler. Web sitesinde gezinirken hassas URL’lerin ve bilgilerin ifşa edilmesini önlemeye yardımcı olabilir.

Not: Bu bölüm yalnızca yaygın olarak görülen HTTP header’larının küçük bir alt kümesini içerir. HTTP iletişimlerinde kullanılabilecek çok daha fazla bağlamsal header vardır. Ayrıca uygulamalar ihtiyaçlarına göre özel header’lar tanımlayabilir. Standart HTTP header’larının tam listesi burada bulunabilir.

cURL

Önceki bölümde, cURL ile -v flag’ini kullanmanın HTTP request ve response’un tüm detaylarını gösterdiğini görmüştük. Eğer yalnızca response header’larını görmek istiyorsak, -I flag’ini kullanarak bir HEAD request gönderebilir ve sadece response header’larını görüntüleyebiliriz. Ayrıca -i flag’i ile hem header’ları hem de response body’sini (ör. HTML kodu) görüntüleyebiliriz. Bu ikisi arasındaki fark, -I flag’inin bir HEAD request göndermesi (bir sonraki bölümde göreceğiz), -i flag’inin ise belirttiğimiz herhangi bir request’i göndermesi ve header’ları da yazdırmasıdır.

Aşağıdaki komut, -I flag’inin kullanımına bir örnek çıktı gösterir:

Sixpon@htb[/htb]$ curl -I https://www.inlanefreight.com
Host: www.inlanefreight.com
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/605.1.15 (KHTML, like Gecko)
Cookie: cookie1=298zf09hf012fh2; cookie2=u32t4o3tb3gg4
Accept: text/plain
Referer: https://www.inlanefreight.com/
Authorization: BASIC cGFzc3dvcmQK
Date: Sun, 06 Aug 2020 08:49:37 GMT
Connection: keep-alive
Content-Length: 26012
Content-Type: text/html; charset=ISO-8859-4
Content-Encoding: gzip
Server: Apache/2.2.14 (Win32)
Set-Cookie: name1=value1,name2=value2; Expires=Wed, 09 Jun 2021 10:18:14 GMT
WWW-Authenticate: BASIC realm="localhost"
Content-Security-Policy: script-src 'self'
Strict-Transport-Security: max-age=31536000
Referrer-Policy: origin

Alıştırma: Yukarıdaki tüm header’ları tek tek gözden geçirmeyi deneyin ve her birinin kullanım amacını hatırlayıp hatırlayamadığınızı kontrol edin.

Header’ları görüntülemeye ek olarak, cURL bize -H flag’i ile request header’ları ayarlama imkanı da verir (bunu daha sonraki bir bölümde göreceğiz). User-Agent veya Cookie header’ları gibi bazı header’ların kendine özel flag’leri vardır. Örneğin -A ile User-Agent ayarlayabiliriz:

root@htb[/htb]$ curl https://www.inlanefreight.com -A 'Mozilla/5.0'
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
...SNIP...

Alıştırma: Yukarıdaki örnekte -I veya -v flag’lerini kullanarak, -A flag’i ile User-Agent’ı gerçekten değiştirip değiştirmediğinizi kontrol etmeyi deneyin.

Browser DevTools

Son olarak, tarayıcı devtools kullanarak HTTP header’larını nasıl ön izleyebileceğimize bakalım. Önceki bölümde yaptığımız gibi, Network sekmesine giderek sayfanın yaptığı farklı istekleri görebiliriz. İsteklerden herhangi birine tıklayarak detaylarını görüntüleyebiliriz: Network sekmesinde 188.166.146.97:31122 adresine yapılan iki GET isteği görülür. ‘/’ için status 304 ve header’lar görüntülenmiştir, ‘favicon.ico’ için status 404’tür.

İlk Headers sekmesinde hem HTTP request hem de HTTP response header’larını görürüz. Devtools header’ları otomatik olarak bölümlere ayırır, ancak Raw butonuna tıklayarak header’ları ham formatında görüntüleyebiliriz. Ayrıca Cookies sekmesini kontrol ederek istekte kullanılan cookie’leri görebiliriz; bunu ilerleyen bir bölümde ele alacağız.

 
 
bottom of page