Security Expert Network Editor Login | Register Ekle

root > Web Uygulamaları Güvenliği
Maze Of Web Application Security - Web Uygulamaları Güvenliği - root \ Cyber-Security
ErkanKESKİN
(Date : 17.08.2011 09:48:05)


Maze Of Web Application Security

Bu makalemde, son zamanlarda yaptığım web uygulamalarında kullandığım bir iki labirent güvenlik metodundan bahsedeceğim. Aslında birçoğunuz tarafından bilinen, kullanılan bazı metotları bir arada ve birbirine bağımlı olarak kullandım. Çok enteresan bişey çıktı ortaya. Asıl amacım onu sizlerle paylaşmak, bir beyin fırtınasını başlatmak, kendi yöntemlerinizi geliştirmeye teşviktir.

Öncelikle neden böyle bişey yaptım ondan söz etmem gerekiyor. Sonrasında yöntemlerinde ne kadar mantıklı olduğunu anlayacaksınız. Ben bir birey olarak, bir   web tasarım ve yazılım şirketi ile freelance çalışıyorum. Aslında birkaç şirketle çalışıyorum. Bu izlediğim yolu şimdilik sadece bir şirkete uyguladım / uygulamak zorunda kaldım. Türkiye piyasasında birçok meslektaşım yaptığı işin parasını alamamaktan yahut geç almaktan yakınırlar. İş teslim edilmeden tahsilat yapılmaz. Ancak iş teslim edildiği zaman bazı sorunlar çıkabilir ve siz işi teslim ettiğinizle kalırsınız. İsterseniz o web site tasarım ve yazılımının programcısı olarak tahsilatınızı yapamadığınız takdirde illegal yoldan o siteyi kullanılmaz hale getirebilme gücüne sahipsinizdir elbet ama bu davranışınız kanunlar çerçevesinde sizi haksız duruma düşürür. Eğer aranızda resmi bir sözleşmenizde yoksa, siz siteyi yaptığınızla kalırsınız. İşte ben böyle bir durumda kalacağımı sezdim. Ancak karşı tarafın yakarışlarına kayıtsız kalamadım ve işi teslim ettim paramı henüz almadan. Ancak kendimi legal yoldan garantiye almak için birtakım kodlar yerleştirdim sistemin içerisine. Şöyle ki ;

Sistem Access database kullanıyor. Ancak kendi sunucumda Sql serverda bir database oluşturdum ve bu database"e özel bir kullanıcı. Sistemin Config.asp dosyasına bir kod yazdım bu veritabanına uzaktan ip ile bağlanıp benim sunucumdaki Sql veritabanını kontrol ediyor. O veritabanı yoksa, yada oraya bağlanamıyorsa, yani kısacası sistem uzak sunucuya bağlanırken hata ile karşılaşıyorsa "Güvenlik nedeni ile sistem kapalıdır !" mesajı veriyor. Bu kodu o sistemde bulmak ve kaldırmak bir programcı için çerez bir iştir. Ancak oyun tam burada başlıyor..


Game Time !

Veritabanı bağlantı kodum silindiği takdirde, o kodun varlığını nesnel olarak kontrol eden bir class dosyam başka bir asp dosyasının içerisinde duruyor( aynı renkteki satıra bakıp görebilirsiniz ). Bu class web sitesi açıldığı anda çalışır durumdadır. Görevi ise config.asp dosyası içerisinde benim sunucumu kontrol eden connection string"in varlığını kontrol etmektir. Aynı zamanda bir fonksiyonum daha var config.asp içerisinde bu class"ın varlığını kontrol eden. O fonksiyon içinde de classcontrol.asp ( aynı renkteki satıra bakıp görebilirsiniz. ) kelimesi geçtiğinden aynı zamanda bu classcontrol.asp sayfası kendi varlığınıda kontrol ediyor. O bağlantı satırları ve birazdan yazacağım fonksiyon içerisinde ClassControl.asp kelimesi olmazsa yine "Güvenlik nedeni ile sistem kapalıdır !" mesajını veriyor. Biraz karışık olduğunun farkındayım. Bu Class kısaca hem connection"ı hemde kendi varlığını kontrol ediyor. Bu dosyada gayet görünür bir yerde. Görünürde olsa açıp bakması, tahmin etmesi zor ihtimal ya ! Neyse bu adam çok iyi bir programcı, zehir, kurt birisi. Açtı bu class"ı da buldu. Hemen ilgili kodu değiştirdi, yada sildi. Yada dosyayı komple sildi. Bir Fonksyino Daha ! Config.asp dosyasının içinde bir fonksiyonum daha var demiştim. Bu fonksiyonun görevi ise bu class dosyasının ve bu dosyanın içerisindeki kontrolün varlığını kontrol ediyor. O dosya yada içerisindeki kod silinir ise yine "Güvenlik nedeni ile sistem kapalıdır !" mesajını veriyor. Yani bu fonksiyonu silersede yukarıdaki class kontrol ettiğinden çalışmıyor. Yani kısacası bunun anlamı sistemi çözmeye çalışan programcı için şu oluyor ;

Biz 40 kardeşiz, 40"ımızda birbirimizi biliriz.

Ya da

Biz birbirimiz için yaratılmışız !

ClassControl ve Config.asp dosyası birbiri ile bağlantılıdır. Bunu çözmek mümkün değilmi ? Tabiki mümkün ama bunu bilmeyen için bu labirentin anlamı inanın kafayı sıyırtır. Zaten bu labirentimi çözerse alsın sistemi tepe tepe kullansın. Helal hoş olsun. Sonuna kadar hakkıdır. Güvenlik metodumuz bu şekilde bir labirentten ibarettir. Unutmadan ;

Bu kodu sadece o sitenin tahsilatını yapana kadar orada barındıracağım. Tahsilatı yaptıktan sonra aldığım güvenlik önlemini izah edip bu kontrollerin olmadığı yedeğimdeki sistemi onlara vereceğim. Ayrıca kodlarında bir kısmını paylaşalım ;

Config.asp--------------------------------------------------------------------------------

"Burası bağlantı cümleciğidir

<% ConnectionString ! %>

ClassControl.asp--------------------------------------------------------------------------------

Response.Charset = "utf-8"
Set ClassFSO = Server.CreateObject("Scripting.FileSystemObject")
Set ReadFile = ClassFSO.OpenTextFile(Server.MapPath("Config.asp"), 1, -2)
Content = ReadFile.ReadAll() If Instr(Content,"connFunct(""dbName"")") = False Or Instr(Content, "Server=serverIp") = False Or Instr(Content, "If ClassFSO.FileExists(Server.MapPath(""ClassControl.asp"")) = False Then") = False Then

Response.Write "Güvenlik Nedeniyle Sistem Kapalıdır !
Response.End()
 
End If

"Bu dosyada şart cümlesinde gördüğünüz üzre hem ClassControl.asp dosyasının varlığı, hemde ConnectionString"in varlığı kontrol ediliyor. Diğer ClassControl.asp dosyasının varlığını kontrol eden ve Config.asp içerisinde bulunan fonksiyonum ise ;

Function FileControls()
 Set ClassFSO = Server.CreateObject("Scripting.FileSystemObject")
 If ClassFSO.FileExists(Server.MapPath("../ClassControl.asp")) = False Then
  
  Response.Write "Güvenlik Nedeniyle Sistem Kapalıdır !
  Response.End()
  
 End If
End Function



Bir sonraki makalede görüşmek dileğiyle..


İyi Çalışmalar...



Derecelendir
Kaynak ErkanKESKİN Tarafından yazılmış/derlenmiştir.
İçerik İhbarı
Bağlantılar Bg.org.tr

CS - Security Expert Network AUP&TOS