26 Ekim 2016 Çarşamba

C# SecureString Sınıfı



Github'da yer alan bir projeyi incelerken bugünkü blog yazısına konu çıkan SecureString sınıfının kullanıldığını gördüm. Daha önce hiç bir projede kullanmadım ve kullananı da görmedim açıkcası.

Ben de bu sınıfı araştırdıktan sonra aslında güvenlik ile ilgili önemli bir konu olduğunu gördüğüm için ilk defa duyacaklar için bir yazı yazmak istedim.

Secure String Class Ne Ola ?

Öncelikle siz bir String nesnesi yaratıp içine parola veya kredi kartı no gibi arz eden bilgiler verdiniz. Bu nesneyi gerekli yerlerde kullandınız ve işiniz bitti. Nesne şuan belleğin head alanında duruyor. Bir süre bu nesneyi kullanmadınız ve ünlü garbage collector (çöp toplayıcısı) herhangi bir zamanda gelecek , optimizasyon adına heap alanında ki string nesnesine ait referansı silecek. Fakat buradan silinmesi başka yerde referansı olmayacağı anlamına gelmiyor -burası önemli.

Üstte yazan temel senaryoda sıkıntılar var ! Birincisi Garbage Collector 'un ne zaman çalışacağı belli değil. İkincisi bu nesneler bilgisayar açık olduğu sürece bellekten tam olarak silinmeyecek. Ve bu durumda hacker arkadaşlarımızın bilgilere bir şekilde ulaşabileceği anlamına geliyor.

Secure String Class Kullanımı

Üstte yazan mantığı anladıysak şimdi Secure String bize ne avantaj sağlıyor ona bakalım. Şu işlemleri bizim için otomatik olarak yapacaktır ;

  • Şifreler (Encryption)
  • Belleğe Sabitler (garbage collector'un taşımasını engeller) (pinned in memory)
  • Salt Okunur Yapar (Read Only)
  • Bellekten Tamamen Silinebilir 

Ek olarak ; Sealed tanımlanmış bir class dır. Inheritance yapılamaz. System.Security namespace içerisindedir.

Kullanım Örneği


Yeni yazılarda görüşmek üzere , sağlıcakla

Kaynaklar

https://msdn.microsoft.com/tr-tr/library/system.security.securestring(v=vs.110).aspx
http://www.codeproject.com/Tips/549109/Working-with-SecureString

13 Ekim 2016 Perşembe

Asp.Net Tinymce Kurulum ve Image Browser


Web projelerinde kullanılan iki farklı popüler editör var. CKEditor ve Tinymce WYSIWYG Editor. Ben projelerimde öğrenebilirliğin kısa olması,kurulumu ve küçük boyutu gibi sebeplerle
 Tinymce editörünü tercih ediyorum.

Asp.net Mvc için gerekli kurulumlar ve plugin ekleme örneği yapacağız.Ücretsiz versiyonunda image browser ve upload için iyi bir plugin bulunmaması sıkıntı yarattığı için özellikle image upload eksikliğini gidermeye çalışacağım.Dropzone js kütüphanesini kullanarak sorunu aşacağız.

Öncelikle proje için gerekli 3 farklı kütüphaneye ihtiyacımız var.Bunları indirip projeye ekliyoruz.


Editörün çalışacağı index sayfasını oluşturarak,editörün çalışması için gerekli config kodlarını yazıyoruz.

Foto yükleme için ayrı bir ekran tasarlamamız gerekiyor. ImageFileBrowser adında sayfa oluşturup Dropzone kütüphanesini sayfaya ekleyerek ilerliyoruz.Kodlar aşağıda.


Notlar


  • ImageFileBrowser ekranına son yüklenen fotoların bir listesi tutularak galeri mantığı yapılabilir.
  • Fotoğraf seçildikten sonra asıl kayıt işlemini yapan SaveImageFile metodunu bilinçli boş bıraktım. Projeye göre farklı çözümler mevcut. Fakat dikkat edilmesi gereken fotonun konumunun url bilgisi döndürülmesi.
  • 3rd party bir upload kütüphanesi kullanılmadan da yapılabilir.


Örnek Proje


Artık blog üzerinden yazıyla aktardığım teknik , çözüm ve yolları github üzerinde Mvc Sample Project üzerinde toplayacağım. Asp.Net Mvc ile yapılan Tincymce kurulumu ve Image Browser örneğini bu proje üzerinden indirerek inceleyebilirsiniz ;

Github : Asp.Net Tinymce Kurulum ve Image Browser

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.