Windows Azure Cloud Service Web.config Dosyası Şifreleme

Standard

Bir web servis için web.config dosyası gerekli yapılandırma ayarlarını içerir. Bu yapılandırma ayarlarından bazıları hassas bilgiler içerebilir, örneğin web servis bir veritabanına bağlanıyor ise bu veritabanı için gerekli bağlantı dizesi (connection string) web.config içerisinde plain text olarak durur ve veritabanının bulunduğu sunucu için gerekli kullanıcı adı ve şifreyi içerir. Bu durum tabi ki olası bir güvenlik açığıdır; eğer web servisi bir üçüncü parti sunucuda tutmayı planlıyorsak, ya da kaynak koduna bu bilgiye sahip olmasını istemediğiniz kişilerin erişmesi gerekiyorsa, ekstra bir güvenlik katmanı sağlamak için bu bilgiyi şifreleyebiliriz.

  <connectionStrings>
    <add name="DatabaseConnectionString" connectionString="Data Source=blablabla.database.windows.net;Initial Catalog=BlaBlaDB;User ID=kullaniciadi;Password=sifre"
      providerName="System.Data.SqlClient" />
  </connectionStrings>

.NET Framework, bilgilerimizin yukarıdaki gibi gözükmemesini sağlamak için “protected configuration” adı verilen bir özellik ile şifreleme imkanı sağlar ve bu şifrelemeyi DpapiProtectedConfigurationProvider veya RsaProtectedConfigurationProvider sınıflarını kullanarak gerçekleştirir. Ancak bu iki yöntemde de şifrelemenin web servisin bulunacağı sunucu üzerinde uygulanması gerekir, çünkü şifreleme için makineye özel bir anahtar değeri kullanılır ve bu durum da Azure üzerinde bu özelliği kullanamayacağımız anlamına gelir.

Azure üzerinde web.config dosyasını şifrelemek istiyorsak özel bir “protected configuration provider” kullanmamız gerekli. Bu yazımda, şifreleme için bir “.pfx” uzantılı sertifika ve Windows Azure Certificate Store kullanarak şifreleme yapan özel “Pkcs12 Protected Configuration Provider” ile Azure üzerindeki web servisimizin web.config dosyasını şifreleyeceğiz.

➤ Devamını okuyun…

Windows Store Uygulamalarında XML Serialization

Standard

Serialization, en genel haliyle bir veri yapısını ya da nesneyi saklanabilecek ya da taşınabilecek bir biçime dönüştürme işlemidir. Bu işlemin amacı genelde bir veri yapısını dosya içinde saklamak ya da ağ üzerinden bir başka konuma aktarabilmektir, ki bu sayede ardından deserialization işlemi uygulanarak nesneye istenilen zamanda ya da konumda ulaşılabilir.

Buna örnek olarak bir haber uygulamasını verebiliriz: Haberleri ilk açılışında internetten çekip, ardından serialization işlemi uygulayarak bir dosyaya kaydedebilir, sonrasında ise güncellemesi için belirli bir süre geçmediği takdirde her açılışta haberleri sıfırdan indirmek yerine dosyadan çok daha hızlı bir şekilde okuyarak kullanıcıya gösterebilir (ya da, haberlerin indirilmesi uzun sürüyorsa, bu süre içerisinde ekranın boş olmaması için en son indirdiği haberleri gösterebilir). Başka bir örnek de, bir kullanıcının Facebook’taki hareketlerini Facebook’a bağlanarak almak istediğimizde bize bunu serialization uygulanmış halde vermesini ve bizim kendi uygulamamızda bunu deserialization ile uygun bir sınıfa dönüştürmemizi verebiliriz.

Bu yazımda, bir Windows Store uygulamasında kendi sınıfımızın bir listesini XML Serialization kullanarak dosyaya kaydedip, ardından okuyan örnek bir uygulama oluşturacağız.

Bunun için Visual Studio 2012’yi açıp, yeni bir Windows Store Blank App projesi açalım.

1

➤ Devamını okuyun…

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

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.