Ana içeriğe atla

"web.config" Dizaynı İçin BEST PRACTICES

Web.config file
Bu makalenin yazılma amacı web uygulamalarınızda korunması gereken, aynı zamanda kolayca değiştirmeniz gereken durumlarda kolayca müdahale edebileceğiniz verilerin nereye yazılacağı konusunda Best Practicelerle sizi tanıştırmaktır. Öncelikle belirtmem gerekiyor ki bu makaleyi yazarken "Best practices for deploying passwords and other sensitive data to ASP.NET and Azure App Service" makalesinden çok yararlandım. İngilizceniz çok kötü değilse bu makaleye de bir göz atmanızı tavsiye ederim. Zira ben bu makalede okuduklarımı ve iş tecrübemi de katarak bu yazıyı yazıyorum. Burada makaleyi Asp.net bazından anlatıyorum. Ama kullandığınız programlama dilinden bağımsız bir makale olduğunu söylemek zorundayım. Çünkü bu makale daha çok doğru stratejiler üzerine kurulmuştur. Umarım burada okuduklarınız iş hayatınızda size çok yardımcı olacaktır...
Öncelikle yukarıda anlattığım makalenin de başlangıcında yer alan bir cümleyle başlayacağım. Önemli olan nokta şifrelerinizi, korunması gereken diğer hassas verilerinizi asla kod içerisinde barındırmayın ve korunması gereken verileriniz varsa bu verileri development ve test ortamını ayrı tutarak devam edin.
Konuya bu cümleyle başlamamın çok önemli nedenleri var. Aslında bu nedeni anlatmak için bir örneği kullanacağım. Örneğim de şöyle...
Diyelim ki web uygulamanızda şifresini değiştiren kullanıcıların telefonuna bir onay mesajı gönderiyorsunuz. Bu mesajı göndermek için başka bir firmadan servis aldınız. Bu servisi kullanmak için url adresi, kullanıcı adı, şifresi ve başka verileriniz var. Ama siz bu verilerin hassas veriler olduğunu düşünüyorsunuz ve bu yüzden de bu verileri kod içerisinde bir yere yazmaya karar verdiniz. Kod içerisinde bir değişkene değerleri yazdınız ve kullandınız. Diyelim ki sms hizmeti aldığınız firma iflas etti ve artık size mesaj hizmeti veremiyor. Bu durumda başka bir firmayla anlaşıp aynı hizmeti alacaksınız ama tekrar kodu da derlemeniz gerekir. Çünkü siz bu verileri kod içerisine yazmıştınız. Eğer bundan geç haberiniz olursa belki de sisteminiz uzunca bir süre hatalı olarak çalışmaya devam eder. Ve acil mudahale gerek durumlarda developerlarınız da ortada yoksa çok büyük sıkıntılara girebilirsiniz...
Anlattığım örnek basit bir örnek belki, ama düşünüyorum ki bu örnekte sonra sizin aklınıza daha karamsar senaryolar da gelmiştir.. Ama bu makalenin de temel amacı zaten bu senaryolardan kendimizi mümkün olduğu kadar uzak tutmak için stratejiler geliştirmektir...
Bu konu ile bağlantılı olduğu için açıklamakta fayda gördüğüm bir diğer önemli nokta daha var. Aslında sorulması gereken en önemli soru belki de neden kritik verileri kod içerisinde tutarız sorusudur. Örneğin .NET programlama dilinde bir yazılım geliştiriyorsak bu yazılım reverse engineering ile kodları elde etmek sadece uygulama boyutuna bağlı. Bu java için de geçerli diğer programlama dillerinin tümü için geçerli. Önemli olan saldırganlar için koda erişimi doğru engelleyebilmektir. Koda eriştikten sonra daha doğrusu fiziksel olarak koda ulaşabilen bir hacker için bu koddaki kritik verileri elde etmek çok basit bir işleme dönüşür. Yani özetle demeye çalıştığım şey config dosyası içerisinde saklamak yerine kod içerisine güvenli verileri gömmek sadece bu verileri elde etmek isteyen birinin koda erişimi, veya projenin derlenmiş haline erişimi olduğu taktirde sadece geç erişmesine neden olacaktır. Bunun yanında ise size yukarıda bahsettiğim senaryoların üstünde daha büyük sıkıntıların oluşmasına neden olabilir...
Sanırım bu makalenin en önemli noktası zaten yukarıda bahsettiğim neden verileri kod içerisinde tutmayı tercih ederiz konusuydu. Bunun üzerine yukarıda bahsettiğim makaleden türkçeye çevirmeden bir örnek daha vermek istiyorum. Biliyorsunuz ki web uygulamarının çoğunda ayarlar web.config içerisinde yer alır. Ama unutmamamız gereken konu ise web.config dosyasının da uygulamanın bir parçası olduğudur. Bu konu makalede de şu sözlerle açıklanmış. "The web.config file is source code, so these secrets should never be stored in that file. The web.config file is source code, so these secrets should never be stored in that file. " Bu kısımdan sonrası size kalmış bir şey. Ayarlarını dosyalar veya diğer config dosyları içerisinde tutabilirsiniz. Eminim ki kullandığınız programlama dilinin bu yapı için muhakkak ki bir desteği vardır. Makalemin bu kısmından itibaren ise .NET programlama dili için bu yapıyı destekleyen yöntemden bahsedeceğim.
Öncelikle kısa bilgi vermem gerekirse .NET config doyalarından verileri çekerken appsettings tagının içine bakar. Eğer verdiğiniz stringle eşleşen bir veri varsa bu veriyi geri döndürür. .NET tarafından sağlanan diğer bir özellik ise bu config dosyalarını parçalara bölmenizi sağlayan yapıdır. Önemli olan nokta sadece parçaladığınız kısmın appsettings taglarıyla başlamasını sağlamaktır. Bu konuyla alakalı detaylı örnek için makaleye bakmanızı tavsiye ederim. Makalede verilen örnekte de göreceğiniz gibi daha güvenlik gerektiren ayarlar başka ir config doyası içine alınmış ve bu dosya web.config doyasının içindeki appsettings tagı içinden file parametresi kullanılarak çağrılmıştır.
Bu makaledeki temel amacım konuya giriş yaparken de bahsettiğim gibi doğru ve best practice config dizaynına yoğunlaşmak olduğu için kod örneklerine çok girmek istemedim. Açıkçası bunun çok gerekli olduğunu da düşünmüyorum.
Son olarak konuyu özetlemek gerekirse aklınızda best practice config tasarımı ile ilgili tutmanız gereken 3 konu var. Bunlardan birincisi asla güvenli verilerini kod içerisinde tutmayın, web configin de program kodlarının bir parçası olduğunu bilin ve güvenli verileri burada saklamayın ve üçüncüsü ise production ürününüzle development ve test ortamını bir birinden ayrıştırın...
Umut ediyorum ki makalede anlattığım konular ve stratejiler faydalı olmuştur. Konuyla alakalı sorularınız olursa lütfen sormaktan çekinmeyin. En kısa sürede yanıtlamaya çalışacağım...

Yorumlar

Bu blogdaki popüler yayınlar

Medyan (Ortanca) Nedir? Nasıl Hesaplanır? Nerelerde Kullanılır?

Medyan işlemi olasılık hesaplamalarında sıkça kullanılan bir sayı dizisinin ortalamasını hesaplamak için alternatif yöntemlerden bir tanesidir. Ortanca medyan işleminin diğer adıdır. Matematiksel olarak medyan işlemi bir sayı dizisi küçükten büyüğe sıralayarak ortada kalan elemanı medyan değeri olarak belirleme işlemidir. Örnek verecek olursak: 2, 1, 5, 4, 5, 1, 2, 3, 5 serisi sıralanırsa 1, 1, 2, 2, 3, 4, 5, 5, 5 serisi elde edilir. Bu seri 9 elemanlı olduğundan ortadaki, yani 5. eleman (medyan) olacaktır. 5. eleman 3 sayısıdır. Yani ortanca değeri 3'dür Eleman sayısı tek sayı olan bir seride medyan değerin sırasının hesaplaması şu şekilde formüle edilir. Medyanın Sırası = (Eleman Sayısı + 1) / 2 Bu formülü yukarıdaki örneği uygulayacak olursak; Medyanın Sırası = (9 + 1) / 2 = 5 Veri serisi eleman sayısı bir çift sayı ise bu durumda serinin 2 medyanı olacaktır. Örneğin 2, 1, 5, 4, 5, 1, 2, 3, 5, 4 serisi sıralandığında 1, 1, 2, 2, 3, 4, 4, 5, 5, 5 s

Ağaçlar Kireçle veya Badana İle Neden Boyanır?

Ağaçlar kireçle boyanmasının veya badana yapılmasının hem çevreye hem de doğaya, ağaçlara faydası var. Bu makalede bu geleneği enine boyuna tartışmaya çalıştık. Ağaca zarar veren mikrop ve bakterileri öldürür. Ağacı çok aşarı soğuk havalarda ve çok aşırı sıcak havalarda korur. Ağacın çürümesini ve kurtlanmasını önler. Ağacın gövdesinin alabileceği zararları en az düzeyde düşürmeyi sağlar. Hoş, güzel, hijyenik, temiz pırıl pırıl bir görüntü oluşturur. Ayrıca çok sıcak havalarda da ağacı yanmaya karşı korumak. En büyük etkisi soğuk havalarda ağacı don vurmalarına karşı korumak . Küresel ısınma göz önüne alındığında mevsim değişiklikleri ani don, ani ısı artışları ve azalışları sonucunun doğuracağı etkenler için yararlı etkin bir yöntem. Gövdeden obur dalların çıkmasını azaltmak için sürülür. Kireçleme ağaçları güneş yanığından korumak için yapılıyor. Ağaçlar da güneşten yanabiliyorlar. Bu arada odun dokudaki gözenekleri doldurarak kapattığı için, zararlıların yuv

Azərbaycan Dilində Vurğu Qəbul Etmeyen Şekilçiler

Sözlərdə hecalardan birinin digərlərinə nisbətən daha qüvvətli deyilməsinə heca vurğusu deyilir. Üzərinə vurğu düşən hecaya isə vurğulu heca deyilir. Azərbaycan dilində vurğu adətən söz sonuna düşür. Söz şəkilçi qəbul ederkən vurğu adətən şəkilçinin üzərinə keçir. Məsələn: çiç ə k - çiçəkl ə r - çiçəklərd ə n məkt ə b - məktəbl i - məktəblil ə r - məktəblilərd ə n Buna baxmayaraq dilimizdə bir sıra şəkilçilər var ki onlar vurğu qebul etmirlər. Bu məqalədə Azərbaycan dilində vurğu qebul etməyən şəkilçilər incələnəcək ve bu şekilçilərin hansı hallarda vurğu qebul edib hansı hallarda vurğu qebul etmediyi araşdırılacaqdır. Eyni zamanda bildirmək istəyirəm ki vurğu ilə bağlı daha geniş və ətraflı məlumat üçün Azərbaycan Dilində Vurğunun Praktik Məsələləri adlı məqaləyə də nəzər yetirə bilərsiniz.  1. İsimlərdəki şəxs(xəbərlik) şəkilçiləri Məsələn: müəli'məm müəli'msən müəli'mdir müəli'mik müəli'msiniz müəli'mdirlər Qeyd: -dır4