
HTTP, istemci-sunucu hesaplama modelinde bir istek-cevap protokolü olarak çalışır. Örneğin, bir web tarayıcısı istemci, bir web sitesine ev sahipliği yapan bir bilgisayarda çalışan bir uygulama ise sunucu olabilir.
İstemci, tarayıcısı aracılığıyla kullanıcının sağladığı bilgilerle bir sunucudan içerik talep eder. Sunucu, HTML dosyaları ve diğer içerikler gibi kaynakları sağlar veya istemci adına başka işlevler gerçekleştirir ve ardından yanıt mesajını istemciye geri gönderir. Yanıt, isteğin tamamlanma durumu bilgilerini içerir ve ayrıca mesaj gövdesinde talep edilen içeriği de içerebilir.
HTTP, durumsuz bir protokoldür, yani protokol açısından, belirli bir istek/yanıt çifti ile aynı istemci ve sunucu arasındaki önceki istek/yanıt çiftleri arasında hiçbir bağlamsal ilişki yoktur. Her çift, HTTP tarafından bağımsız bir “konuşma” veya “oturum” olarak ele alınır.
HTTP, verilerin zarar görmeyeceğini veya karışmayacağını garanti eden güvenilir veri iletim protokollerini kullanır. Ancak HTTP, ağ bağlantısının nasıl yapıldığını veya yönetildiğini tanımlamaz. Bu süreç, TCP/IP gibi daha alt seviyeli protokollerle gerçekleştirilir.
HTTPS, güvenli iletişim için yaygın olarak kullanılan bir iletişim protokolüdür. Teknik olarak kendi başına bir protokol değildir; aslında HTTP’nin SSL/TLS protokolü üzerine katmanlaştırılmasıyla ortaya çıkan bir protokoldür. Bu, SSL/TLS’nin güvenlik yeteneklerini standart HTTP iletişimlerine ekler. SSL, sunucu ile istemci arasındaki iletişimi dinlemeyi önlemeyi amaçlar. Ancak bazı yöneticiler, web uygulamalarını saldırıya açık bırakarak yalnızca SSL’e güvenme hatasına düşer. Şifrelenmiş veriler aynı zamanda kötü niyetli veriler de içerebilir!
Web İletişiminin Genel Görünümü
Bir web sayfasında bir bağlantıya tıkladığınızda neler olur? Gerçekleşen adımlar şu şekilde özetlenebilir:
- DNS, alan adını bir IP adresine dönüştürür.
- TCP/IP, istemci ve web uygulama sunucusu arasında istek/yanıt verilerini taşır.
- Yanıt verileri; HTTP, HTML ve diğer sayfa bilgilerini içerir.
- HTTP, hata mesajları dahil olmak üzere bir çerçeve sağlar.
- HTML, sayfa düzenini ve içeriği tanımlar.
URL’lerin Ayrıştırılması
Web uygulaması içeriğine erişmek isteyen bir kullanıcı, FireFox, Chrome veya Internet Explorer gibi bir web tarayıcısı kullanır. İstenen içerik veya kaynak, bir URL (Uniform Resource Locator) ile tanımlanır. URL’ler iki ana bileşene sahiptir:
- Protokol tanımlayıcı: Kaynağı almak için kullanılacak protokolü belirtir.
- Kaynak adı: Kaynağa tam adresi.
Örnek URL:
http://support.f5.com/kb/en-us/search.html?product=asm&searchType=basic&query-protocol&productVersion=all&documentType=all
Bu URL’nin bileşenleri:
Protokol tanımlayıcı: http
Kaynak adı:support.f5.com/kb/en-us/search.html?product=asm&searchType=basic&query-protocol&productVersion=all&documentType=all
Kaynak Adının Parçalanması
Kaynak adı, belirlenen protokole göre tamamen farklı formatlarda olabilir. Yukarıdaki örnekte kaynak adı şu şekilde bölünür:
- Ana bilgisayar adı (Host name): Kaynağın bulunduğu alan adı veya IP adresi
support.f5.com
- Dosya adı (Filename)(Opsiyonel): Sunucudaki dosyanın yolu. Eğer belirtilmezse, kök dizin varsayılır.
/kb/en-us/
- İstek nesnesi (Request object)(Opsiyonel): İstek için kullanılan URI (Uniform Resource Identifier). Eğer belirtilmezse, sunucu varsayılan bir nesneyle yanıt verebilir.
search.html
- Sorgu dizesi (Query string)(Opsiyonel): Web uygulamalarına, örneğin CGI betikleri veya PHP programları gibi, iletilecek parametreleri içerir. Sorgu dizesi, ana bilgisayar adından/dosya adından bir soru işareti (
?
) ile ayrılır ve genellikle bir dizi parametre-değer çifti içerir. Her çift, bir eşittir işareti (=
) ile ayrılır ve çiftler, bir ampersand (&
) ile birleştirilir.product=asm&searchType=basic&query=protocol&productVersion=all&documentType=all
İstek Parametreleri
Bir URL üzerindeki sorgu dizesi, bir web uygulamasına parametre iletmek için kullanılan yöntemlerden yalnızca biridir. (Daha fazla bilgi için bu bölümdeki Yöntemler kısmına bakabilirsiniz.)
HTTP İstek ve Yanıt Mesaj Yapısı
HTTP İstek Mesajı
Bir istemci (örneğin bir web tarayıcısı), protokol tarafından belirlenen kuralları kullanarak, istek öğelerini uygun bir istek mesajı yapısında biçimlendirir.
HTTP İstek Yapısı:
Öğe | İçerik | Örnek |
---|---|---|
İstek Satırı | Yöntem, URI, Protokol | GET /admin.php?category=orders&orderid=2 HTTP/1.1 |
Başlıklar | Çeşitli bilgiler | Host: www.mysite.com |
Connection: keep-alive | ||
Mesaj Gövdesi | Parametreler (Opsiyonel) | POST yöntemi ile iletilir. |
HTTP Yanıt Mesajı
HTTP yanıt mesajları da benzer bir yapıya sahiptir. Yanıtlar, istekle ilişkili protokol sürümünü, durum kodunu ve isteğin sonucunu içerir.
HTTP Yanıt Yapısı:
Öğe | İçerik | Örnek |
---|---|---|
Durum Satırı | Protokol sürümü, durum kodu | HTTP/1.1 200 OK |
Başlıklar | Çeşitli bilgiler | Date: Wed, 01 May 2013 18:19:41 GMT |
Server: Apache | ||
Content-Type: text/html | ||
Mesaj Gövdesi | Yanıt yükü (Opsiyonel) | HTML, resimler, stil dosyaları, vb. |
HTTP İstek Yöntemleri
HTTP 1.1 sürümünü tanımlayan RFC 2616‘ya göre, web sunucularında işlem yapmak için kullanılabilecek sekiz yöntem vardır:
- HEAD
- GET
- POST
- PUT
- DELETE
- TRACE
- OPTIONS
- CONNECT
GET ve POST Yöntemlerinin Kullanımı ve Güvenlik Açıkları:
GET ve POST, web sunucusundan bilgi almak için en yaygın kullanılan HTTP yöntemleridir. Bazı bu yöntemler, HTTP uygulamalarını dağıtmak ve test etmek amacıyla geliştirilmiştir, ancak eğer web sunucusu yanlış yapılandırılırsa kötü niyetli kişiler tarafından kolayca kötüye kullanılabilirler. (Daha fazla bilgi için HTTP yöntemlerine yönelik güvenlik açıklarına ilerleyen bölümlerde değineceğiz.)
OWASP, web uygulamalarında yalnızca GET, POST ve HEAD yöntemlerinin kullanılmasını öneriyor. Bu dersin ilerleyen bölümlerinde, bir ASM (Application Security Manager) güvenlik politikasının genellikle sadece bu üç yöntemi kabul edeceğini keşfedeceksiniz.
GET Yöntemi:
GET, istenen kaynak tarafından belirlenen bilgiyi almayı amaçlar. HTTP protokolüne göre, GET istekleri yalnızca veri almak amacıyla kullanılmalı ve başka hiçbir etkisi olmamalıdır. Örneğin, aşağıdaki URL’yi bir kullanıcı tarayıcısının adres çubuğuna yazar ve Enter’a basarsa:
http://www.mysite.com/admin.php?category=orders&orderid=2
Buna karşılık gelen HTTP isteği şu şekilde olacaktır:
GET /admin.php?category=orders&orderid=2 HTTP/1.1
Ve bu başlıkla birlikte gönderilecektir:
Host: www.mysite.com
HTML formları da GET yöntemini kullanarak verileri sunucuya gönderebilir. Örneğin, aşağıdaki gibi bir form gönderildiğinde:
<form action="http://www.mysite.com/admin.php" method="GET">
<input type="hidden" name="category" value="orders" />
Order Number: <input type="text" name="orderid" />
<input type="submit" value="View order info" />
</form>
Kullanıcı “2” sayısını girip “View order info” butonuna bastığında, HTTP isteği yine aynı şekilde görünecektir:
GET /admin.php?category=orders&orderid=2 HTTP/1.1
Host: www.mysite.com
GET Yöntemi İle İlgili Dikkat Edilmesi Gerekenler:
- GET istekleri önbelleğe alınabilir.
- GET istekleri tarayıcı geçmişinde saklanır.
- GET istekleri yer imlerine eklenebilir.
- GET isteklerinin veri uzunluğu sınırlıdır.
- GET istekleri yalnızca veri almak için kullanılmalıdır.
POST Yöntemi
POST yöntemi, web uygulamasına veri göndermek için kullanılır. GET ile karşılaştırıldığında, POST verileri URL yerine isteğin gövdesinde gönderir. Bu, genellikle veritabanını güncellemek gibi işlemler için kullanılır.
Örnek olarak, önceki GET örneğinde kullanılan formu POST yöntemine dönüştürürsek:
<form action="http://www.mysite.com/admin.php" method="POST">
<input type="hidden" name="category" value="orders" />
Order Number: <input type="text" name="orderid" />
<input type="submit" value="View order info" />
</form>
Kullanıcı “2” sayısını girip formu gönderdiğinde HTTP isteği şu şekilde olacak:
POST /admin.php HTTP/1.1
Host: www.mysite.com
Bu sefer parametre verileri isteğin gövdesinde yer alır:
category=orders&orderid=2
POST Yöntemi İle İlgili Dikkat Edilmesi Gerekenler:
- POST istekleri önbelleğe alınmaz.
- POST istekleri tarayıcı geçmişinde saklanmaz.
- POST istekleri yer imlerine eklenemez.
- POST isteklerinin veri uzunluğu sınırlaması yoktur.
GET ve POST Yöntemlerinin Birlikte Kullanılması: Hem GET hem de POST yöntemlerini aynı anda kullanmak mümkündür. Örneğin:
<form action="http://www.mysite.com/admin.php?action=print" method="POST">
<input type="hidden" name="category" value="orders" />
Order Number: <input type="text" name="orderid" />
<input type="submit" value="Print order info" />
</form>
Bu durumda HTTP isteği şu şekilde olacaktır:
POST /admin.php?action=print HTTP/1.1
Host: www.mysite.com
category=orders&orderid=2
GET ve POST Yöntemlerinin Karşılaştırılması:
Özellik | GET | POST |
---|---|---|
Veri Konumu | URL | Mesaj Gövdesi |
Önbellek | Evet | Hayır |
Tarayıcı Geçmişi | Evet | Hayır |
Yer İmleri | Evet | Hayır |
Veri Uzunluğu | Sınırlı | Sınırsız |
GET ve POST Yöntemleri Arasındaki Farklar
- BACK butonu/Yeniden Yükleme
- GET: Sayfa önbellekten yenilenirse herhangi bir sorun yoktur.
- POST: Sayfa yenilendiğinde veri yeniden gönderilecektir. Tarayıcı, kullanıcıya verilerin yeniden gönderileceğini bildirir ve iptal etme seçeneği sunar.
- Yer İşareti (Bookmark)
- GET: Sayfa yer işaretine eklenebilir.
- POST: Sayfa yer işaretine eklenemez.
- Kodlama Türü
- GET:
application/x-www-form-urlencoded
- POST:
application/x-www-form-urlencoded
veyamultipart/form-data
- GET:
- Geçmiş (History)
- GET: Parametreler tarayıcı geçmişine kaydedilir.
- POST: Parametreler tarayıcı geçmişine kaydedilmez.
- Veri Uzunluğu Kısıtlamaları
- GET: Veriler URL’ye eklenir, bu nedenle URL uzunluğu sınırlıdır (max. 2048 karakter).
- POST: Veri uzunluğunda bir kısıtlama yoktur.
- Veri Türü Kısıtlamaları
- GET: Sadece ASCII karakterler gönderilebilir.
- POST: Herhangi bir veri türü gönderilebilir, ikili (binary) veriler de dahil.
- Güvenlik
- GET: Daha az güvenlidir çünkü veriler URL’nin parçası olarak gönderilir. Şifre gibi hassas bilgileri içermemelidir.
- POST: GET’e göre daha güvenlidir çünkü parametreler tarayıcı geçmişinde veya web sunucusu günlüklerinde saklanmaz.
- Uniform Resource Identifier (URI)
- GET: Veriler genellikle sorgu dizisini (query string) kullanarak URL içinde taşınır.
- POST: URI ile veri gönderilmez.
- HTTP Sürümü
- HTTP 1.1, sürekli bağlantıları, önbellekleme, parçalama ve sıkıştırma gibi özellikleri destekler.
- HTTP 1.0, önbellekleme için Expire başlıklarını kullanır, ancak bu zamanlaması uyuşmayan içerikler için sorun oluşturabilir.
HTTP 1.1 Özellikleri:
- Sürekli Bağlantılar: Birden fazla istek-yanıt çifti tek bir TCP bağlantısı üzerinden yapılabilir.
- Önbellekleme: 1.1, ETag ve Max-Age başlıkları kullanarak önbellek yönetimini iyileştirir.
- Parçalama: 1.1, yanıtları bir dizi parça halinde gönderir.
- Sıkıştırma: 1.1, istemcinin desteklediği sıkıştırma türlerini belirtmesini sağlar (genellikle gzip veya deflate).
- HTTP Başlıkları: 1.1, istekte Host başlığının bulunmasını zorunlu kılar.
HTTP Başlıkları Genel Bakış
Başlıklar, istek ve yanıt mesajlarında görünen ad/değer çiftleridir ve ilk satırdan sonra gelir. Başlığın adı, değeriyle tek bir iki nokta (:) ile ayrılır. Başlıklar, web uygulamasının çalışma parametrelerini tanımlar; örneğin, kodlama dili, tarayıcı kimliği ve bağlantı ayarları gibi. HTTP başlıkları, uygulamalar tarafından kullanılan verileri taşıyabilir ve bu nedenle kötü amaçlı kodlar için geçerli bir taşıma mekanizması olarak değerlendirilmelidir.
Birçok başlık vardır, özellikle Host, Accept-Encoding, Cookie ve Connection gibi başlıklar yaygındır.
Örnek GET İsteği:
GET /browse.php?id=29 HTTP/1.1
<!--Başlıklar istek satırından sonra gelir-->
Referer: http://auction.f5.com
Accept-Language: en
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0;)
Host: auction.f5.com
Connection: Keep-Alive
Cookie: PHPAUCTION SESSION=2d3e18bcef
HTTP başlıkları, web istemcilerinin ve sunucularının veri aktarımıyla ilgili birçok seçeneği müzakere etmelerini sağlar. Genellikle istemci isteği, istemcinin ne yapmak istediğini veya yapabileceğini belirtirken, sunucunun yanıtı, sunucunun seçtiği eylemleri içerir. Bu süreç yinelemeli değildir. HTTP başlıkları, istek ve yanıt mesajlarına ek bilgiler ekler.
Genel Başlıklar Genel başlıklar, hem istemciler hem de sunucular tarafından kullanılan genel başlıklardır. Aşağıdaki tablolarda bazı örnek başlıklar verilmiştir.
Genel Başlık | Amaç |
---|---|
Connection | İstemci ve sunucunun bir TCP bağlantısı üzerinden birden fazla istek-yanıt çifti işlemeyi destekleyip desteklemediğini belirtir. Sürüm 0.9 bu seçeneği desteklemezken; sürüm 1.0’da varsayılan olarak Connection: Close; sürüm 1.1’de ise varsayılan Connection: Keep-Alive’dır. |
Date | HTTP mesajının oluşturulduğu tarih ve zaman damgası. |
Transfer-Encoding | HTTP mesajının güvenli bir şekilde iletilmesi için hangi kodlamanın yapıldığını alıcıya bildirir. |
Via | Bu HTTP yanıtının bir ara sunucu (proxy) üzerinden geçtiğini belirtir. |
İstek Başlıkları İstek başlıkları, sunuculara, istemcinin ne tür veri kabul edebileceği gibi bilgileri iletir.
İstek Başlığı | Amaç |
---|---|
Referer | İstemcinin, sunucuya nereden geldiğini belirtmesini sağlar. Başlık, kullanıcının bir bağlantıya tıklayarak veya bir formu göndererek gittiği sayfanın adresini içerir. |
Host | İstemcinin, isteği gönderdiği cihazın ana bilgisayar adı (veya IP) ve isteğe bağlı olarak portunu sağlar. Başlıklar, sürüm 0.9 ve 1.0’da zorunluyken, sürüm 1.1’de tek gerekli başlık Host başlığıdır. |
User-Agent | İstenen sunucuya, isteği yapan tarayıcı türünü bildirir. |
Accept-Encoding | Tarayıcının alabileceği kodlama türünü belirtir. |
Önbellek Kontrol Başlıkları Önbellekleme, cihazların, her istekte ana sunucuya dönmek yerine içeriği yeniden kullanmak için son kullanıcıya “daha yakın” olan cihazlarda içeriği depolamasını sağlayan bir işlemdir. Bu, ara bir cihaz veya istemcinin tarayıcısının önbelleği olabilir. Her durumda, önbellek kontrol başlıkları, hangi içeriğin önbelleğe alınabilir olduğunu, içeriğin ne kadar süre geçerli olduğunu ve istemcilerin eski içeriğin hala geçerli olup olmadığını nasıl belirleyeceğini tanımlayabilir.
Bir istemci, bir istekle birlikte cache-control başlığı içerdiğinde, istemci, eski verilerin ara önbellekten verilmesini engellemeye çalışır. Bir sunucu, bir yanıtla birlikte cache-control başlığı içerdiğinde, sunucu içeriğin ne kadar süreyle önbellekte kalabileceğini belirtir.
Public ve Private Önbellek kontrol başlıkları, içeriğin birden fazla kullanıcı için geçerli olup olmadığını belirten bir parametre içerebilir. “Private” ayarı, objenin paylaşılan bir önbellek tarafından önbelleğe alınmaması gerektiğini ancak bir kullanıcının tarayıcısının içeriği önbelleğe alabileceğini belirtir. Tam tersine, “public” ayarı, içeriğin çoklu kullanıcılar tarafından kullanılan paylaşılan bir önbellekte saklanabileceğini belirtir. Her iki durumda da, içerik ne zaman sona ereceği bilgisini de içermelidir.
No-Cache ve No-Store Önbellek kontrol başlıkları, “no-cache” veya “no-store” ayarlarını içerebilir. Ironik olarak, “no-cache” önbelleklemeyi engellemez. Bunun yerine, varlığın güncellenip güncellenmediğini doğrulamadan önce önbellekten sunulmaması gerektiğini belirtir. “No-store” ayarı, içeriğin asla önbelleğe alınmaması gerektiğini belirtir.
Son Kullanım Göstergeleri İçerik önbelleğe alındığında, önbelleğin içeriği sonunda zaman aşımına uğratması için bir mekanizmaya ihtiyacı vardır. Aksi takdirde, içerik eski olabilir. Aşağıdaki tablo, içeriği yaşlandırmak için kullanılan parametreleri açıklar.
Zaman Sonu Başlıkları | Amaç |
---|---|
Last Modified | İstemiye, içeriğin ne sıklıkla değiştiğini bildirir ve istemcinin “if-modified-since” seçeneğini içeren sonraki sorguları yapmasına olanak tanır. |
Cache Control | İçeriğin belirli bir süre sonra önbellekten kaldırılmasını sağlar. |
Expires | İçeriğin belirli bir saatte önbellekten kaldırılmasını sağlar. |
ETags | İçeriğin güncellenip güncellenmediğini istemcilere bildirir. |
İçerik Süresi Web sitelerinden alınan içeriğin çoğu statiktir ve uzun süre değişmez. Bu tür içerik kesinlikle önbelleğe alınması gereken içeriklerin başında gelir. Ancak, dinamik içerik de sıkça önbelleğe alınabilir. Genellikle, “dinamik” olarak kabul edilen içerik her birkaç dakika veya saatte bir değişir.
Yoğun bir site için aynı belgelerin yeniden dağıtılması, sunucular üzerindeki yükü artırır ve müşteriye yanıt süresini azaltır. Ayrıca, birçok “dinamik” sayfa aslında statiktir; yalnızca küçük bölümler müşteriler arasında farklılık gösterir.
HTTP Yanıtları
HTTP yanıtları genellikle üç bölümden oluşur. İlk satırda HTTP sürümü ve bir yanıt kodu bulunur; ikinci bölüm yanıt başlıklarını içerir; üçüncü bölüm ise yanıtın gövdesidir. İkinci yanıt başlığındaki “Server” başlık bilgisini gözlemleyin.
HTTP/1.1 200 OK
Date: Fri, 24 Aug 2012 17:37:04 GMT
Server: Apache
Pragma: no-cache
Cache-Control: must-revalidate
Expires: Fri, 24 Aug 2012 17:37:05 GMT
Set-Cookie: PHPSESSID=d98ae41d312dbcd44dd7644252630009; path=/
Set-Cookie: currentURL=deleted; expires=Thu, 25-Aug-2011 17:37:05 GMT
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html; charset=UTF-8
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<link href="http://www.auction.com/css/style2.css" rel="stylesheet" type="text/css" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Auction.com | Real Estate Auctions</title>
<meta name="description" content="The Nation's Leading Online Real Estate Auctions" />
Şekil 5: Yanıt kodu, yanıt başlıkları ve yanıt gövdesi
ASM, HTTP yanıtındaki “Server” başlık bilgisini genellikle kaldıracak şekilde yapılandırılmıştır, böylece yanıtın içinde hassas bilgi bulunmaz.
Yanıt başlıkları, HTTP mesajının yükü hakkında bilgi sağlar.
Yanıt Başlığı
Amaç
- Content-Type: Gönderilen mesajdaki veri türlerini açıklar.
- Content-Length: Gövdenin uzunluğunu sağlar.
- Expires: Bir kaynağın geçerliliğinin sona ereceği zamanı belirtir. Geçerlilik süresi dolmadan önce, önbellekler yanıtın bir kopyasını saklayabilir ve sonraki taleplere geri döndürebilir. Süre sona ermeden önce doğrulama yapılmalıdır.
- Last Modified: Varlık gövdesindeki son değişiklik tarih ve saatini belirtir.
- Content-Encoding: Sıkıştırılmış bir kaynağın formatını belirtir, örneğin gzip.
Yanıt Durum Kodları
HTTP yanıt kodları, bir istemcinin talebinin yerine getirilip getirilmediğini belirten 3 haneli sayılardır. Aşağıdaki tablo, her yanıt kodunun kısa bir açıklamasını içerir.
Yanıt Durum Kodu
Amaç
- 100: Bilgilendirici (HTTP 1.0 tarafından desteklenmez)
- 200: Başarıyla tamamlanmış, belirli bir derecede
- 300: Yönlendirme gereklidir
- 400: Hata istemcide görünüyor
- 500: Hata sunucuda görünüyor
Yanıt başlıkları, yanıtın gönderildiği tarih, dosya boyutu ve dosya türü gibi bilgileri içerir ve ayrıca sunucu hakkında veriler sağlar.
Yanıt Başlığı
Amaç
- Age: Yanıtın ne kadar eski olduğunu belirtir.
- Content-Type: Mesaj gövdesinde bulunan veri türlerini belirtir.
- Server: Yanıtı geri gönderen sunucunun türünü belirtir. Varsayılan olarak, ASM “Server” başlığını kaldırır.
HTML Bileşenleri Genel Bakış
Web sayfaları, biçimlendirme bilgisi, görseller ve multimedya dosyaları gibi birçok veri türünden oluşturulur. Çoğu web sayfası, Hypertext Markup Language (HTML) dilinde yazılmıştır. HTML, yazarların diğer nesnelere ve sayfalara bağlantılar belirtmelerini sağlar ve aynı zamanda sayfanın nasıl yapılandırılacağını ve tarayıcıda nasıl görüntüleneceğini tanımlar. HTML belgeleri düz metin olarak yazılır, ancak içeriğini tanımlayan veya açıklayan etiketler eklenir.
Aslında, çoğu HTML sayfası, bir sayfanın taslağıdır. Nesneler ve bağlantıları, HTML içine gömülü olup genellikle içeriğin büyük kısmını oluşturur.
ASM açısından, bağlantıların anlamı şudur: Her bağlantı başka bir nesneyi temsil eder, her biri başka bir TCP bağlantısı oluşturabilir ve her bağlantı başka bir HTTP talebi ve yanıtını temsil eder.
Ayrıca, her bağlantı ve nesne, HTML sayfasını ayarlamak, içerik önbellekleme, içerik sıkıştırma ve tüm bunların kullanıcı deneyimini optimize etmeye yönelik fırsatlar sunar.
Kullanıcı Girdi Formları
Kullanıcı girdi form öğeleri, serbest metin girişi sağlar. Örnekler, yorumlar, kullanıcı adı ve şifre alanlarıdır.
HTML, çeşitli kullanıcı girdi öğeleri için kısıtlamalar tanımlasa da, bunlar interceptor proxy’ler gibi araçlar kullanılarak değiştirilebilir ve yeniden yapılandırılabilir.
Metin Alanları<input type="text">
bir kullanıcıya karakter girmesi için alan tanımlar:
<form>
First name: <input type="text" name="firstname" /><br />
Last name: <input type="text" name="lastname" />
</form>
Şekil 6: Bir formun render edilmesi
Bir alana bir değer verildiğinde, bu değer, bir parametre ad-değer çiftinde, bir sorgu dizesi veya post verisinde taşınır.
Statik Form Öğeleri
Statik form öğeleri sunucu tarafından önceden tanımlanır. Statik form öğelerine örnekler, açılır menüler, radyo düğmeleri ve onay kutularıdır.
Radyo Düğmeleri<input type="radio">
bir radyo düğmesi tanımlar. Radyo düğmeleri, bir kullanıcıya sınırlı sayıda seçenekten yalnızca birini seçme imkânı tanır:
<form>
<input type="radio" name="agree" value="Yes" /> Yes<br />
<input type="radio" name="agree" value="No" /> No
</form>
Şekil 7: Radyo düğmeleri
Özel form öğeleri, örneğin gizli formlar, tarayıcıya sunulmayacak ve formda görünmeyecek öğelerdir. Bu kursta, gizli formları ve gizli alan manipülasyonlarına karşı nasıl korunacağınızı tartışacağız.
Gönder Butonu
Bir gönderme butonu, form verilerini bir sunucuya gönderir. <input type="submit">
bir gönderme butonunu tanımlar.
Veriler, formun action özniteliğinde belirtilen sayfaya gönderilir. Action özniteliğinde tanımlanan dosya, alınan verilerle bir şeyler yapar.
<FORM name="search" action="search.php" method="GET">
<INPUT type="HIDDEN" name="search">
<INPUT type="text" name="query" size="15" value=""/>
<INPUT TYPE="submit" NAME="submit" VALUE="Submit!">
</FORM>
Şekil 8: Render edilmiş arama alanı ve Gönder butonu
ASM: Dosya Türlerini, URL’leri ve Parametreleri Ayrıştırma
ASM, bir web uygulamasını, uygulamanın bileşenlerinin (veya nesnelerinin) bir veri yapısı modelini oluşturarak ve son kullanıcılar ile uygulama arasındaki etkileşimleri, bileşenler arasındaki etkileşimleri denetleyerek korur.
Herhangi bir web uygulamasında kullanılan dosya türleri genellikle sınırlı bir grup olup, uygulamanın kullandığı teknolojiyle ilişkilidir. Örneğin, bir .NET uygulamasında, .asp, .aspx, .gif, .jpg, .doc, .pdf ve .js gibi dosya türlerini görmek olasıdır.
Belirli nesneler, dosya türleri, URL’ler ve parametreler ASM tarafından numaralandırılabilir, böylece web uygulamanız için güvenlik sağlamak amacıyla detaylı bir yapı oluşturulabilir.
Laboratuvar 3: Fiddler ve Hack-it Auction Sitesi
Hedefler:
- Fiddler ve Hack-it Auction sitesi ile tanışmak
- HTTP istek ve yanıt trafiğini görüntülemek
Tahmini tamamlama süresi: 15 dakika
Laboratuvar Gereksinimleri:
- İstemci makinesinin web uygulamasına (auction sitesi) erişimi olmalıdır.
- İstemci makinesinde Fiddler yazılımı yüklü olmalıdır.
Fiddler’ı Başlatma ve IP Adresi Filtrelemesini Ayarlama:
Fiddler, bir HTTP proxy’si olarak tarayıcınız ile bağlantı kurduğu tüm IP adresleri arasındaki HTTP bağlantı bilgilerini görüntüler. Sadece tarayıcınız ve auction sitesi arasındaki bağlantıları görmek için, BIG-IP’nin yönetim IP adresini Fiddler’a filtrelemek üzere ayarlayacağız, böylece bu IP adresi oturumlar panelinde görünmeyecektir.
- Internet Explorer’ı başlatın.
- Fiddler’ı başlatın.
- Fiddler penceresinin sağ tarafında, sekmelerin bulunduğu alanı bulun ve ardından Filters sekmesine tıklayın.
- Use Filters onay kutusunu seçin ve ardından ikinci açılır menüden Hide the following Hosts seçeneğini seçin.
- Aşağıdaki örnekte gösterildiği gibi BIG-IP yönetim IP adresinizi girin:
- Hosts:
192.168.X.31
- Hosts:
- Actions butonuna tıklayın ve ardından Run Filterset now seçeneğini seçin.
Fiddler ile HTTP Trafiğini Görüntüleme:
- Tarayıcınızdan
http://10.10.x.10
adresine bağlanın ve HTTP oturumlarını görüntüleyin. - Fiddler’da, sol taraftaki Web Sessions panelini bulun.
- Web uygulamasına bağlandığınızda kaç tane HTTP oturumu açıldığını sayın.
- Auction sitesine giriş yapın, ardından bir öğe arayıp satma gibi birkaç işlem yapın.
- Kullanıcı adı = studentX
- Şifre = studentX
- Web Sessions panelinde, belirli bir oturumun URL’sini seçin.
- Sağ panelde Inspectors sekmesine tıklayın.
- Request ve Response başlıklarını bulun.
- Giriş yaptıktan sonra bir oturum için GET bilgisini görüntüleyebiliyor musunuz?
- Bir öğe sattıktan sonra bir oturum için POST bilgisini görüntüleyebiliyor musunuz?
- Kullanıcı-Agent, Host ve Cookie gibi çeşitli HTTP başlıklarını görüntüleyin.
- Response Headers kısmındaki Raw sekmesine tıklayın. Bu web uygulamasının HTML’sini görüntüleyin. Hack-it auction sitesini keşfetmek için birkaç dakika ayırın.
- Fiddler’ı kapatın.
Excellent site. Plenty of useful info here. I am sending it to several friends
ans additionally sharing in delicious. And of course, thanks on your sweat!
Thank you for your response.