Arşivler: Ekim 2008

Programlama Dilleri ve Yapısal Özellikleri

Yorum Yapılmamış

18/10/2008 at 16:15Kategori:.Net | Bilgisayar | Java | Python

Bu yıl java dilin öğrenmeyi hayal ettiğim programlama dili dersinin içeriğinin değiştiğini öğrendiğimde önce biraz üzüntü duydum. Kendim java öğrenirken de burada paylaşmak istiyordum ki bu düşüncelerimi gerçekleştiremeyecek olmak beni üzdü. Fakat içeriği öğrendiğimde çok farklı şeyler düşündüm çünkü aldığım ders ile çoğu revaçta olan dilleri karşılaştırmalı olarak göreceğiz. Bu sayede dillerin gelişim süreçlerini bileceğiz ve uygulamalar için uygun dillerin seçimini de yapmamız kolay olacak. Bir diğer konu ise almaa başladığımız veri yapıları ve algoritmalar dersi. İlk başta bir yazılım mühendisi ile dışarıdan bu işi öğrenen bir progamcının farkının olmadığını düşünüyordum. Bu iki dersle birlikte özellikle yazılım konularında başarılı olmak için Veri Yapılarının ve Algoritmaların mühendis - tekniker- programcı ayrımı gözetmeden çok iyi incelenmesi gerektiğini öğrendim.
En önemli nokta da derslerin ve bu yoğunluğun arasında bazı şeylere zaman ayıramıyor olmam. Bunların başında da değerli blogum geliyor. Artık yazılarım azalıyor gibi olsa da daha dolu dolu içeriklerle tekrar birlikte olmak dileğiyle...

FileUpload Kontrolünü Etkili Kullanmak ve Güvenlik Konuları

Yorum Yapılmamış

04/10/2008 at 14:06Kategori:.Net

File Upload Kontrolü ASP.net 2.0 ile gelince çoğu problemimiz çözüldü fakat server ile ilgili ve HTTP altyapısında bulunan bazı kısıtlardan dolayı File Upload kullanımında sürükle bıraktan daha fazlasını bilmek gerekiyor. Öncelikli olarak server için yapılması gereken ayarlama FileUpload sonucu gönderilen dosyaların saklanacağı klasörün Network Service kullanıcı için read-write izinlerini sağlıyor olması gerekli. Bunun için ISS ile ya da Klasör için Advance Configurations ayarlarını yapmamız gerekiyor.(ISS 6-7 için Network Service,ISS 5 için ASP.net kullanıcısıdır.)
Bir diğer sorun da web.config içerinden ayarlanabilecek bir ayarlamayla

ile kb cinsinden dosya boyutları ve sn cinsinden time out süreleri ayarlanmalıdır. Bu iki konu aşıldığında ise FileUpload kontrolünü kullanmak kolay olacaktır. Server da gerçekleştireceğiniz diğer işlemler(XML okuma yazma ya da basit file Stream dahi) için ISS için söylediğim ayarlamalar yapılmalıdır. File upload kontrolünün bulunduğu sayfa için role tabanlı ya da windows tabanlı bir güvenlik sistemi oluşturulması izinsiz kişilerin sizin dosyalarınız arasına dosya göndermesini engeller fakat izinsiz kod çalıştırılmasını engellemek için sadece ihtiyaca göre dosya uzantılarını kısıtlarsak bunun önüne kolayca geçebiliriz.

protected void Button1_Click(object sender, EventArgs e)
{
if (FileUpload1.HasFile) // Dosya yolu girilmişse
{
string extension = System.IO.Path.GetExtension(FileUpload1.FileName).ToLower();
if (extension == ".jpg" extension == ".gif")
{
try
{
string path = Request.PhysicalApplicationPath + @"data\";
string dosyaAdi = Path.GetFileName(FileUpload1.PostedFile.FileName);
string uploadYolu = Path.Combine(path, dosyaAdi);
FileUpload1.PostedFile.SaveAs(uploadYolu);
Label1.Text = string.Format("Dosya yüklendi..
Dosya adı: {0}
Dosya boyutu: {1} byte
Dosya adresi: {2}", FileUpload1.PostedFile.FileName, FileUpload1.PostedFile.ContentLength, Server.MapPath("data") + FileUpload1.PostedFile.FileName);
}
catch (Exception ex)
{
Label1.Text = ex.Message;
}
}
}
}
Bu kodlarla ben sadece resim dosyaları için açtığım bir klasöre istediğim resim formatlarında olan dosyaları kabul ettim.Eğer böyle bir kontrol yapmamış olursam kötü niyetli bir kişi benim yapmış olduğum fileupload kontrolü ile kendi yazdığı asd.aspx ve asd.aspx.vb (kötü niyetli kişimiz vb ile yazıyor olsun :) ) ) dosyalarını atarak ilk olarak düşünebildiğim benim klasörümdeki tüm resimlerimi silebilir. Bunu önlemenin diğer bir yolu da klasörümüzde bir kod sayfası bulundurmayacaksak ISS altındaki bu klasör için Network Service kullanıcısının executable yeteneğini kaldırabiliriz.

web.config-I

Yorum Yapılmamış

02/10/2008 at 18:27Kategori:.Net

web.config ASP.net ile haşır neşir olan herkesin birgün kesinlikle karşılaşacağı ve daha da önemlisi bir daha onsuz yapamayacağı bir dosya. Evet dosya çünkü içinde bildiğimiz XML formatında yazılmış bazı veriler var. Bu veriler ise işte o noktada kıyamet kopuyor doğru ayarlar sizi birçok sorumluluktan korurken, yanlış veya bilinmeyen yönleriyle bizi çok sıkı bir yola itiyor. Ben bu yazımda karşılaştığım ve sık sık kullandığım konulara yer vermeye çalışacağım.
Öncelikle web.config neyi ayarlar konusuna değinmeliyiz. Web.config aslında her server da bulunan ve güvenlik, doğrulama ve diğer verileri taşıyan machine.config dosyalarını ezmeye yarayan bir dosyadır. Ezmeye sözcüğünü kullandım çünkü durumu bu sözcük çok iyi anlatıyor. web.config ile ayarladığınız konularda sizin ayarlarınız etkin olurken hiç değinmediğiniz konularda serverda bulunan machine.config ler içindeki bilgilere göre hareket ediliyor. machine.config- ler diyorum çünkü machine.configler çok sayıdadır. (Birisi .net framework klasörü içindedir.) Local ISS ile çalıştırdığımız asp.net sayfalarımız için machine.config leri kullanarak da düzenleme yapabiliriz fakat bu iyi bir yöntem değildir çünkü çoğu programcı kendi bilgisayarında yazdığı kodu kendi ISS i ile internete yaymaz. config dosyalarının hiyerarşisini anladığımıza göre benim karşılaştığım noktalara değinebiliriz.
İlk konu bölgesel konular.Biz kullandığımız çoğu veriyi serverdan alma ihtiyacı duyarız. Saat - Tarih gibi bilgileri DateNow(); ile alınca benim bilgisayarımda Amerikan formatlarına göre gelirken Türkiyedeki bir hosting firmasında Türkiye ye göre gelir ve godaddy den hosting almışsanız yine Amerikan formatlarında gelir. Türk kullanıcıya 12.02 PM 12 Aug . 2008 gibi bi veriyi okutmak pek doğru olmaz. Bu sorunu çözmek için serverdaki ayarları kendinize göre değiştirmeniz gerekir. Bunu da web.config içerisine



ekleyerek sağlayabilirsiniz.
Burada eksik kalan nokta XML yapısında olan bir döküman olduğu için web.config içerinde zaten element olarak yazmanıza gerek yoktur. İncelediğinizde zaten var olduğunu göreceksiniz.


Bir web.config dosyasının hiyerarşik dizilimi:






şeklindedir.
Diğer önemli konu da web.config global bir dosyadır. En önemli özelliklerinden biri dışarıdan bir kullanıcının bu dosyayı indirip okuyamıyor olmasıdır. Durum böyle olunca bizim global verilerimiz için de iyi bir saklama konumu olacaktır. Sql bağlantısı kullanan uygulamalarda ConnectionString bilgisini bu dosyaya elementleri arasına yazmak adettendir. Adet olarak kabul görmesinin sebebi ise SqlConnection bilgilerimiz değişince sadece tek yerden bu veriyi değiştiriyor olmamızdır. Bu veriyi kodlarımız arasında nasıl kullanacağız derseniz tek satırlık kod ile işiniz çözülecektir.
ConfigurationSettings.AppSettings("sConnectionString");

Ayrıca bu ayarlar içerinde SMTP server bilgilerini saklamak da mantıklı bir çözüm olur.