30 Mayıs 2016 Pazartesi

WCF Service Ping Application


Yayına aldığım Wcf Servisinin ayakta olup olmadığını kontrol etmek amaçlı bir uygulama ihtiyacı duydum. En basit yoldan nasıl yapabiliriz sorusunu sorguladım ve klasik bir yöntem geldi aklıma.

Wcf Servisini kontrol etmek için öncelikle , IsAlive veya Control isimli bir methodu servise Get request olacak şekilde tanımlıyoruz. Daha sonra bir Console App yardımıyla 20 dk ya bir çalışacak şekilde  control - ping işlemini kodluyoruz.

Eğer aklınıza daha farklı bir yöntem gelirse yeşillendirin lütfen.Bu projede servis hataları handle ederek kendi mail adresinize mail gönderme ve farklı metodlar da geliştirebilirsiniz. Benim yazmış olduğum uygulamanın kodlarını ve github proje linkini sizlerle paylaşıyorum.



İlgili Örnek Proje


Artık blog üzerinden yazıyla aktardığım teknik , çözüm ve yolları github üzerinde Mvc Sample Project üzerinde toplayacağım. Wcf Service Ping örneğinide bu proje üzerinden inceleyebilirsiniz ;

Github : Mvc Sample Project


17 Mayıs 2016 Salı

Asp.Net Mvc Bundle Kullanımı



Asp.Net Mvc de style ve javascript referanslarını eklemenin ve yönetimin en kolay olduğu yollardan birisi olan Bundle & Minification tekniğini ele alıyoruz.

Bundle Nedir


Öncelikle Bundle dediğimiz tekniği biraz anlamamız gerek. Web projelerimize bir style veya javascript referansı eklerken her sayfaya bunları tek tek <script> veya <style> etiketleriyle ekliyoruz.Fakat bu çok pratik değil ve yeni bir dosya eklendiğinde yönetimi zor.

Bunun için yeni bir bundle oluşturuyoruz. Örnek olarak "bundleCss" isimli oluşturduğumuz yığın içerisine örnek olarak 10 tane farklı css referans (path) ekliyoruz. Daha sonra view içerisinde Styles.Render("bundleCss") diyerek bizim eklediğimiz 10 dosyayı tek bir yerden çağırarak süper olayı tamamlıyoruz. (merak etmeyin örnek aşağıda)

Avantajları


  • En önemli özelliği performansa etkisi. Siz normal bir sayfa açılışında 10 farklı js dosyası için 10 farklı request işlemi gerçekleştirirken bundle tekniği ile dosyalar "yığın" haline geliyor ve tek bir dosya olarak geriye döndürülüyor. 1 request işlemi gerçekleşiyor.
  • Yine performansa diğer bir etki olarak bundle edilen tüm dosyaların minification işlemine tabii tutulması.Yani sıkıştırılmış ve boyutu düşürülmüş bir biçimde geriye döndürülüyor.
  • En başta yönetimi kolay ve esnek.
  • Bir çok bundle oluşturma.

Bundle Örnek


  • Öncelikle App_Start klasörü içerisinde BundleConfig.cs dosyasını oluşturalım.
  • Oluşturduktan sonra gerekli RegisterBundles methodunu ekliyoruz.Bu method üzerinden tüm işlemlerimizi gerçekleştireceğiz.
  • Yukarıda koda dikkat ederseniz font-awesome.css referansını ekleme şeklim farklı.Bunun sebebi font-awesome'un kullandığı font dosyaları var ve bu dosyaların yolları font-awesome.css ile aynı yerde olduğu için yolu (path) ona göre belirtilmiştir. Fakat biz bundle kullandığımızda path değişeceği için bunu CssRewriteUrlTransform() ile urleri tekrar yazmasını zorluyoruz.
  • En son satır Bundle'a eklenen dosyaların geriye sıkıştırılmış ve boyutu düşürülmüş bir şekilde tek dosya olarak dönebilmesi için EnableOptimizations=true dememiz gerekmekte.
  • Bundle tanımlamaları bittikten sonra View tarafında render etmek ve global.asax dosyasında register işlemi yapacağız.


Bundle Örnek Proje


Artık blog üzerinden yazıyla aktardığım teknik , çözüm ve yolları github üzerinde Mvc Sample Project üzerinde toplayacağım. Bundle örneğinide bu proje üzerinden inceleyebilirsiniz ;

Github : Mvc Sample Project


25 Mart 2016 Cuma

Jquery ile Geocomplate Textbox

geocomplate textbox



Autocomplate veya Geocomplate diye tanımlanan textbox olayımız ; adresinizi yazdığınıda bastığınız haflere göre dinamik bir şekilde filtreleyerek önünüze sonuçların gelmesidir. Bunun bir çok farklı çeşidi ve kullanım alanı mevcut. Fakat bu konuda biz yazılımcılara google her zamanki gibi bir kolaylık sağlıyor ve Place kütüphanesini direkt projemize refere ettiğimiz zaman çok kolay bir şekilde bu istediğimizi yapabiliyoruz.

Bu Geocomplate Textbox kullanım alanları genellikle form ve foursquare gibi adrese dayalı bir uygulamanız varsa gerekmektedir.Aşağıdaki örnek kodu ister Asp.Net MVC ister düz Html sayfalarınızda direkt kullanarak sonuç alabilirsiniz.

Ekleme : Bu tarz place kütüphanesi ile kullanmak istemeyip eğer kendi döndüreceğiniz bir json sonucuna göre Asp.net Mvc projesinde Autocomplate Textbox kullanmak isterseniz , bir JsonResult döndüren Action oluşturup bunu jquery autocomplate kütüphanesinden yararlanarak oluşturduğunuz textbox nesnesine bağlayarak yapabilirsiniz.Bir sonraki örneği bu şekilde yapabiliriz.



Sağlıcakla

16 Şubat 2016 Salı

Asp.Net Web Güvenliği


Asp.Net ve diğer tüm web uygulamaların da dikkat etmemiz gereken bazı güvenlik maddeleri ve saldırı çeşitleri mevcut. Dilden bağımsız olarak genellikle web mantığının olduğu tüm site ve uygulamalardan bu tür açık ve saldırılara gebedir. Her dilin yöntemi ve savunma mekanizması aynı olmamakla birlikte saldırı çeşitleri mantık olarak hep aynıdır.

Önceki blog yazılarımda  fikir vermesi ve daha güvenli web uygulamaları geliştirebilmemiz için popüler saldırı çeşitlerini paylaşarak çözüm yollarını masaya yatırmıştım. Şimdi o yazılara tek bir yazıdan ulaşılabilmesi için bir index görevi görecek bu yazıyı yayınlıyorum.

Asp.Net Web Güvenliği Yazı Dizisi (güncellenecektir)

AspNet Web Güvenliği : SQL Injection
AspNet Web Güvenliği : XSS (Cross Site Scripting)
AspNet Web Güvenliği : CSRF Attack
AspNet Web Güvenliği : Insecure Direct Object References


Ekstra

  • SSL güvenliği için zamanında ferruh mavituna 'nın yazmış olduğu Güvenli SSL Kullanımı yazısı okunuz.
  • Sitenizi tüm açıklara karşı önlemlerinizi aldığınızı düşünüyorsunuz.Peki emin misiniz ? Emin olabilmek için aşağıda vereceğim online site tarama hizmetlerinden yararlanabilirsiniz. Eğer profesyonel bir web uygulaması geliştiriyorsanız kesinlikle yaptırmak gerekir.
    https://www.netsparker.com/
    http://www.acunetix.com/
    https://detectify.com/
  • Benim yazıya almadığım fakat incelemeniz gereken diğer konu başlıkları şöyle olabilir ; Cookie güvenliği , WCF güvenliği , Owasp top 10



10 Şubat 2016 Çarşamba

Asp.Net Web Güvenliği : XSS Attacks

XSS (Cross Site Scripting)

XSS pek önemsenmeyen fakat başınıza büyük sıkıntılar açabilecek bir açıktır.Genellikle querystring üzerinden veya site üzerinde yer alan inputlar üzerinden gerçekleştirilir.Sql Injection ve XSS birbirleriyle ilişkilidir. Herhangi birinde bir eksiklik var ise her ikisine açık doğurmuş oluruz.

Kısa bir örnek olarak, kullanıcı adı ve parola yer alan bir kullanıcı formunda XSS saldırıya ön planda tutmadan formu hazırladıysanız herhangi bir input değerine javascript kodu yazılabilir ve Sql Injection saldırısı denenebilir.Bakınız : Asp.Net Web Güvenliği : Sql Injection


XSS saldırılarından korunmak için başlıca yöntemler ;
  • Asp.Net RequestValidation
  • Output Encoding
  • Browser XSS Defence
  • ORM (Entity Framework , Hibernate , vb)

Asp.Net Request Validation

Mvc projelerimizde varsayılan olarak Action methoduna gönderilen değerlerin html veya script kodu içerip içermediğni Asp.Net bizim yerimize otomatik olarak denetliyor ve request atılmasını engelleyerek HttpRequestValidationException fırlatıyor. Bu native özellik genellikle düzgün bir şekilde çalışarak sitelerimizi korumayı başarıyor. Fakat bazı durumlarda özellikle html veya script kodu girişlerine izin vermek isteyebilirsiniz. Haber eklerken özellikle cms sistemlerinde.Bunun için manuel olarak validate işlemini Action bazında kapatmanız gerekir.Örnekler ;


Output Encoding

XSS güvenliği yaklaşımı sadece dışarıdan girilen verilerin önlemini almak değil var olan bir veriyi dışarıya açarken de dikkatli olmamızı şart koşar.Yani ; herhangi bir link , css kodu , database verisi , statik veriyi siteye basmadan önce encoding işleminden geçirmeliyiz. Neden diye sorarsanız bir şekilde XSS açığından yararlanarak database içeriğin enjekte edilen zararlı kod Outpu Encoding ile engellenebilir.

Output Encoding yöntemini Mvc projelerimize aşağıdaki ana yöntemler ile uygulayabiliriz ;

  1. Encoding Output Values in Code
    HttpUtility.UrlEncode(str) ve HttpUtility.HtmlEncode(str) methodları yardımıyla döndürülecek veriyi back end tarafında encode yapabiliriz.
  2. AntiXssEncoder (Anti XSS Framework)
    Tüm site genelinde Encode işlemlerini AntiXSSEncoder kütüphanesi üzerinden gerçekleşmesini sağlayabilirsiniz.
En garanti yöntemler yukarıdaki yazdığım başlıklar.Gelin bu yöntemleri kod üzerinden görelim ; 


Browser XSS Defence

Asp.net Mvc projelerimizde web.config dosyasından küçük bir düzenleme yaparak istek yapan tarayıcının native Xss Defence özelliğini açmasını zorlayabiliriz. Genellikle tutarsız çalışan bir yöntem çünkü farklı tarayıcılar ve bu tarayıcılar her sayfayı farklı yorumlayabilirler.Her sitede her tarayıcı her durum için aynı tepkiyi vermeyecektir. Çok güvenli değil fakat kullanılabilir.

Web.config dosyasına şöyle bir düzenleme ile Browser XSS native defence özelliğini aktif edebiliriz ;

ORM

Son olarak database işlemlerimiz için genellikle ORM araçlarını kullanmaya dikkat edin.Ben Entity Framework ile çalışıyorum.Sql Injetion gibi saldırıları büyük ölçüde minimize edebilirsiniz.

8 Şubat 2016 Pazartesi

Asp.Net Web Güvenliği : CSRF Attacks


Web güvenliği serimizin başka bir konusu CSRF (Cross-Site Request Forgery) saldırısı ve savunma yöntemleri. MVC projelerimizde bu saldırıyı çok kolay bir şekilde dekarte edebiliyoruz.Hemen açıklamaya çalışayım.

Öncelikle CSRF nedir kabaca üzerinden geçelim. Saldırgan kişi , sitemiz üzerinden login oldu ve bir session oluşturdu. Saldırgan , aynı zamanda kendi hazırladığı bir site var ve bu site üzerinden bizim sitenin fonksiyonlarını ve servislerini çağırmaya çalışıyor (aynı form ve buton gibi). Session açtığı için güvensiz siteden çağrılan method sanki bizim sitenin üzerinden çağrılmış gibi işlem görecektir. Amacımız bunu engellemektir.

Mvc projelerimizde cshtml sayfalarımızda get ve post yaptığımız form nesnelerinde kullanmalıyız. HtmlHelper.AntiForgeryToken methodu yardımıyla aşağıdaki gibi kolayca form nesnemize ekliyoruz ;



Daha sonra Controller tarafında çağrılan Action üzerinde aşağıdaki gibi bir FilterAttribute ekliyoruz ;

İşte bu kadar . Bu şekilde CSRF saldırılarını önlemiş bulunmaktayız. Eğer Ajax ile kullanmaya çalışırsanız yukarıdaki yapı çalışmayacaktır. Aşağıdaki örneği inceleyiniz. Anti-Csrf Ajax;

3 Şubat 2016 Çarşamba

Asp.Net Web Güvenliği : SQL Injection


SQL Injection

Sql Injection genel olarak sorguları manipüle ederek database üzerinde CRUD işlemleri yapabilmek için izlenen saldırı çeşididir.Bu saldırıyı yapmak için izlenen yollar genellikle querystring üzerinden veya sitede yer alan herhangi bir input üzerinden olabilir.Asp.Net MVC projelerimizde aşağıda yer alan çözümleri uygulayarak kolay bir şekilde çözebiliriz.

Sql Injection korunma yöntemleri ise ;

  • ORM (Entity Framework , Hibernate)
  • XSS Defence
  • Data Validation


Bir örnek üzerinden açıklamaya çalışıp nasıl korunabiliriz bakalım ;

Özellikle herhangi bir Object Relational Mapping (ORM) aracı kullanmıyorsanız özellikle input veya querystring üzerinden gelen ifadeyi direkt sql sorgusuna dahil ediyorsanız çok büyük bir açığınız var demektir.

Entity Framework (EF) kullandığınız takdirde manuel bir sql sorgusu yazmayacağınız ve objeler üzerinden sorgulamalar yapacağınız için dışarıdan gelen herhangi bir Injection denemesi duvara çarpacaktır.

Aşağıda ki gibi bir formunuz var ve basit bir giriş işlemi ;

sql injection korunma

Gelen verileri ise aşağıdaki gibi bir şekilde işleme sokuyorsunuz.Dönen veri var ise giriş işlemi başarılı gibi düşünüyoruz ;

Password değeri istediğimiz şekilde gelirse hiç bir zaman sorun olmayacak.Fakat buna aşağıda ki gibi bir sql injection denemesi yapalım ;

sql injection korunma


Hoop sistemin içindesiniz. Sonda yer alan 1=1 true döndüreceği için önceki şartın artık bir anlamı kalmıyor ve login işlemi başarıyla sonlanarak Sql Injection gerçekleşiyor.

SQL Injection Korunma


  • Bu tarz saldırılara karşı savunma yapmak için başta Entity Framework ve Linq süper ikilisini projenizde kullanmaya gayret edin.EF ve Linq sizin yerinize bu saldırıları native olarak ekarte etmektedir.
  • Bir diğer husus ise Sql Injection ve XSS açığı birbiriyle ilişkilidir. Sql Injection saldırılarını önlemek için sitede yer alan XSS açıklarını kapatmak gerekir.Yazısı yakında.
  • Bir diğer madde ise Data Validation . Giren girdileri belli formatlara uygun olarak girmeye zorlayarak minimize edebilirsiniz.


Injection örneği Codebash üzerinden uyarlanarak alıntılanmıştır.