"Unable to start debugging on the web server" Hatası

31 Aralık 2007

Arkadaşlar 2007 nin son yazısını makalesini yazıyorum. Öncelikle 2008 e girerken hepinize huzur, sağlık ve mutluluk dolu seneler diliyorum.

Hata Mesajı:

"Unable to start debugging on the web server. Debugging faild because integrated Windows authentication is not enabled. Please see Help for assistance."


Hata sebebi:

IIS deki projenizin dizin güvenliği ile ilgili bir sorun. Anonim erişimlerde "windows etki alanı sunucuları için özet kimlik doğrulamasına izin verilmediği" için bu hata ile karşılaşılır.

Çözüm:

1. Adım: IIS yönetim ekranını açın (Çalıştırdan inetmgr yazın, karşınıza IIS yönetim ekranı çıkacaktır.) ordan hatayı aldığınız siteyi seçiniz. Üzerine sağ tıklayarak Properties i seçin.

2.Adım: Directory Security(Dizin Güvenliği) sekmesine girin. Anonymous Authentication and authentication control (Anonim Erişim ve doğrulama denetimi) bölümdeki Edit(Düzenle) butona tıklayın.

3. Adım: Oradan Integrated Windows Authentication 'u işaretli yapın (checked yapın)

4. Adım: OK bastınız mı sorun çözülüyor.

Kolay gelsin. İyi seneler...

DataList de QueryString ile Alfabetik Sayfalama

18 Aralık 2007


Bu makalemizde DataList kontrolünde alfabetik sayfalama yapacağız. Gridview da wizardlarla verileri çektiğimiz zaman bize sayfalama özelliğinide sağlıyor fakat datalistte verileri wizardlarla bile çeksek bize sayfalama özelliğini kendisi vermiyor. Bazen verileri göstermek için datalist kontrolünü kullanmamız gerekebilir, ve bu durumda bir sayfada ya 1000 tane kaydı bir anda göstereceğiz ki bu hiç tavsiye edilmez yada alfabetik veya numeric olarak sayfalamak için kodlarımızı kendimiz yazacağız.

Biz bu makalemizde alfabetik sayfalama yapacağız. Bunun için alfabetik linklerimizi oluşturacağız ve linke tıklandığında seçilen harfle başlayan kayıtları getirebilecek metodumuzu yazacağız.
İlk olarak DataListin içini doldurmak için metodumuzu yazıyoruz.




Kayıtlarımızın datalist kontrolünde görünmesi için html kodlarımızı da yazıyoruz.



Seçilen harfle başlayan kayıtların getirilmesi için çağrılacak metod.




Datalist in footer template kısmına harfleri seçebilmek için alfabetik linklerimizi oluşturuyoruz.



Link olarak hyperlink kontrolünü kullanacağız, ve hangi harfi seçerse o harfi yine aynı sayfaya querystring le gönderiyoruz.



Sayfamız ilk çalıştırıldığında bütün kayıtları listeliyoruz.
Eğer linke tıklanılıp çağrılmışsa zaten seçilen harfi querystringle gönderip metotta parametre olarak alıyoruz.



Şimdi herhangi bir harfi seçelim.



Böylelikle bir makalemizin daha sonuna geldik. Bir başka makalemizde görüşmek dileğiyle.

Alıntıdır - Yazar: Veysi Sala

SQL Injection - Injection Flaws

Injection Flaws

Dinamik SQL sorgularının kullanıldığı sistemlerde oluşabilecek bir açıktır.

Bir kullanıcı adı parola sınaması yapılan SQL cümleciğinde kullanılabilir.

Select MemberID
From Member
Where Username = '"
+ txtUsername.Text + "' and Password = '" + txtPassword.Text + "'"

Şeklinde bir SQL cümlesinin kullanıldığı bir sistemde aşağıdaki ifadeleri girelim

txtUsername.Text : ' or 1=1 --
txtPassword.Text : 123

ifadesi aşağıdaki SQL cümlesinin çalıştırılmasını sağlar

Select MemberID
From Member
Where Username = ' ' or 1=1
-- ' and Password = '" + txtPassword.Text + "'"
-- ifadesi SQL Server için yorum satırı anlamına geldi için çalıştırılmaz.

Where ifadesini inceleyelim :

Username = ' ' false döner, 1 = 1 ise true. Or karşılaştırmasında ise False or True’nun sonucu true’dur. Dolayısıyla doğru kullanıcı adı parola girilmese dahi geriye tüm kayıtlar döner ve saldırgan ilk kaydın yetkisi ile içeriye giriş yapmış olur.

Saldırgan “SQL Injection” yöntemi ile veritabanı hakkında daha detaylı bilgi edinebilir. SQL Server üzerinde System Administrator hesabı açabilir, Tüm Tabloların listesini ve bu tabolardaki bilgilere ulaşabilir. Hatta web uygulaması sa yetkisine sahip bir kullanıcı ile çalıştırılıyorsa xp_cmdshell ‘format C:’ ile sisteme format bile atabilir.


Dinamik SQL sorgularındaki bu içeri sızmaları engellemenin yolu parametre kullanmaktır.

Bunu SqlCommand nesnesine SqlParameter tipinde parametre ekleyerek yapabiliriz.

SqlConnection conn = new SqlConnection();
conn.ConnectionString = "[ ConnectionString ]";
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText = " Select MemberID"
+ " From Member"
+ " Where Username = @username and Password = @password";
cmd.Parameters.AddWithValue("@username",txtUsername.Text);
cmd.Parameters.AddWithValue ("@password",txtPassword.Text);
conn.Open();
int MembetID = Convert.ToInst32(cmd.ExecuteScalar());
conn.Close();

Bu şekilde kullandığımız dinamik SQL sorgularında Injection yönetimini bertaraf etmiş oluruz.



Kaynaklar

http://www.owasp.org/index.php/Top_10_2007-A2
http://www.spidynamics.com/papers/SQLInjectionWhitePaper.pdf
http://www.mutasyon.net/makaleoku.asp?id=728

Kötü Niyetli Dosya Çalıştırma

Kötü Niyetli Dosya Çalıştırma


Web uygulamanıza FileUpload ile dosya yüklemesi yapmak durumunda iseniz gelen dosyanın türünü mutlaka denetlemek gerekir. Örneğin bir Forum uygulaması yaptınız ve kullanıcılar kendi resimlerini resimler klasörüne upload edebilmekteler. Saldırgan hazırlamış olduğu bir asp sayfasını resimler klasörüne upload eder ve www.siteniz.com/resimler/foo.asp şeklinde tam yolu yazarak dışardan göndermiş olduğu bir dosyayı sisteminizde çalıştırabilir.


Bu şekilde sisteminizin izin verdiği ölçüde yeni dosyalar oluşturabilir. Örneğin anadizinde ki default.aspx dosyasını silip yerine bir default.asp dosyası oluşturabilir. Böylece siteniz açıldığında “hacked by hacker ana” yazısı ile karşılaşabilirsiniz.


Böyle üzücü durumların yaşanmaması için sisteminize upload edilen dosyaların türünü denetlemek gerek.


Bunun için System.IO.Path ve System.Text.Regex namespacelerinden yararlanacağız.

Önce upload edilen dosyasın uzantısı nı alacağız ve kabul ettiğimiz dosya türleri içerisinde olup olmadığını denetleyeceğiz.

string uzanti = System.IO.Path.GetExtension(FileUpload1.PostedFile.FileName);
System.IO.Path.GetExtension metodu uzntıyı bize “.jpg” gibi noktalı bir şekilde verir.


Kullanıcı tarafından gönderilen dosya ismi büyük harfler ile yazılmış olabilir. Buda birazdan yapacağımız karşılaştırmada farklıymış gibi algılanmasına sebep olur. Bu yüzden uzantı harflerini küçültelim.

uzanti = uzanti.ToLower();

Kabul edeceğimiz dosya uzantıları için teker teker if kontrolü yazmamak için Regular Expression ifadelerinden yararlacağız.


using System.Text.RegularExpressions;
.....
if(Regex.IsMatch(uzanti,".jpg.jpeg.gif.png.bmp") == false)
{
// gönderilen dosya formatı uygun değil
}
else
{
// gönderilen dosya formatı uygun.
}


Önemli bir konu. Umarım faydalı olmuştur.


Kaynak

http://www.owasp.org/index.php/Top_10_2007-A3

Generic Nedir? Bildirimi ve Kullanımı

10 Aralık 2007

Generic Nedir?

Türkçe kelime karşığı olarak “kendi cinsine ait özellikleri taşıyan” anlamına gelen Generic kavramı .Net Framework 2.0 ile birlikte gelen en güçlü yeniliklerden birisidir. Generic’ ler güvenli tipte veri yapıları oluşturmamızı sağlar ve bunun sonucu olarak performansı ve yazdığımız kodun kalitesini artırır. Bir veri işleme algoritmasını herhangibir sınıfa özgü olacak şekilde tasarlamak ve yazmak; aynı algoritmayı farklı şekilde tasarlayabilecegimiz başka sınıflar da varsa fazladan kod yazmak anlamına gelecektir. Generic kavramı bir veri işleme algoritmasının birçok tip tarafından type-safe bir şekilde kullanılmasını sağlar. .NET Framework 2.0 ile birlikte gelen generic, kavram olarak C++ ‘da bulunan template kavramına benzemektedir, fakat yetenekleri ve uygulama alanı açısından bakıldığında C++’daki template kavramından oldukça üstündür.

Programlama açısından bakıldığında stack(yığıt) , array ve arraylist gibi yapılar çok fazla kullanılan veri yapılarıdır. NET Framework 1.1 kütüphanesi ile gelen stack kavramı object sınıfının temelleri üzerine kurulmuştur. Aynı şekilde bir ArrayList nesnesi içerisindeki içsel sınıf mekanızması object sınıfı üzerine kurulmuştur. Arraylist ve stack sınıfının içerisinde barındırdığı veri yapıları object sınıfından birer nesne gibi davranış gösterirler, ancak object sınıfından türemiş nesneler herhangi bir özelliği olmayan nesnelerdir.


Generic sınıfların avantajları :

  • compile-time ve run-time esnasında tip güvenliğini etkin bir şekilde sağlar. Değer tipleri için box ve unbox işlemi yapılmaz ve performans artışı oldukça yüksek düzeye çıkmaktadır. Aynı şekilde referans tipleri için cast işlemine gerek kalmamaktadır.
  • Oluşturduğumuz generic bir sınıfı .Net kütüphanesinde bulunan bütün tipler ve kendi oluşturduğumuz veri yapıları için kullanabilmekteyiz
  • Test işlemleri generic sınıfı için yeterli olacaktır.
  • Yazılan uygulamada kodun şişmesi önlenmiş olur, kodun tekrar kullanılabilirliği artar ve bileşen (component) temelli yaklaşım için oldukça avantajlı bir yeniliktir.

Generic Sınıfların Bildirimi & Kullanılması

Generic sınıfların bildiriminde sınıf isminden sonra < > işaretleri arasında tür parametresi belirtilir. Generic bir sınıf bildiriminin genel biçimi şöyledir :

class Sınıf_İsmi <Tür_Parametresi>
{
// ...
}

Tür parametresi; bildirim sırasında herhangi bir türün karşılığı olmayan ve çoğu zaman T, G, AD gibi bir yer tutucudur. Bu yer tutucu(lar) sınıfın kullanımı noktasında bir tür belirtilmesi ile anlam kazanır(lar). Örneğin;


class Sample <T>
{
// ...
}

//...

public static void Main()
{
Sample <int> obj = new Sample <int> ();
}


Yukarıdaki örnekte bildirim sırasında tür parametresi olarak kullanılan , sınıfın kullanımı noktasında türünün belirtilmesi ile anlam kazanmıştır.

NOT : Terminolojide Sample gibi tanımlanan türler; constructed type biçiminde adlandırılmaktadır !

Çok tipli generic sınıfların bildiriminde birden fazla tür parametresi kullanılabilir.

örneğin :

class Sample <AB, CD>
{
// ...
}

// ....

public static void Main()
{
Sample <int, string> obj = new Sample <int, string> ();
}
Bu örnekte ise; AB -> int , CD -> string türlerinin karşılığı olmuşlardır.

Kolay gelsin...

Remoting Semineri

07 Aralık 2007


Etkinlik Konusu : Remoting Semineri
Etkinlik Türü : Seminer
Kontenjan : 100

Etkinlik Tarihi - Saati : 11.12.2007 -- 13.00 - 16.00
Süre : 1 Gün
Eğitimi Veren : Aykut TAŞDELEN
Etkinlik Yeri : Yıldız Teknik Üniversitesi Konferans Salonu

ETKINLIK IÇERİĞİ


Remoting
, Microsoft'un yeni nesil RPC (remote procedure call) teknolojisine verilen isimdir. Microsoft'un kurumsal iş uygulamalarının geliştirilmesi için çok önemli olan ancak çok da fazla bilinmeyen bu teknolojisini, Microsofttan 4 ez üst üst MVP ünvanı alan ve INETA (Uluslararası .NET Birliği) MEA Bölge Başkanı olan Aykut TAŞDELEN'in anlatımı ile öğrenebilirsiniz.

Seminerde ele alınacak konu başlıkları:

Remoting Nedir ?
Dağıtık uygulamalara giriş
Daha önce kullanılan teknolojiler. DCOM, CORBA, RMI
.NET ve dağıtık uygulama geliştirme
Channel Formatter kavramları
Aktivasyon Proxy kavramları
Lease-Based Lifetime
Object Marshaling
SAO ve CAO nesne modelleri