25 Aralık 2008 Perşembe

Lida

lida nedir

lida nedir

Çin dağlarında yetişen ve uzakdoğuda yüzyıllardır yemeklerde zindelik amaçlı işlenen Yunnan yosunu ile birlikte 9 çeşit bitkiden oluşan,tamamen bitkisel bir zayıflama kapsülüdür. Modern teknoloji ile üretilerek kapsül halinde getirilmiş, zayıflamaya olağanüstü destek veren %100 bitkisel bir üründür. LIDA yosun kapsülü tokluk hissi vererek su ile birlikte vücuttaki yağları yakmanızı sağlar.İçeriğinde kesinlikle kimyasal herhangi bir bileşim bulunmamaktadır.
1 kutu İçerisinde 30 adet (350mg)kapsül bulunmaktadır


lida

28 Temmuz 2008 Pazartesi

Yeni Web Güvenliği Kitapları

Yeni Web Güvenliği Kitapları

03.05.2008

Okuyucu : 953
Günlük Okuyucu : 10,8

Web güvenliği konusunda yayınlanan hemen hemen tüm kitapları okumaya çalışıyorum ama son bir kaç aydır pek kitap okuyamadığımdan dolayı piyasayı biraz kaçırdım. Yeni web güvenliği kitaplarının hepsi beklendiği gibi daha çok AJAX, Web 2.0 ve bir çok başka benzer zımbırtı üzerine.

Genelde bu kitapların çoğu benim gibi konunun düzenli takipçileri çok faydalı olmuyor ama gene de bir şeyler kazanabiliyorsunuz.

Piyasada yeni şu kitaplar var:

  • Web 2.0 Security - Defending AJAX, RIA and SOA
    Tanınan web güvenlik yazarlarından Shreeraj Shah' ın kitabı. Her ne kadar kitap genel yeni konulara değinse de maalesef RIA veya SOA benim umrumda değil, AJAX güvenlik geyikleri de biraz baydığından dolayı bu kitap bana henüz pek bir şey ifade etmiyor. Ek olarak görünen o ki kitap daha çok nasıl güvenli yaparsanıza yönelmiş ki bu da benim pek umrumda değil. Önemli olan nasıl saldırırsınız...
  • Ajax Security
    WebInspect takımından Billy Hoffman' ın kitabı. Kitap hakkında çok güzel yorumlar olsa da sadece AJAX a eğilmesi beni pek sarmıyor. Safari books' ta varmış şimdi buldum, dolayısıyla oradan okumaya başlayacağım. Gene kitap hakkında ileride yazmaya çalışacağım.
  • Hacking Exposed Web 2.0
    Klasik hacking exposed serisinden, muhtemelen pek güzel değil. İçerik fena gözükmüyor
  • The Web Application Hacker's Handbook
    NGS ekibinden, ve onların stili genelde penetration testers to penetration testers. Dolayısıyla genelde güzel oluyorlar. Ek olarak çok geniş ama yeni teknolojilere pek bulaşmamışlar. Dolayısıyla daha az yeni bilgi içeriyor olabilir.

Şu an bunlar benim listemde, hangisini alacağıma henüz karar vermedim ama The Web Application Hacker's Handbook güzel gözüküyor.

Web Güvenliği Günleri

26 Kasım'da web Güvenliği Günleri - İzmir etkinliğinin gerçekleşeceğini sevgili Ferruh'tan (soul) öğrendim. İlgili duyuru:

Alıntı:
Web Güvenlik Topluluğu ve OWASP-Türkiye olarak kısa bir aradan sonra yine bir “Web Güvenliği Günleri” etkinliği ile karşınızdayız. ULAK-CSIRT’ın desteği ve katkıları ile 26 Kasım 2007 tarihinde Ege Üniversitesi’nde “Web Güvenliği Günleri - İzmir” adı altında bir etkinlik gerçekleştireceğiz. Gerçekleşecek olan etkinlikte, web güvenliğine ilgisi olan herkes, güvenlik uzmanları ile bir araya gelme fırsatını yakalayacaklar.

Birbirinden ilginç konuların yer alacağı etkinlikte; kurumlarda web güvenliği anlayışına yaklaşımlar, uygulamalarda ve sunucularda katmanlı güvenliğin önemi, programlama dilleri ve çatıları için güvenlik modülü geliştirme, yaygın olarak kullanılan PHP dili/çatısı için güvenli kodlama teknikleri ve web 2.0 güvenliğinde önemli yer tutan JavaScript dili gibi bir çok konuya değinilecektir. Kayıtlar salon kapasitesi ile sınırlı olacağı için bir an önce kayıt olmayı unutmayın. Etkinliğe bilişim ve İnternet güvenliğine meraklı olan herkesi bekliyoruz.

Tarih : 26 Kasım 2007
Kayıt : http://www.webguvenligi.org/izmir/kayit.php
Yer : Ege Üniversitesi, Uluslararası bilgisayar Enstitüsü, Bornova, İzmir (Kroki)

Detaylar: http://www.webguvenligi.org/?page_id=86

Bu etkinliğe
katılacak olan Zoque üyeleriyle buluşmak, tanışmak isterim. Olabilir mi sizce? Olursa kimler katılır?

Web Sunucu Güvenliği!

Web Sunucu Güvenliği!

Günümüzde web, güncel ve doğru bilgiyi insanlara ulaştırmak için en kolay ve en etkin yöntem olarak karşımıza çıkmakta. Web sunucuları ve sundukları site içeriği, kurumların vitrini ve prestiji haline gelmiştir. Web sitesi saldırıları her geçen gün artmaktadır. Bu artışın asıl nedeni, web sitesi güvenliğinin yeterince ciddiye alınmamasıdır. Web siteleri hızlı bir şekilde hazırlanıp sunulmaktadır. Özellikle forum, hazır web portal yazılımları; dinamik içerik sağlamak için veritabanı desteği sağlayan uygulama kodları (php, asp, jsp, cgi … vb) web sitesinin en zayıf halkalarını oluşturmaktadır. Bu sitelerin hazırlanırken hiçbir güvenlik kontrolünün yapılmadığını, kodlarda kullanıcıdan girdi alınan kısımlarda, alınan verinin hiç kontrol edilmediğini gözlemliyoruz. Daha detaylı bilgi için: Neden web sitesi güvenliği?
Büyük kurumsal ağlarda, sunucuların ve üzerlerinde çalışan uygulamaların sayısının artması ile sorunun arttığı gözlemlenmektedir. Bu tür sistemlerde en büyük sorun, bu büyük ağlardaki hangi sistemin üzerinde ne çalıştığının tam olarak bilinmemesidir. Bu büyük ağlarda, sunucuların hepsinin zamanında yamaların uygulanması, log’ların takip edilmesi, uygulamaların kontrol edilmesi her zaman mümkün olamamaktadır. Bu sunucuların farklı kişiler tarafından yönetildiği durumlarda, idari sorunlar da olabilmektedir.

Bu sitede, web sunucularının güvenliğinin sağlanması için yapılması gerekenler anlatılacaktır. Ayrıntılı bilgiler düzenli olarak eklenecektir. Bir sunucuda web güvenliği aşamaları:

  • Sunucu makinasının güvenliğinin sağlanması - Detaylar için tıklayınız ...

  • Sunucu üzerinde çalışan web sunucu yazılımının güvenliğinin sağlanması:
    Apache Sunucu Güvenliği
    IIS Sunucu Güvenliği

  • Web sunucusu üzerinde çalışan platformların güvenliğinin sağlanması
    PhpBB ve Joomla gibi hazır platformların güvenliği
    Veri girişi yapılan formların güvenliği
    Geliştirilen özel yazılımların güvenliğinin sağlanması

Ağ Seviyesinde Güvenlik
Ağda ise web güvenliği duvarı, saldırı saptama/engelleme, zafiyet saptama gibi gelişmiş sistemlerle saldırılar saptanmaya ve engellenmeye çalışılabilir. Bu konuda önerilen sistemin belli başlı özellikleri için tıklayınız.

Web Yazılımları Geliştirirken Dikkat Edilmesi Gerekenler:
Bu sayfadan web üzerinden çalışacak yazılımları geliştirecek yazılımcılar için bilgiler sunulacaktır. Detaylar için tıklayınız ...

İstemci Makinalarında Güvenlik

Kullanıcıların makinalarındaki browser'ların da güvenliğinin sağlanması gerekmektedir.

Web güvenliği

İnternet öncesinde güvenlik yazılım geliştirirken önem verilen bir konu değildi. İnternetin yayılması ile bilgisayarlar ve uygulamalar arası veri alışverişi arttı. Uygulamalar kaynaklarını, tanımlı kullanıcılara doğru şekilde iletebilmek üzere yazılmaya başlandı. Kullanıcı yönetimi çok daha önemli bir hale geldi.

Üç bölüm olarak hazırlamayı düşündüğüm ASP.NET uygulamalarında güvenlik konusunu incelemeye çalışacağımız ASP.NET Güvenlik dizisinde şu konulara değineceğiz :

  • IIS authentication metodları
  • ASP.NET authentication methodları ve authorization
  • Genel olarak web güvenliği ile ilgili programlama standartları

ASP.NET’te güvenlik genel olarak Şekil - 1 deki gibi iki aşamaya ayrılır. İlk aşamada, web sunucuya gelen HTTP çağrısının IIS tarafından karşılanır. IIS çağrıyı, web uygulamasının güvenlik ayarlarına göre kabul eder veya reddeder.
Eğer IIS çağrıyı kabul ederse ikinci aşamaya geçilir. Çağrı ASP.NET tarafından değerlendirilir. Bu iki aşama tamamen birbirinden ayrı çalışır.
Eğer IIS çağrıyı reddeder ise HTTP 401 hatası alırız. Bu makalede Şekil - 1’in ilk aşaması olan IIS kapsamındaki güvenlik ayarlarından bahsetmeye çalışacağız.


Şekil - 1. Kuşbakışı ASP.NET uygulamalarında güvenlik

Şimdi ASP.NET uygulamalarında güvenliği sağlamak için kullandığımız üç temel fonksiyonu tanımlayalım :

Authentication
Basitçe, kullanıcının, olduğunu söylediği kişi olup olmadığının kontrolüdür. Sıkı güvenlik önlemleri olan bir bina düşünelim. Binaya giriş yapabilmemiz için bina için tanımlı güvenlik sisteminde bir hesabımız olmalı. Ve giriş yaparken bir kimlik ile bu hesabımızı doğrulamamız gerekir. Sahip olduğumuz hesabı doğrulama işlemine authentication diyoruz.

Authorization
Sisteme giriş yapan kullanıcının istekte bulunduğu kaynağa erişim hakkı olup olmadığının kontrol edilmesine ise authorization diyoruz. Bina örneğimize dönersek, kimliğimizi gösterip binaya giriş yaptık. Şimdi, binanın bilgi işlem bölümüne girmek istiyoruz. Bilgi işlem bölümü kapısında bu bölüme girmek için yetkimiz olup olmadığı kontrol ediliyor. Eğer yetkimiz var ise bölüme girebiliyoruz. Yok ise bina içerisindeki başka kapıları deniyoruz. Bilgi işlem bölümü bizim için kaynak oluyor ve kaynağa erişimimizi sağlayabilmek için yeterli izinlere sahip olmamız gerekiyor.

Impersonation
Sisteme giriş yapan kullanıcının bir başkasıymış gibi yetkilendirilmesi fonksiyonuna impersonation denir. Binaya girerken kimliğimiz olmadığını söyledik ve ziyaretçi kartı aldık. İşte bu durumda impersonation yapmış olduk ve "ziyaretçi" kullanıcısının hakları ile sisteme giriş yapmış olduk.
ASP.NET uygulamalarında impersonation inaktiftir. ASP.NET uygulamamızda impersonation’ı aktif hale getirmek için web.config dosyamıza aşağıdaki tagi ekleyebiliriz :

Temel güvenlik fonksiyonlarımızı inceledikten sonra IIS authentication çeşitlerini incelemeye çalışalım. IIS güvenlik ayarları, IIS’te web uygulamamızı seçtikten sonra, sağ tıklayıp özelliklerine gözattığımızda dizin güvenliği tabının altında yeralır.


Şekil - 2. IIS web uygulaması güvenlik ayarları

Bu penceredeki authentication kontrolü olarak geçen düğme IIS authentication metodlarını ayarlamamızı sağlayan pencereyi açar.


Şekil - 3. IIS web uygulaması authentication ayarları

Şimdi bu pencerede gördüğünüz tüm authentication metodlarını incelemeye çalışalım.

Anonymous Erişim
IIS tarafında hiçbir authentication işleminin yapılmadığı moddur. Sunucudan istekte bulunan tüm kullanıcılara erişim açıktır. Anounymoun erişim metodunda IIS’te hiçbir authentication işlemi yapılmaz fakat tüm gelen çağrılar bir kimlik altındadır. IUSR_MakinaAdı kullanıcısı az yetkiye sahip bir kullanıcıdır ve anounymous erişim aktif ise web uygulamamıza iletilen kimliktir.

Şimdi yapacağımız basit uygulama ile uygulamamıza hangi kullanıcı ve şifre ile bağlandığımızı görmeye çalışalım. Aşağıda sunucu değişkenlerinden mevcut authentication tipini ve kullanıcı şifresini alıyoruz. Mevcut kullanıcı adını ise HTTP bağlamından elde ediyoruz. Mevcut kullanıcı adını sunucu değişkenlerinden de elde edebiliriz. Son olarakta ASP.NET Worker Process’inin hangi kimlik altında çalıştığını elde ediyoruz. Bu bilgileri uygulamamızda bir sayfaya yazdırarak authentication tiplerini ve aldığımız kullanıcı hesaplarını yorumlayalım.

private void Page_Load(object sender, System.EventArgs e)
{
Response.Write("Authentication Tipi : " + Request.ServerVariables["AUTH_TYPE"] + "
");
Response.Write("Mevcut Sistem Kullanıcı : " + HttpContext.Current.User.Identity.Name + "
");
Response.Write("Mevcut ASP.NET kullanıcısı : " + WindowsIdentity.GetCurrent().Name + "
");
Response.Write("Şifre : " + Request.ServerVariables["AUTH_PASSWORD"]);
}

IIS dizin güvenliğinden Anonymous erişimi etkin hale getirirsek, mevcut HTTP bağlamımızın kullanıcısı boş olarak dönecektir. Fakat dikkat ederseniz ASP.NET kullanıcısı yani ASP.NET worker process’inin sahip olduğu kullanıcı benim bilgisayarımın ASPNET kullanıcısı hesabı. (Not : Windows XP ve Windows 2000 işletim sisteminde ASP.NET Worker Process ASPNET kimliği altında çalışır.
Windows Server 2003 işletim sisteminde ASP.NET Worker Process Network Service kimliği altında çalışır.)


Şekil - 4. Anonymous Erişim ve inaktif impersonation

Şimdi Web.config dosyamızdan impersonation’ı aktif hale getirirsek, aşağıdaki ekran ile karşılaşırız. Dikkat ederseniz tek değişen ASP.NET worker process’inin çalıştığı kimlik oldu. ASP.NET worker process’i IIS’ten kimlik bilgisini aldı ve o kullanıcının hakları ile çalışmaya başladı.


Şekil - 5. Anonymous Erişim ve aktif impersonation

Basic Authentication

Basic Authentication en basit ve en güvensiz authentication metodudur. Hemen her browser destekler. Uygulamamız için ayarlar isek, uygulamamızı çağırdığımız zaman standart Windows logon ekranı ile karşılaşırız. Bu ekrandan gireceğimiz kullanıcı adı ve şifre Base64 algoritmasına göre şifrelenir. Base64 algoritması, çözülebilecek (internetten örnek kodları bulabilirsiniz hatta kendiniz kolayca yazabilirsiniz) bir algoritmadır. Dolayısıyla girdiğiniz kullanıcı adı ve şifre internette açık olarak dolaşıyor olacaktır. Ağı dinleyen bir kişi kolayca kullanıcı hesap bilgilerinize erişebilir. Fakat SSL kullanarak basic authentication’ı daha güvenli hale getirebiliriz. SSL yaptığımız çağrıyı yada aldığımız verileri şifrelediği için çalınma riskini kaldırmış olur.


Şekil - 6. Basic Authentication logon ekranı


Şekil - 7. Basic authentication ile logon olduktan sonra uygulamamız.

Şekil - 7’de görüleceği üzere kullanıcının girdiği şifreye erişebiliyoruz. Buda Basic Authentication’ın diğer authentication tiplerine göre ayırıcı özelliklerinden biri.

Digest Authentication

Digest Authentication, Basic Authentication’a göre daha güvenli fakat daha kısıtlı kullanıma sahiptir. Internet Explorer 5.0 ve üstü ile çalışır. Kullanıcı adı ve şifresi networkte taşınmaz, onun yerine bir hash transfer edilir. Dolayısıyla bir network alan adı altındaki tüm kullanıcı şifreleri geri çevrilebilir bir algoritma ile Active Directory’de saklanır.


Integrated Windows Authentication

Integrated Windows Authentication’dada Digest Authentication gibi kullanıcı adı ve şifresi network’te dolaşmaz. İşletim sisteminde oturum açmış olan kullanıcı eğer windows authentication ile korunan web uygulamasına giriş yapmak isterse tekrar giriş ekranı ile karşılaşmaz. Tabi eğer kullanıcının oturum açtığı hesap yeterli izinlere sahip değil ise tekrar giriş ekranı ile kullanıcıdan sisteme giriş yapması istenir.


Şekil - 8. Integrated Windows Authentication

Şekil - 8’de görüldüğü üzere kullanıcının şifresine kodla ulaşamıyoruz. Ayrıca benim uygulamayı çalıştırırkenki Windows hesabım musty olduğundan Uygulamayı çalıştırırken hiçbir logon ekranı ile karşılaşmadım.


Şekil - 9. Integrated Windows Authentication ve impersonation aktif.

Şekil - 9’da da gördüğünüz gibi impersonation aktif edildiği zaman ASP.NET worker process’i IIS’ten authenticate edilen kullanıcı hesabı altında çalışmaya başlıyor.

Sonuç

Web uygulamalarının güvenliği dikkat edilmesi gereken en önemli konulardan biridir. Web sunucu altında verilecek denetimsiz bir izin, hem sizin hem de aynı sunucu üzerindeki diğer uygulamaları etkileyecek sonuçları doğurabilir.
Şimdi bir senaryo üzerinde yukarıda incelediğimiz tüm authentication metodlarının vereceği sonuçları incelemeye çalışalım. Web uygulamamız içerisinden sunucu diski üzerinde bir text dosya yaratıp yazmaya çalışalım. (Not : sunucu diskinin o dizininde gerekli haklar tanımlanmamış olduğunu yani default ayarların olduğunu kabul ediyoruz.)

  • Anounymous erişim aktif ise ASP.NET worker process ASPNET kimliği ile yazmaya çalıştığı için erişim engellendi hatası alırız.
  • Impersonation aktif yapılırsa IUSR_MakinaAdi kimliği ile yazma işlemi gerçekleştirdiğimizden yine erişim engellendi hatası alırız.
  • Şekil - 3’teki anounymous erişim hesabını işletim sisteminin yetkileri yüksek hesaplarından biri ile değiştirirsek ve impersonation’ı aktif hale getirirsek, disk üzerine yazabilmeye başlarız fakat çok tehlikeli bir durum yaratmış oluruz.Çünkü authentication yapılmamış tüm erişimlerin, bu yüksek yetkili hesap ile çalışmasını sağlamış oluruz.
  • Basic, Digest ve Integrated Windows Authentication’da da erişim engellendi hatası alırız. Çünkü halen ASP.NET worker process düşük yetkili ASPNET hesabı ile çalışıyor.
  • Basic, Digest ve Integrated Windows Authentication’da impersonation’ı aktif hale getirirsek uygulamamıza giriş yapan kullanıcının sunucu üzerindeki hakları disk üzerine yazmayı içeriyorsa hata almadan yazarız. Yazma işlemi için yeterli haklara sahip olmayan bir kullanıcı ile uygulamaya giriş yaparsak, bu işlemi gerçekleştirebilmek için daha yüksak haklara sahip bir kullanıcı hesabı ile giriş yapabilmemiz için yeniden giriş ekranı ile karşılaşırız.

Bu makalemde ASP.NET’te güvenlik konusuna giriş yaptık ve IIS authentication ayarlarını incelemeye çalıştık. Bir sonraki makalemde ASP.NET authentication metodlarını inceleyeceğiz.

Makalemde kullandığım uygulamayı indirmek için tıklayın..

Kaynaklar
  • O’Reilly - Programming ASP.NET
  • Wrox - Professional ASP.NET
  • Syngress - Hacking the Code: ASP.NET Web Application Security

Neden web güvenliği?

Neden web güvenliği?

Neden web güvenliği?
Günümüzde bir çok insan artık banka işlemlerini internet aracılığıyla yapıyor. Çok ciddi rakamlarla işlemler gerçekleştirilebiliyor. Ayrıca internet üzerinden alışveriş de oldukça yaygın durumda, gerek ülkemizde gerek dünyada. Bu yüzden güvenliğimize çok önem vermeliyiz özellikle de internete bağlıysak ve bu tip işlemler yapıyorsak…%100 güvenli sistem yoktur bu böyle kabul edilir ama biz önlemlerimizi artirarak ve bilinçli hareket ederek bu ihtimali en aza indirebiliriz. Bu sunumda, bunun için en temel korunma yöntemleri sizinle paylaşılmıştır.
Sadece işyerimizde değil, evimizdeki bilgisayarımızda da tehdit altındayız. Bu tehdit kimi zaman İnternet’teki bedava program sitesinden, kimi zaman hiç tanımadığınız birinden gelen e-mail vasıtasıyla gelebilir.
İnternet’e bağlanmak ve çalışmak, tropik denizde yüzmek gibidir. Dikkatsiz iseniz, köpekbalıklarına, zehirli canlılara karşı korunmasızsanız ve iyi yüzme bilmiyorsanız sürekli tehlike altındasınız demektir. Ama önlemleriniz tamamsa ve iyi bilgiliyseniz, İnternet’ in de, denizin de tadını çıkartırsınız.
Eğer internette daha güvenli kalmak istiyorsanız şu adımları uygulamalı, güvenlik duvarı, antivirüs..vb yazılımlarınızın, tarayıcınızın(browser) ve işletim sisteminizin(Windows, Linux) son güncellemelerini sürekli olarak yapmanız gerekmektedir:
Mutlaka bilgisayarınızda şu yazılımların olmasını sağlayın:
Güvenlik duvarı (Firewall)
Virüs engelleme yazılımı (Antivirüs)
Worm, truva atı..vb zararlı ajanları temizleyen bir yazılım (SpyBot, Ad-Aware)
Ayrıca şu temel kurallara da özellikle dikkat etmelisiniz:
-Tanımadığınız kişilerden gelen maillerdeki ekli dosyaları hiç açmadan hemen silin (özellikle word, excel, sunumlar, pdf, exe dosyaları).
İnternetten indirdiğiniz dosyaları mutlaka antivirüs yazılımınızla taratıp temiz olduğundan emin olun.
-Arkadaşınızdan veya başka birinden memory stick, Hard Disc, CD, DVD benzeri data aktarım cihazları kullanarak dosya alırken bu dosyaları antivirüs yazılımıyla taratın ve temiz olduğundan emin olun.
-Kişisel şifrelerinizi(banka hesapları, internet bankacılığı, web sitesi üyelikleri, alışveriş siteleri..vb) kesinlikle bilgisayarınız üzerinde tutmayınız, kağıda yazıp saklamayınız.

Cross-Site Request Forgery - XSRF - CSRF

XSS'i (Cross Site Scripting), web tarayıcısı gibi bir istemcinin bir web uygulamasına güveninden yararlanmak olarak düşünebiliriz. Peki bir uygulamanın bir kullanıcıya olan güveni de exploit edilebilir mi? Cross-Site Request Forgery (XSRF veya CSRF) bir web uygulamasının bir kullanıcıya uyguladığı güveni kullanarak tamamen legal (aslında bir anlamda zaten öyleler) görünen kimlik doğrulaması yapılmış istekler yapılması işlemidir. Tehlikesi açıkça ortadadır. XSRF kullanıcıların banka hesaplarından para transfer istekleri yapmaya zorlamada, kullanıcı bilgisi sıfırlamada, kötü amaçlı epostalar göndermede kullanılabilir. Maalesef, XSRF açıkları için kolay bir çözüm yok. Ve bu açıklar olduğunda, çok sayıda oluyorlar. Bu dokümanın amacı hem uygulama geliştiriclerini hemde güvenlik uzmanlarını bu tip saldırılar konusunda eğitmek ve açıkların nasıl kapatılacağı konusunda tavsiyeler sunmaktır.

XSRF nedir?
XSRF'nin en basit tanımı bir saldırganın, bir web sitesine, sitenin güvendiği bir kullanıcıdan yetkisiz komutlar göndermesidir. Bu tip saldırılara genelde "session riding" veya "hostile linking" saldırıları adı verilir çünkü sunucu ile halihazırda oturum açmış olan kullanıcıları kullanır. XSRF saldırı için web tarayıcısını kullanır ve kullanıcının yeni kullanmış olduğu varsayılan bir siteye bağlantı kuran bir script veya link içerir.
Sonrasında script görünüşte yetkili fakat kötü amaçlı işlemleri kullanıcı adına gerçekleştirir. Kimlik doğrulaması yapılmış kullanıcıların spesifik işlemleri onaylamalarını gerektirmeyen web uygulamaları XSRF saldırılarından etkilenebilir. Müşterilerinin tekrar kimlik doğrulaması işlemi yapmadan "hızlı" satın alma işlemi yapmalarına izin veren bir alışveriş sitesi düşünün. Veya MyFriends hesabına login olmuş bir kullanıcı düşünün. Aynı browser'ı kullanarak, MyFriends'den ayrılır ve tarayıcısının MyFriends sitesindeki AddToFriendList.cgi?friend=evildude sayfasına istek yapmasını sağlayan başka bir siteye girer. Farkında olmadan, ve izni olmadan, ziyaret ettiği web sitesi, onun MyFriends sitesinde arkadaş listesine evildude isimli birisini eklemesine yol açtı.

Exploit
XSRF'den başarılı olarak yararlanabilmek için, saldırganın yardımcı bir sistem kullanması gerekmektedir. Yardımcı sistem, web tarayıcınıza takip etmesi için XSRF linkini veren yerdir. Bir sistem hem kurban hem de yardımcı olabilir fakat önce web tarayıcısının alıp çalıştırabileceği birşeyler gönderilmesine (resim, script veya link) izin vermesi gerekir. Kısaca, yardımcı sitenin link gönderilmesine izin vermesi gerekir. Resim kullanılan XSRF saldırıları genelde kullanıcıların resim göndermesine izin veren fakat JavaScript'e izin vermeyen Internet forum'larından yapılır. Örneğin, saldırgan bir foruma aşağıdaki tag'lere sahip bir resim ekleme yapabilir:

Eğer kullanıcının bankaya logini aktifse ve web tarayıcısı forumda bu resime istek yaparsa, kötü amaçlı kişinin hesabına 10,000 dolarlık transfer isteği www.mybank.tld sitesine gönderilir. Aşağıdaki grafik bu durumu göstermektedir:

Hedef ek kimlik doğrulaması gerektirmeden kullanıcı işlemlerine izin veren uygulamadır.
Web tarayıcı yardımcı sitedeki kaynağa istek yaptığında neler olur? Önceki kod örneğimizdeki image tag örneğini kullanalım. Sayfaya istek yapıldığında, tarayıcı sayfada resim olduğunu bilmez. Dönülen cevaptaki HTML parse edildiğinde tarayıcı sayfada bir resim olduğunu bilir. Bu noktada, resim standart bir GET isteiği ile istenir. Problem burada yatmaktadır. Hedef site iş işten geçene kadar (ör. istek yapıldıktan sonra) isteğin bir resim için mi yoksa farklı bir kaynak içinmi olduğunu bilemez.

Bu konuyu açıklamada başka bir örnek daha verelim. Hayali bir e-ticaret sitesi düşünelim, spistore.com. Bir kullanıcı alışveriş sepetine bir ürün eklemek istediğinde, web tarayıcısı http://spistore.com/add
ToCart?item=5658 isteğini yapar ve buradaki 5658 eklemek istedikleri ürün id'si. Spistore.com ürünü kimin sepetine ekleyeceğini bilir çünkü tarayıcı kullanıcının çerez bilgisini de ürün ekleme isteği ile birlikte gönderir. Şimdi bir forum sitesi düşünelim, spiforum.com. Kötü amaçlı bir kullanıcı foruma

yazısını içeren bir mesaj gönderir. Bu mesajı birisi görüntülediğinde, kötü amaçlı img tag'ini içeren HTML, tarayıcıları tarafından yorumlanır. Tarayıcı img'yi gördüğünde
http://spistore.com/addToCart?item=5658
URL'sine istek yapar. spiforum.com'daki bu mesajı okuyan ve spistore.com da oturumu açık olan tüm kullanıcıların alış veriş sepetine 5658 nolu ürün eklenmiş olur.

XSRF ve XSS
XSRF ve XSS birbiri ile ilişkili açıklardır ve uygulamanızı hangilerinin etkilediğini belirlemek zor olabilir. Eğer bir uygulama XSS den etkileniyorsa, aynı zamanda XSRF'den de etkileniyordur çünkü XSRF bir XSS açığını kullanabilir. Fakat XSRF'ten etkileniyor olan bir uygulama XSS den etkilenmiyor olabilir. Aşağıdaki grafikte de görülebileceği gibi, XSS'i XSRF'nin bir alt kümesi olarak düşünebilirsiniz:

Bu iki saldırı şeklindeki ana fark saldırının nasıl yapıldığıdır. XSS giriş doğrulamayı atlatma ile ve bir sayfaya direk olarak kod enjekte etme ile yapılır. XSRF zaten orada olanı kötüye kullanmak için yapılır..izin verilen sayfa elementlerini, CGI'ları direk olarak ek kimlik doğrulaması gerekmeden çalıştırarak.

XSS ve XSRF'deki esas problem XSS'in, XSRF açıklarının riskini artırmasıdır. Birlikte kullanıldığında birbirlerini çok iyi tamamlarlar. En büyük risk, birleştirildiklerinde, tarayıcı farklı web sitelerine gidebilir, tek bir siteyle sınırlı kalmaz. XSRF tek başına saldırganın HTTP cevabını okuyabilmesine izin vermediği için saldırının başarılı olup olmadığı bilinemez. Fakat, XSS ile birleştirildiğinde, saldırgan sonuçları kendi seçtiği bir yere yönlendirebilir ve saldırının başarılı olup olmadığını anında görebilir.

Önleme
XSRF'i fixlemek XSS'i, hatta SQL Injectioni'ı fixlemekten daha zor olabilir. Çünkü kötü amaçlı isteği kurban gönderdiğinde, isteğin saldırı olup olmadığını anlamak zor olabilir. XSRF için alınan önlemler, eğer XSS açıkları varsa etkisiz olabilir. XSRF'i engellemek demek aynı zamanda XSS saldırılarını da engellemek demektir. Giriş filtreleme XSRF saldırılarını engellemese de XSS saldırılarını önlemek için mutlaka yapılmalıdır. Giriş filtreleme, kaynağı neresi olursa olsun, uygulama tarafından kabul edilen verilere uygulanmalıdır.

XSRF önleme genelde her web uygulaması özelliğinin ve form'unun tekrar kodlanmasını gerektirir. anti-XSRF token'ları kullanarak veya CAPTCHA implemente ederek XSRF saldırılarını önleyebilirsiniz. İmplementasyonu daha kolay fakat çok etkili olmayan, yine de hiç olmamasından iyi, başka metodlar da var. Birden fazla metodun kombinasyonunun kullanılması genelde tavsiye edilmektedir. Aşağıda her bir metod anlatılmaktadır:

Yardımcı
Kullanıcı tarafından gelebilecek tüm girişlerin filtrelenmesi gerekir. Bunun için aşağıdakileri yapın:
* Filtrelemede black list yerine white list metodunu kullanın. White list metodu, kötü olan içerikleri bloklamak yerine iyi olan girişleri kabul etme işlemidir. Örneğin Türkiyedeki bir telefon numarası her zaman (alan kodu ile birlikte) 10 rakam olmalıdır; telefon numarasına white list uygulamak demek sadece 10 ader rakam kabul etmek, başka birşeyi kabul etmemek demektir.
* Kullanıcı tarafından sağlanan tüm verileri, tarayıcılarının yorumlayabileceği bir formatta gönderilmesini engelleyecek şekilde kodlayın. Örneğin, küçüktür işareti < < olarak (veya URL'de %3c olarak) kodlanmalı.
* (programlama sitelerinden indirilen veya programlama örneklerinden alınan) Üçüncü parti kodları kendi web uygulamanızda (ne kadar güvenli olup olmadığını anlamadan) kullanmayın.

Kurban
Anti_XSRF Nonce Token
XSRF'i önlemede hiçbir metod kesin değil fakat anti_XSRF nonce token'ları kullanmak riskin büyük bir bölümünü yokeder. Teoride, geçerli bir token saldırgan tarafından tahmin edilebilir, fakat bu gerçekte kolay bir işlem değildir. Dahası, bu metod günümüzde XSRF saldırılarını engellemede en etkili metoddur. Kullanıcı login olduktan sonra bir "giz" yaratarak kullanıcının doğru olup olmadığını kontrol edebilirsiniz. Kullanıcı login olduktan sonra gizli bir hash veya token yaratıp sunucu-tarafı oturumunda depola ve bunu her link ve form'a dahil et. Birbirini takip eden her http isteği bunu içermeli, aksi takdirde kabul edilmemeli ve oturum geçersiz kılınmalı. Eğer XSS açığı varsa "Giz" oturum id'si ile aynı olmamalı. Token'ı herhangi bir oturum değişkeni gibi oluştur. Basit bir koşul ifadesi doğrulanabilir. Ayrıca etkisini artırmak için kısa bir zaman dilimine kısıtlanabilir. Bu değişiklik saldırganın XSRF saldırısında geçerli token kullanmasını gerektirir. Kullanıcı token'ı oturumda depolandığı için, saldırganın bu kurbanına özel token'ı kullanması gerekecektir.

Bunu PHPi'de yapılışı ile ilgili bir örnek verelim. Bu futbol maçı biletleri sipariş edilebilen bir web uygulaması örneği:
session_start();
$token = md5(uniqid(rand(),TRUE));
$_SESSION['token'] = $token;
$_SESSION['token_time'] = time();
?>


" />


Item:


Number:



Token herhangi bir oturum değişkeni gibi yaratılmalı.
if (!isset($_SESSION['token']))
{
$_SESSION['token'] = md5(uniqid(rand(), TRUE));
}
?>

Token'ı basit bir koşul ifadesi ile kontrol edin:
if ($_POST['token'] == $_SESSION['token'])
{
/* Valid Token */
}
?>

Token'ın geçerliliğini belirli bir zaman periyoduna kısıtlamak, örneğin dört dakika, güvenliği artıracaktır:
$token_age = time() - $_SESSION['token_time'];
if ($token_age <= 240)
{
/* Less than four minutes has passed. */
}
?>

CAPTCHA
CAPTCHA implemente etmekde XSRF saldırılarını engelleyebilir. CAPTCHA (Completely Automated Public Turing test to tell Computers and Humans Apart) basitçe kullanıcının karışık fakat okunabilir harf (veya harf rakam kombinasyonu) içeren resimde gösterilenleri girmesini gerektirir. Burdaki fikir bilgisayarın grafikte gizli olan kelimeyi bulamayacağı ve insanların kolaylıkla ayırtedebileceğidir. CAPTCHA kullanımı, kullanıcının spesifik işlemler öncesi resimdeki bilgiyi girmesi ile olur. İşleme devam için otomatik bir script'in yaratılması çok zor olsa da bunu aşma konusunda araştırmalar yapılıyor. Eğer bu metodu kullanmaya karar verirseniz güçlü bir CAPTCHA kullanın. Güçlü bir CAPTCHA inşa etmek zor olabilir. Ek olarak, resimlerin bilgisayar tarafından okunamadığına emin olmak için, geliştiricilerin, CAPTCHA'nın script seviyesinde atlatılamayacağına emin olması gerekir. Aynı CAPTCHA birden fazla mı kullanılıyor? uygulamanın tekrar-oynatma (replay) saldırısından etkilenmesine yol açarmı? Ya da CAPTCHA ya geçirilen düz yazı cevap web formunun bir parçasımı? Bunlar düşünülmesi gereken problemler.

Diğer Çözümler
Daha az zaman ve efor gerektiren (fakat daha az etkili olan) diğer çözümlere gelelim. Çoğunlukla gizleme ile güvenlik (security through obscurity) den oluşurlar. Bu da saldırganın açıktan yararlanmasında ek bilgi gerektirir. Fakat, tekrar uyaralım, uygulamanız uzman bir saldırgana bu şekilde karşı koyamaz.

Yönlendirme
XSRF saldırılarını HTTP isteğinin yetkili bir kaynaktan gelip gelmediğini kontrol ederek ve yönlendirme kullanarak önleyebilirsiniz. Eğer Referer başlığı yoksa, veya işlemi gerçekleştirmesi gerekmeyen bir sayfa veya site içeriyorsa, yönlendirme kullanıcıyı başka bir sayfaya yönlendirerek ek işlem yapılmasını engelleyebilir.

if ($_SERVER['HTTP_REFERER'] != ‘http://www.victim.tld/transfer.html' )
{
header("Location: http://www.victim.tld/transfer.html");
exit;
}
?>

URL Rewrite
Form-tabanlı kimlik doprulama yaparken diğer bir opsiyon da cookie yerine URL rewrite (özellikle bu opsiyon uygulama sunucusu tarafından transparan olarak yapılabiliyorsa) kullanımıdır. Oturum tanımlayıcısını her URL'ye dahil edildiğinde, bu tanımlayıcı arka arkaya yapılan sayfa isteklerinde ayrıştırılıp oturum bilgisini tanımakta kullanılabilir. Fakat çoğu uygulamada bunun uygulanabilmesi büyük bir çalışma gerektirebilmektedir.

Get yerine Post kullanımı
uygulamanın objeleri yaratma, değiştirme ve silme gibi durum değişiklikleri için GET yerine POST kullanımına zorlama yapılabilir. Hem HTTP GET, hem de HTTP POST kullanan uygulamalar XSRF açıklarından etkilense de, HTTP GET kullanarak saldırıyı gerçekleştirmek çok daha kolaydır. POST kullanımı resim tag'leri örneğimizdeki saldırıyı etkisiz kılar ve uygulama içerisinde resim link'lerinin paylaşılabilmesine izin verir. Ayrıca bunu implemente etmek çok kolaydır. Ayrıca saldırganların başka hedef aramasına yol açacak kadar caydırıcı olabilir. Fakat yine de çok bilgili bir saldırgan JavaScript kullanarak POST isteklerinden de bu saldırıları yapabilir.

Oturum tanımlayıcılarının gizli form alanları olarak geçirmek
Formlarda hidden alanlarında oturum tanımlayıcılarını kullanabilirsiniz. Bu bilgi web sayfasında görülmez fakat diğer alanlarla birlikte otomatik olarak gönderilir. Gizli form alanlarında oturum tanımlayıcılarını geçirmek, bir sayfadan diğerine geçişte resim linkleri yazı linkleri kullanımından mahrum bırakır, bu sebeple bu pek kullanışlı değil. Ayrıca HIDDEN form alanı değeri web sayfasında görünmese de tarayıcının kaynak görüntüleme seçeneği ile kolayca görülebilir. Bunun içinde gizli veri kriptolanarak sadece gerektiğinde dekriptolanabilir.