Veritabanında Nasıl Şifre Saklamalıyız – Hashing ve Salting

Standard

Merhabalar. Bu sefer biraz değişiklik yaparak kodu az, konusu bol, eğlenceli bir yazı yazmaya karar verdim. 🙂

Veritabanı bir yazılım veya bilgisayar mühendisinin öğrendiği en temel konulardandır, ama üniversitelerde verilen veritabanı derslerinde konunun her zaman için teorik kısmı ele alınır. Bu derslerde biz functional dependency’den girip 3NF – 4NF’ten çıkaduralım, pratik bilgi olmadan teorik bilginin pek de faydalı olmadığını ancak mezun olduktan sonra görebiliyoruz. Ki bu durum bile eğer ders doğru işleniyorsa geçerli; bende olduğu gibi grammar nazi hocanızdan bütün dönem boyunca yalnızca “tuition fee”nin ne demek olduğunu öğrenerek dersi geçiyorsanız durum daha da kötüleşiyor. 🙂

Fakat kullanıcı adının “Login” olması?

Bu eksik pratik bilgilerin en basit ve önemlilerinden biri ise, veritabanında şifrelerin nasıl saklanacağı. Bir veritabanı hacklendiğinde ilk hedef şifrelerdir ve açığa çıkmaları direk o sistemin çökmesine sebep olur, çünkü veritabanını hackleyen kişi istediği kullanıcının hesabına girerek hem bilgi çalabilir, hem de maddi – manevi zarara neden olabilir. Eğer internette kısa bir araştırma yaparsanız en büyük firmaların bile veritabanlarının hacklendiği haberlerine ulaşabilirsiniz, bkz. Adobe, Sony, Valve (Steam). Ki düşünün, eğer Valve veritabanındaki şifreleri doğru saklamayı bilmeseydi Steam’deki tüm hesaplar açığa çıkardı ve insanlar para vererek aldıkları oyunlarını kaybederdi (kredi kartı bilgileri kısmına girmiyorum bile).

Veritabanında şifre saklarken, yukarıda bahsettiğim pratik bilgi eksikliğine sahip olan bir mühendisin yapıp yapabileceği en büyük hata ise şifreleri plain text olarak (yani olduğu gibi) saklamaktır. Ya yanlış olduğu bilinmediği için, ya da “amaan yaa bir şey olmaz” diyerek (Türk mantığı :)) yapılan bu hata, aşağıdaki gibi doldurulmuş bir veritabanı ile karşılaştığında bir hackerın ağır alay konusu olmanıza sebep olabilir:

Peki hackerların gizli gizli Justin Bieber’ı sevdiğimizi öğrenmemeleri (ve kullanıcılarımızın hesaplarını ele geçirmemeleri) için ne yapmalıyız?

➤ b04f7cce31f09ac37aa764eca473f3ecb2cc025c3a0d6c839998497d8df4615e

Advertisements

Silverlight ile Veri Doğrulama – IDataErrorInfo

Standard

Kullanıcılar uygulamamıza veri girerken en çok dikkat etmemiz gereken şeylerden biri girilen verinin doğru olup olmadığını denetlemektir. Normalde bu doğrulamayı kendimiz teker teker girilen değerleri kontrol ederek gerçekleştiririz ve eğer girilen değerler doğru değilse bununla ilgili uyarıları ve/veya gerekli diğer işlemleri deyim yerindeyse “el ile” yaparız. Bu durum küçük miktarlarda veri girişinde sorun çıkarmasa da, eğer kullanıcıların çok miktarda veri girmesi gerekirse bir angarya haline gelerek gereksiz zaman ve enerji harcamamıza neden olabilir.

Bu tarz veri doğrulama işlemlerini TextBox yanına uyarıları içerecek olan görünmez TextBlock’lar koyup, veri her değiştiğinde kontrol ettikten sonra TextBlock’un görünürlüğünü ve TextBox’ın arkaplan rengini değiştirerek yapmaktansa, Silverlight uygulamamız içinde data binding ve IDataErrorInfo interface’ini kullanarak hem (aşağıdaki gibi) göze güzel gözüken bir şekilde, hem de daha kolay ve hızlı olarak gerçekleştirebiliriz. Bu yazımda, birlikte kullanıcı adı ve şifre kaydederken doğrulama yapan bir Silverlight uygulaması yazacağız.

➤ Devamını okuyun…

LINQ to SQL ile İleri Arama – PredicateBuilder

Standard

İleri arama (daha bilindik adı ile advanced search) kullanıcıların büyük miktarlardaki veriyi istedikleri şekilde filtrelemesini sağlar. Tipik bir ileri arama ekranı pek çok metin kutusu ve/veya liste bulundurur ve kullanıcılar bunların arasından istediklerini doldurup istediklerini boş bırakarak arama yaparlar. Bu yazımda birlikte bir veritabanından LINQ to SQL ile bu şekilde ileri arama yapabilen bir Silverlight uygulaması oluşturacağız.

Arkaplanında bir veritabanı olan uygulamamızda böyle bir ekran oluşturmak istediğimizde, ilk bakışta LINQ to SQL kullanarak “Select From Where” ile istediğimiz sonuca ulaşmamız gayet kolaymış gibi gelebilir. Ancak şimdi üzerinden gideceğimiz örneğe baktığımızda, bazı alanların boş bazılarının dolu olmasının işleri nasıl karıştırdığını ve sorgumuzun “Where” ifadesini dinamik olarak oluşturmamız gerektiğini göreceksiniz.

➤ Devamını okuyun…

Silverlight içinde Excel dosyası okuma

Standard

Excel dosyalarından veri okumak, özellikle iş uygulamalarında kullanıcılara kolaylık sağlayan ve zaman kazandıran bir özelliktir ve kullanıldığı yere göre uygulamamızı geliştirerek bir adım ileriye götürebilir. Büyük Excel dosyalarından istediğimiz verileri çekerek bu verileri görselleştirmek, birden çok Excel dosyasındaki verileri dinamik olarak karşılaştırmak ya da bir sisteme tek tek kullanıcı kaydetmektense kullanıcı bilgilerini bir Excel dosyasından çekerek toplu halde kaydetmek gibi çeşitli senaryolarda işimize yarayabilecek bu özelliği, bu yazımda birlikte bir Silverlight uygulaması içinde kullanacağız.

Öncelikle bir Excel dosyasının (.xlsx) yapısından bahsederek başlayalım. Bir .xlsx dosyası, aslında bir .zip ya da .rar dosyası gibi birden çok dosyayı içeren bir pakettir. Hatta .xlsx uzantısını .zip yapıp dosyayı açarsanız, aşağıdaki gibi içinde çeşitli klasörler ve dosyalar olduğunu görürsünüz. Verilerimiz, işte bu klasörlerin içindeki XML uzantılı dosyalarda tutulur. Eğer biraz araştırırsanız verilerin bu XML dosyaları içinde nasıl tutulduğunu öğrenebilir ve kendi .xlsx okuyucunuzu bile yazabilirsiniz. 🙂

➤ Devamını okuyun…

Uzun bir aradan sonra bloga devam

Standard

Merhabalar. En son yazımın tarihinden de göreceğiniz üzere yaklaşık 6 aydır bloga hiçbir yazı eklememiştim. Ancak okulun tamamen bitmesinin ve kendime gelmemin ardından, ve Microsoft Middle East and Africa’da başladığım stajın da yerine oturmasıyla, öğrendiğim pek çok şeyi blogumda paylaşmaya devam etmeye karar verdim. Blogumu yenilemeye kalkışarak geçirdiğim yaklaşık 1.5 ay sonucunda (nasıl bir Yazılım Mühendisliği yeteneği sergilediysem) görünüşü, tarzı ve daha pek çok şeyi içime sinmeyen görmekte olduğunuz hale ulaştım, ve daha fazla uğraşmak istemeyerek “Artık yazı yazmak istiyorum!” diye isyan ettim.

Şu aralar Silverlight ile ilgileniyorum, ve yazılarım bir süreliğine Silverlight ağırlıklı olacak. Daha sonra da Windows Azure ve Windows 8’e yöneleceğim. Hadi bakalım.