Yayınlar

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

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. Tinymce DropzoneJs Jquery 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

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 do

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 yapabili

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çı

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ı engelle

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

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 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 f

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 edebilme

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 ist

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)