Kayıtlar

2016 tarihine ait yayınlar gösteriliyor

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 …

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.

TinymceDropzoneJsJquery
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ılabil…

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


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&…

Jquery ile Geocomplate Textbox

Resim
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 sonrak…

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 a…

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 RequestValidationOutput EncodingBrowser XSS DefenceORM (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 HttpRequestValidationExc…

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ş b…

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

Resim
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 DefenceData 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 gir…

Asp.Net Web Güvenliği : Insecure Direct Object References

Asp.Net MVC Web Güvenliği yazı dizisinin ilk bölümünü Insecure Direct Object References başlığına ayırdım. Bu yazı dizisinin amacı özellikle web uygulamalarında yer alan zafiyetlerini inceleyip çözüm yollarını paylaşacağım.

Insecure Direct Object References

Hemen anlaşılır bir özet geçmek gerekirse site üzerinde bir fotoğraf , bilgi , profil detayı gibi detayları görüntülemek için bir link gerekmektedir. Örnek linkimiz ; site/foto?name=ayşe eğer siz böyle bir yapı kurduysanız otomatik olarak başlığımızda ki zafiyete açık vermiş oluyorsunuz , çünkü deneme yanılma yöntemiyle (brute force) sisteminizde yer alan tüm fotoğrafları saldırgan kişi bilgisayarına indirebilir ve farklı amaçlar için kullanabilir.

Başka bir örnek verecek olursak site/profil?id=12 diyerek bir profile yönlendirme yapıyorsanız ve gerekli kontrolleri yapmadıysanız deneme yanılma yöntemiyle başka kişilerin profil bilgileri ele geçirilebilir.

Yukarıda yer alan örneklerde ki gibi açıkları minimize edebilmek için aşağıdak…

Asp.Net MVC ile Hava Durumu

Herhangi bir şehrin güncel hava durumu bilgisini sitemize basmak istiyoruz ne yapacağız ? Bugün ki örneğimiz bu konu hakkında.Peki nasıl ? Asp.Net Mvc ve OpenWeatherMap Api kullanarak basit bir şekilde çözeceğiz.

Öncelikle Open Weather Map hakkında kısa bir bilgi vereyim.Kendileri hava durumu bilgilerini ücretsiz bir şekilde biz geliştiricilere ve sitelere sağlamaktadırlar.Api den detaylı bilgileri çekebileceğiniz gibi gayet anlaşılabilir bir yapıdadır.Geçmişe ait verileri ve anlık verileri paylaşıyorlar.
Api servisini kullanmak için ücretsiz hesap açıyor ve Api Key alıyoruz.Servisleri çağrırken bu secret key ile istekte bulunacağız.Kayıt olmak için link

Güncel hava durumunu çekebilmemiz için link yapısı şu şekilde olmalıdır ;

http://api.openweathermap.org/data/2.5/weather?q=Ankara,TR&units=metric&appid=SECRET_KEY

Link yapısında dikkat etmemiz gereken şehir Ankara ülke kodu TR , metric formatında istiyoruz ve en son üyelikten sonra aldığımız keyi ekleyerek istek yapıyoruz.Eğer h…

HTML Tag Temizleme

Bir projede , gelen string değerin içinde yer alan html taglarını temizlemem gerekti.Bu işlemi yapabilmek için 2 farklı seçeneğimiz var.Birincisi uzun yöntem ile döngüyle dönerek şarta göre silme ikincisi regex ile tek satırda halletmek.Aşağıda her iki yöntemi paylaşacağım ki karşılaştırma yapılabilsin.

Html Tag Temizleme (Spagetti)


Html Tag Temizleme (Regex)