IRCForumları - IRC ve mIRC Kullanıcılarının Buluşma Noktası
  sohbet

 Kayıt ol  Topluluk
Yeni Konu aç Cevapla
 
LinkBack Seçenekler Stil
Alt 21 Mart 2009, 17:39   #1
Çevrimdışı
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Sayısı: (0)
IF Ticaret Yüzdesi:(%)
Asp Yazılımlarında Basit ve Orta Düzeyli Güvenlik




Makalenin tamamını ve yazdığım os min masaüstünün bulunduğu rar dosyasını aşağıdaki linkten indirebilirsiniz

Vampire.zip [Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]




Asp Yazılımlarında Basit Ve Orta Düzeyli Güvenlik



Arkadaşlar günümüz dünyasında artık herşey internet üzerinden oluyor gibi basit bir cümle kullanmaya niyetim yok zaten herşey ortada bizim ülkemiz her ne kadar bu durumun pekte farkında olmasada bu durum böyle oldu vede böyle olmaya devam edecek. Keşke ülkemizin kurumlarıda gerek özel gereksede kamu kuırumları ve bunların yöneticileri bunun ciddiyetinin farkında olabilseler ancak hepimizinde bildiği üzere putlaşmış tanımların yetiştirdiği nesildende pek bir şey beklemenin faydasıda yok okullarda üstünkörü eğitim ( Eğitim Diyorum Ama Daha Kendisini gören Olmadı Ben Unide Okurken bile görmedim görürseniz bana haber edin O günü Bayram ilan edelim ) bunun yanında tarihimizde olan olayları bazı toplulukların isteğine göre öğrenmemiz yada öğrenmeye (kabul etmeye) zorlanmamız sonucunda ne teknolojiden ne siyasetten ne ekonomiden nede sosyalleşmeden nasibini almamış bir teneke nesil ortaya çıkıyor bu ister kabul edilsin istersede edilmesin 90 küsür senedir böyle haaa diyeceksiniz şimdi kardeşim konumuz güvenlik valla bu güne kadar 50den fazla makale yazdım hepsinde böyle başladım kimseye bir şeyi okuması için zorlamıyorum isteyen okur isteyen okumaz . İsteyen kabul eder isteyen etmez saygı duyarım ve umursamam . Şunu vurgulamak istiyorum tabularını yıkamamış koyun gibi güdülmekten hoşnut olan insanlar bir mevkiye geldikleri zaman herkesi güdebileceklerini sanıyorlar halbuki kimse koyun değil zaten devletimizde o makamlarda oturanlar hala oğlu teyze kızı oldukları içinde onlara neden bunu yaptın diye soran yok işte bu tür insanlar bu gün youtube.com a girişleri engelleyebildiklerini sanıyorlar neyse kendini hacker sanan hackercıklar uyanda bu yanda öğrenmeye çalıştıkları hack yöntemleri ile günlerimizi haftalarımızı verdiğimiz yazılımlarımızı bozmak silmek yada aklınıza gelebilecek saçma şeyleri yapmak için uzun uğraşlar veriyorlar . Bu noktada güzel olan tek şey gerçekten kod yazmayı bilen ile bilmeyenin ayrılmasıdır bir insanın kendine yazılımcıyım diyebilmesi için gereken şartlardan biriside tamamen tutarlılık gösteren öngörüleri yapılmış GÜVENLIĞI tam olan bir yazılım oluşturabiliyor olmasıdır . Ülkemizde çeşitli kod paylaşım sitelerinden yüzlerce kodu kendi pcne çekip 2-3 dk editleyip yazılımcıyım diye dolaşan kod yazdığını ballandırarak anlatan insanlar sizlerde görmüşsünüzdür . İşte bu dökümanın amacı gerçek yazılımcı olma noktasında size ufakta olsa bir şeyler katmak bunu katarkende etik değerleri tam manası ile öğrenmiş olan bir yazılımcı profili ortaya çıkarmak umarım bu yazı dizimin sonunda dökümanımı okuyan arkadaşlara bir nebzede olsun yardımcı olmuş olurum .



Şimdi arkadaşlar sizleride fazla sıkmadan hemen konuya girmek istiyorum sıktıysam şimdiden özür dilerim ?

Bu makalemin bu dizisinde asp yazılımlarımızda nasıl basit ve orta düzeyli güvenlik sağlarız bundan bahsedeceğim zaten basit ve orta düzeyi yaparken veya yaptıkdan sonra kendiniz ileri düzey güvenlik sisteminizi hazırlayacaksınız .



Asp yazılım dili diğer akranlarına göre şu anda biraz öksüz durumda ms in .net mimarisine yaptığı yatırımlardan ve şirket geleceğini bir anlamda kaynak kodu açılmamış kod bloklarını satışı üzerine kuruduğu için ( bence isteyene uzunca anlatırım ) asp değilde aspxi geliştirmekte zaten asp 3.0 en son çıktı baktığımız zaman aspde bir çok döngü işlem yapılabiliyor bazı işlevlerde asp.dll ye ek başka programcılar tarafından yazılıp iis ile çalışması sağlanarak aspnin işlevselleği arttırılmaya çalışılıyor ama diğer web tabanlı yazılım dilleri php ve jsp ( Makalemi 3 dil üzerine yazıyorum başka dil yok demiyorum ) temelde aspnin yapamadığı bir çok şeyi yapabiliyor örneğin resim işleme işlevi yani kütüphaneler sayesinde değişen resimler üretilmesi gibi bir sürü örnek verebiliriz . Bunu aspde ek dlller yada nesneler tanımlayarak yapıyoruz . ( Şunuda belirteyim makalemde bazı şeyleri farklı anlatıyor olmam varlıklarını yada kullanım şekillerini bilmediğim anlamına gelmiyor yada öyle zannedilmesin burada herkesin faydalanması için basit anlaşılabilir olmaya çalışıyorum ) Bunun yanında güvenlik noktasında her web dili sürekli yeni güncellemeler çıkarmasına rağmen mesela php 5. sürümünün ara sürümlerinden jspde yine aynı şekilde ara sürümlerinden devam ediyor ama asp kaplumbağa gibi mesela phpnin geliştiricileri her sürümde çıkan hataları güvenlik sorunlarını bir sonraki sürümde temelden bertaraf ettikleri için yazılımcının kullandığı yazılım dilinin açıklarını bertaraf etme durumu olmuyor ama asp öyle diil bir asp yazılım hazırladığınız zaman querystring ile yada başka deyimler ile aldığınız her veriyi kontrol etmek zorundasınız aksi halde emek verdiğiniz yada büyüttüğünüz çocuğunuz tanınmayacak hale gelebilir . İşte bu noktada aspde yeni functionlar oluşturarak deyimleri birleştirerek kendi güvenlik kalkanınızı oluşturmalısınız aksi halde yazılımınız yol geçen hanı gibi olur her sql injection deyimini nette gören sizin sitenizde bunları denemek isteyecektir . Geliyoruz en civcivli yerlere sql injection nedir . Hemen anlatayım sql injection yazılımlarımızda kullandığımız sql yani veri yönetim komutlarımızın sistemimizi haklar haricinde enjekte edilmesi için kullanılan araçlardır ve bunlarda sql komutlarının kullanımı ile oluyor .



Bir sistem yazarken Öncelikle yapmanız gerekenler

1. mimarinizi baştan aşağı iyi elemine etmelisiniz

2. saldırıların nereden geleceğini öngörmelisiniz

3. saldırılarda neler kullanılabileceğini iyi bilmelisiniz

4. bunları savuşturmayı bilmelisiniz





Mimarinizi baştan aşağı iyi elemine etmek gereksiz kod parçacıklarından gereksiz kod işlevlerinden uzak durmalısınız yani şuda olsun buda olsun şu işlemi şunla yapayım demeyin mesela File system Object nesnesini iyi kullanmalısınız aksi halde fso nesnesi art niyetli kullanıcı iyi niyetli kullanıcı diye ayırmadan herkesin komutunu ifa ettiği için sisteminizde faal bir açık meydana gelmiş olacaktır . Burada nesne seçimlerinizi iyi yapmalısınız yani kullanıcılarınızın gerçekten o işleve ihtiyacı varmı o işlevin komutlarını başka objectlerle yapabilirmiyim diye sormalsınız



Saldırılar sadece kullandığınız objectlerden gelmez örneğin bir haber kısmınız var kullanıcı haberin detaylarını muhakkak ki okumak isteyecektir ama herkes okumak ile yetinmez okurken değiştirmekte ister işte burada hemen sql injection komutlarına başvurur hemen bir örnek ile nasıl yapıldığını ve nasıl engellenebileceğini göstereyim



Diyelim haberlerinizin devamlarını devami.asp diye bir sayfa aracılığı ile okutuyorsunuz tabiki kullanıcı haberi tıklarken haberin kaç numaralı haber olduğunuda devami.asp ye bildirmek zorunda yani kullanıcı linki tıklarken link devami.asp?sayi=4 gibi yada kendi yazdığınız deyime göre şekil alacaktır . Burada sayi yerine istediğinizi yazabilirsiniz sonuçta kesinlikle bu veriyi alırken bunu ya aynı deyime yada başka bir deyime eşitlemek zorundasınız . Şimdi browser bu komutu devami.asp ye iletti sizin yazdığınız kod ise gelen sayı değerini alacak ve db üzerinden 4 nolu haberin detaylarını arayacaktır . basit şekilde



sayi = request.querystring("sayi")



yani sayi stringi al ve sayi değişkenine eşitle hııı burası iyi hoşta ya kullanıcı bunu değiştirdiyse yani devami.asp?sayi=4 yerine devami.asp?sayi=000000000 yazdıysa yada

devami.asp?sayi=4' Delete ?. -- gibi bir sql komutu girdiyse sizin devami.asp deki yazılımınız bunu nerden anlayacak saldırı olduğunu anlayamaz tabi yazılımda her şey sizin zekanızı kodlara dökmeniz ile olur işte burada yapılacakların en başında

birincisi kesinlikle gelen string değeri sayı olacak diyebilirsiniz sayı değilse işlemi asp.dll durdurur bunu şöyle bir komut ile yapabilirsiniz



sayi = request.querystring("sayi")

sayi = Cint(sayi)



Burada sayi tanımımızın kesinlikle sayısal bir değer olduğunuzu belirtiyoruz aksi hallerde asp.dll yorumlama işlemini durduracaktır bu kısa ve kökten bir çözüm olarak karşımıza çıkıyor bunun yanında ek bir bilgi daha vereyim



sayi = request("sayi")



diyerekte değerimizi alabiliriz yada



sayi = Cint(Request.QueryString("sayi")) olarakta verimizi çekebiliriz



ayrıca diyelim burada bir if else yapısı kurarak gelen değer sayı ise detayları yazdırmayı değilsede else deyip response.write komutumuz ile kullanıcıya sistemin vereceği hata mesajı yerine kendi hata mesajımızı verdirebiliriz . sadece bununlada bitmiyor gelen değerin sayısal olup olmadığını incelemenin başka bir yolu daha var onuda aşağıda bir başka kod ile sizlere anlatıyorum bu kodların arasındaki fark ise bir tanesinde gelecek değerin kesinlikle sayısal bir değer taşıdığını aksi değerler taşıyamayacağını söylüyorum aşağıdaki kodda ise sayısal değer taşımaması gerektiğini taşıyorsa da yapması gereken işlemi söylüyorum aşağıdaki komut yazılış olarak farklı gözükse de işlemi aynı kullanmada seçim sizin



sayi = request.querystring("sayi")

if Not IsNumeric(request.querystring("sayi")) then

response.redirect "hata.asp"

response.end

end if



Burada dikkat ederseniz gelen değer sayısal değil ise hata.asp sayfasına yönlendirmesini vede bunun akabinde response nesnesinin işlevini devami.asp için durdurmasını söyledim bu şekildeki kullanımda sitenizin hata sayfalarını oluşturarak daha kaliteli bir yazılım oluşturabilirsiniz ayrıca devami.asp de yorumlama yapmayacaktır



bunu yaptıkdan sonra gelelim browserdan gelen verileri temizlemeye yada gelen komuta göre yorumlama yapıp yaptırmamaya şimdi neler olabileceğini düşünelim ziyaretmizi sayi değerimizi kafasına göre değiştirebilir dbmizde olmayan bir değer girebilir hiç değer girmeyebilir yada sql injectionun temel hata komutlarının başlamasına ve yorumlanmasına sebep olan işaretleri atabilir öncelikle boş değerler ve dbmizde olmayan değer durumlarını inceleyelim . Bunların hepsi gerek güvenlik gereksede yazılımızda çalışabilirlik açısında önemli durumlardır ancak gerçek yazılımcılar değilde kopyala yapıştır çocukları piyasada çok olduğundan bu tarz durumlar hep göz ardı edilmiştir .



Diyelim ana sayfamızda devai.asp ye hiçbir değer yollanmadı haliyle yazmış olduğumuz sayfa hata verecektir çünkü değer yok burada hata vermeyi engellemek için hemen şu şekilde bir kod yazıyoruz



sayi = request.querystring("sayi")

if sayi = "" Then

response.redirect "hata.asp"

else

sayi = Cint(sayi)

end if



bu kodumda ise gelen değeri öncelikle boşmu dolumu yani sayi nesnesi herhangi bir değer taşıdımı taşımadımı şeklinde analiz ediyorum eğer taşımıyorsa response.redirect ile hata.asp sayfasına yönlendiriyorum şayet değer taşıyor ise else diyip öncelikle gelen değerin sayısal olup olmadığına bakıyorum burada şöyle bir şey daha yapabilirsiniz örneğin gelen değerde sayısal değilse de ek bir if else deyimi ile orada hata sayfanızı kullanabilirsiniz aksi haldede zaten iis işlemi durdurup gelen değerin sayısal olmadığını kendi dili ile söyleyecektir anlayana tabikide eee bittimi bitmedi hadi boş değer işini hallettik sayısal değer işinide hallettik geriye acaba dbde girilen değer varmı yokmu ona baktıkmı eee bir bakalım birde sql injection komutlarının temizlenmesi var dimi



şimdi bildiğiniz gibi eof ve bof komutlarımız var veri değişkenlerimizde atabildiğimiz eof ve bof un ne olduğunu anlatmayacağım zaten dbdeki veri tarama işlemlerinden aşikarsınızdır diye düşünüyorum ama genede kısaca değineyim bof ve eof komutlarımızı bir değişkenimiz ile o değişkene ait olan kayıtların listelenmesi sırasında değikenimizin ( tanım cümlelerini pek önemsemem zihnimde daha önemli şeyleri tutmam gerekiyor ister nesne deyin ister değişken deyin isterseniz kazma deyin ne işe yaradıklarını bilin yeter zaten onlar işini yapacaktır ) veri taşıyıp taşımadığına bakar ve sizde ona göre kullanırsınız mesela



if vampire.eof then

Response.write "Hata!"

End if



Burada vampire isimli değişkenim ile veri çekmeden önce vampire değişkenimin değer taşıyıp taşımadığını sorguluyorum şayet yoksa hata mesajımıda sayfaya yazdırıyorum



Gelelim sql injection konusuna bunlar nelerdir ne işe yararlar nasıl engellenirler



Öncelikle bilmeniz gereken hangi simgeleri engelleyeceğinizdir çünkü simgeleri engelledikten sonra girilecek sql komutlarının hiçbir önemi kalmayacaktır ancak aspde bu böyle diğer web tabanlı yazılımlarda aspde geçerliliği olan simgeler yerine farklı methodlar uygulanabilir mesela detay.php?sayi=4+union+select gibi yazabilirsiniz tabiki bu konuya bu makalemin php ile ilgili olan dizisinde detaylıca anlatacağım

Örneğin devami.asp?sayi=4 geldi bu sayının yanına neler eklenerek hata verdirilir vede bu hataları kullanabilirim öncelikle sayının yanına isim vs yazarsanız yazdığınız koda göre hata verir yada mesajınızı iis yazdırır ancak bunlar sizin sql injection yapmanıza yada yapılmasına yaramaz bu durumda kullanılan baş hata simgeleri şunlardır



' * " ; , - % .. .



asp yazılımlarına saldırırken mutlaka ama mutlaka bu simgelerin birini yada bir kaçını bir komut içerisinde kullanılması gerekmektedir bunun yanında delete select gibi yada drop update gibi sql komutlarınında kullanılması gerekmektedir ben bunlara pek girmeyeceğim amacım kimseye sql injection yapmayı öğretmek değil yazılımınızı güvenlik altına almayı basit ve orta düzeyde sağlamayı öğretmek . Bu simgelerin yanında yüzlerce komut kullanılarak serverın kapatılmasına kadar tetikleyiciler iise yorumlattırabilirsiniz hatta bir çoğunuz bilir o kadar çok piyasada duyulduki mesela ms sql db kullanan bir sitenin serverındaki tüm sql işlemlerini durdurmak için sömürülecek bir açık çıkmıştı yıllarrr önce neyse o kapandı da yazılım yazmayı bilmeyenlerin yada kod araklayıcılar nasıl kapanacak keşke onlarında bir yaması olsada piyasadan def olup gitseler . şimdi saldırgan yukarıda verdiğim komutlar ile sayfanıza saldırabilir ancak siz gelen verinin sayısal olduğunu doğruladıysanız sorun yok diyelim doğrulamadınız işte o zaman sorunlar meydana gelecektir yada daha paranoyaklık yapmak istiyorsunuz olsun ben bunları da gerek olmamasına karşın engellemek istiyorum tabiki olur bunlarıda isterseniz yazılımınızın görmezden gelmesini yada bunları görüp ona göre işlem yapmasını sağlayabilirsiniz burada functionlar ile trim komutunu kullanacağınız buda aslında gayet basit ve de güvenliğinizi sağlayacak bir işlem.

Diyelimki devami.asp?sayi=4' şeklinde bir komut geldi ve de yazılımınıza gelen değerin sayı olması gerektiğini söylemediniz olacaklar yazmakla bitmez yani saldırgan yöneticiymiş gibi her şeyi yapar ancak birkaç komut daha yazdırarak o anda kullanılan tablonun adını almak zorunda bunuda bir komutla halledecektir neyse o komuta sizin ihtiyacınız yok zaten .



Burada yapabileceklerimiz

Gelen değerdeki sayı haricindekileri sildirmek = görmezden gelmek

Gelen değer sayı haricinde bir şey varsa işlemi durdurmak



İkinci seçeneği yukarıda detaylıca anlattığım için şimdi sadece birinci seçeneği anlatacağım

Burada öncelikle bir fonksiyon oluşturacağız vede hangi simgelerin temizlenceğini yazılımıza anlatacağız sizlere iki şekilde fonksiyon hazırladım bunlardan birincisinde daha sonra bu yazı dizisinin devamında daha detaylı değineceğim ama şimdi kısaca anlatacağım formlardan gelen veriyi temizleme işlemi ikincisinde ise değerlerden taşınan verinin temizlenmesi şimdi formlardan gelen veriyi nasıl temizleriz örneğin kullanıcımızın formdan yukarıda anlattığım verileri yolladıysa bunların temizlenmesi istediğimizi var sayalım hemen koru adı altında bir fonksiyon oluşturup buna da basit anlamda ek bir ad vererek ( yazılımda ayrıca bir tanımı var ama yazmaya gerek yok maksadım herkesin anlayıp kullanabileceği bir makale ) ki buda kelime adını alıyor bunu yaparak istenmeyen karekterlerin formlardan geçmesini engelliyeceğiz

<%

function koru(kelime)

kelime=replace(kelime, "'" , "" )

kelime=replace(kelime, ";" , "" )

kelime=replace(kelime, "," , "" )

kelime=replace(kelime, "*" , "" )

kelime=replace(kelime, "%" , "" )

kelime=replace(kelime,""","")

kelime=replace(kelime, "-" , "" )

koru=kelime

end function

%>



aslında burada yaptığımın izahatı şöyle gelen değer işte " - vs gibi ise bunu boş değer ile değiştir yada istersem boş değer değilde aşağıdaki gibi bir değere dönüştür



kelime=replace(kelime, "-" , "hata" )



açıklaması formdan ziyaretçi - yollarsa yazılımım onu hata cümlesi olarak dbye yazacak ve sayfada da hata olarak yazacak tabi bu bir örnek yazılımınızda böyle yaparsanız sayfada anlamsız cümleler meydana gelecek siz bunu kendi hayal gücünüze göre düzenlersiniz daha sonrada gelen veriyi bir değişkene atayacağım işte bu atama sırasında yazacağım komut ile önce fonksiyona başvurmasını ve gelen veride fonksiyondaki değerlerden var ise değiştirmesini söyleyeceğim oda şöyle



adi = trim(request.form("adi"))

adi = koru(adi)



burada form name in adi olduğunu ve adi ye tekrar eşit olduğunu söyledim bunun yanında da fonksiyona başvurulup koru ara nesnesine göre değerlendirilmesi gerektiğini belirttim ayrıca burada trim adında bir komut kullandım buda formun başındaki ve sonundaki boşlukları temizlemek için kullanılıyor



ancak herhangi bir fonksiyon hazırlamadan gelen her değeri html kodu haline getirerek dbnize işletebilirsiniz aslında baktığımız zaman çok faydalı ancak gelişen sisteminizde örneğin yazdığınız bir metin editörünüzde işinizi bozacaktır anlattığım şekilde ise formunuzdan verinizi aşağıdaki şekilde alırsanız asp.dll gelen her şeyi komut olarak görmeyecek ve yorumlamayacaktır yani göz ardı edecektir ancak



adi = trim(Server.HTMLEncode(request.form("adi")))



yada



adi=html.encode(request.form("adi"))



burada server.html.encode yada html.encode kullanımız dillerdeki karekterlerin kullanımı açısından önem arz eder yani server.html.encode de tr karekterler desteklenmez ayrıca diyelim diye bir yazı geldi formdan sizde bunu bir resime aktarmak isteyeceksiniz server.html.encode yada html.encode bunu yapmanıza izin vermez bu durumda fonksiyon kullanmak zorunda kalırsınız neyse bu uzar konuya dönelim

bu kullanımlardan birini seçtikden sonrada temizlenmiş/göz ardı edilmiş veriyi isterseniz adodb.recordset ile istersenizde sql ile dbnize eklersiniz bu işlem asp de veri döngülerine girdiğinden burada değinmeyeceğim



gelelim formlar haricinden yani stringlerden gelen verinin değerlendirilmesine vede temizlenmesine buradada benzer bir fonksiyon kullanacağız tek fark ise her hangi bir dbye veri girişi yapmayacağız sadece gelen gereksiz simgeleri temizleyip sayfada yorumlatacağız yada gereksiz değer var ise yorumlatmayı durdurup var ise hata yönetim sayfamıza yada onun alt döngüsüne iletebilirsiniz bunuda yukarıdaki örneklerden faydalanarak yapabilirsiniz

gelelim querystring ile aldığınız değerlerin temizlenmesine



öncelikle bir fonksiyon oluşturuyoruz ama ondan önce ufak bir şeye daha değinmek istiyorum yazılımlarınızda her sayfada ayrı ayrı fonksiyon kullanmaktansa bir sayfada yüzlerce fonksiyon kullanarak bunları aspe sayfalarınıza <!-- #include file="fonksiyon.asp" --> gibi ekleyerek kod kalabalığından kurtulursunuz neyse biz bu seferde veri okuttuğumuz sayfamıza bir fonksiyon yazıyoruz hemen yazalım kod aşağıda



<%

function security(data)

data = Replace (data ,"'","",1,-1,1)

data = Replace (data ,";","",1,-1,1)

data = Replace (data ,",","",1,-1,1)

data = Replace (data ,"%","",1,-1,1)

data = Replace (data ,"*","",1,-1,1)

data = Replace (data ,""","",1,-1,1)

data = Replace (data ,"--","",1,-1,1)

data = Replace (data ,"-","",1,-1,1)

data = Replace (data ,"/","",1,-1,1)

data = Replace (data ,"\","",1,-1,1)

data = Replace (data ,"And","",1,-1,1)

data = Replace (data ,"Delete","",1,-1,1)

data = Replace (data ,"Drop","",1,-1,1)

security=data

end function

%>



ben sizin için ufak bir fonksiyon oluşturdum birkaç tanede ek simge ekledim hani kafanıza belki bir şey takılır diye ancak burada çok önemli bir nokta var oda şu gördüğünüz gibi ben Drop And ve Delete Ekledim burası iyi hoş ancak saldırgan adres satırına delete şeklinde yazarsa bu fonksiyonumun hiçbir özelliği kalmak unutmayın ki string değer taşırken büyük küçük harfe duyarlıdır varın gerisini siz düşünün onun için oturup ta ne kadar sql işlem komutu varsa onları fonksiyona dahil etmek yerine ana işleyicileri iptal etmek en akıllıca sı bu fonksiyonu yazdık dan sonra şimdi rahatlıkla adres satırından değerimizi çekebiliriz



sayi = security(request.querystring("sayi"))



burada sayinin getirdiği değeri security fonksiyonumuza okutuyoruz ve ondan sonra sayi değişkenmize eşitliyoruz bunun yanında gereksiz ek kodlara gerek yok fazlada abartmanın manası yok ama seçim sizin her şeyi bilin ama isterseniz kullanın




Gelelim daha detaylı kısımlara yani üyelik sistemlerine aslında anlatacaklarım sadece üyelik sistemlerinde değil alış veriş sistemlerinde de kullanılan işlemler. Bu tarz yazılımlarda yukarıda bahsettiklerimin haricinde daha detaylı olarak cookieler ve sessionlar da kullanılıyor

Haliyle sistemin daha da iyi analiz edilmesi ve de kullanılan güvenliğin artması gerekiyor . Hemen kısaca cookileri ve de sessionları anlatayım . Cookiler kullanıcılın makinasına yazılımınız tarafından oluşturulup browser aracılığı ile yerleştirilen anlık yada uzun zamanlar kalması istenilen küçük veri depolarıdır . Bunlar isteğe göre kullanıcının pc sinde barındırılan ufak kurabiyelerdir diyebiliriz . İşlevleri hayal gücünüze kalmış bir şey . Sessionlar ise yani oturumlar ise internetin temelinde yer alan terimlerden bir tanesidir . Bir kullanıcı bir siteye girdiğinde ister kodlayın isterseniz kodlamayın ona bir oturum numarası yani session number verilmektedir . İşte biz burada verilen bu numarayı okuyacağız ve kullanıcımızı takip etmekten tutunda işlemlerini daha güvenli yapması için session numarasına göre ona özel tüneller oluşturmayı inceleyeceğiz . Ama öncelikle cookiler yani ufak tatlı kurabiyelerimiz



Şimdi sizlere öncelikle cookileri daha sonrada sessionları anlatacağım peşinede güvenli bir login sisteminin güvenlik kodlamasını yapacağız bunun sonunda da isterseniz yazdığınız bir giriş & üyelik sistemini yada veri sisteminin güvenliğini sağlayacaksınız .



Şimdi bir giriş sistemi hazırladınız cookiler nerede işinize yaracak . burası önemli çünkü sırf cookie kullanmış olmak için cookie kullanmaya gerek yok hem vakit hemde emek kaybı



Cookilerin bir sistemde kullanım alanı her zaman dediğim gibi sizin hayal gücünüzün sınırlarına kalmış bir şey bence de sınırı yok Bir ziyaretçinin yada bir üyenin sisteminize girdiğinde hatırlanması konusunda günümüzde çokça kullanılıyor bu durum aslında çokta güzel ancak güvenlik zaaflarına sebep oluyor burada biraz phpye dalmamız lazım phpnin geniş kütüphaneleri sayesinde aspnin yapamadığı bir çok şeyi yada eklentiler ile yaptığı bir çok şeyi yapabiliyorsunuz haliylede phpde port yönetimlerine kadar geniş bir yelpaze meydana geliyor burada hazırlanan basit php yazılımları ile basit ama sinsice bir cookie çalma aracı meydana getirilebiliyor bu durum temelde ie nin açıklarından kaynaklanıyor ve olayın sonucunda girmiş olabileceğiniz bir web sayfası yüzünden pcnizdeki herhangi bir cookie başka bir kişiye yada kişilere anında yollanıyor ve sizin kullanım hakkınız olan sayfalara girme hakları elde ediliyor tabiki burada girmiş olduğunuz sayfanında önemi büyük her sitenin cookiesi çalınamıyor tabiki burası ayrı bir konu iyi bir sistemde cookie çalınması gibi bir durum söz konusu olmuyor . Yukarıda anlattığım basit örnek gibi bir sürü örnek verilebilir her neyse eee bu kadar büyük sorunlara neden olabilecek ancak bir o kadarda işe yarayan cookieleri kullanıyorsak nasıl kullanmalıyız



Şimdi arkadaşlar bir cookie hazırlatacaksınız cookiede nelerin tutulacağına iyi karar vermelisiniz yani direk user ve pss. bulunduracanığınız bir cookie hiçte hoş olmaz aynı zamanda basit olur . bir net cafeden düşünsenize yüzlerce cookie alabilirsiniz . sizin kullanıcınızında bunlardan biri olabileceği muhtemeldir . O zaman cookiede direk user ve pss. tutmak yerine tutacağınız verileri farklı tanımlar ile tutabilirsiniz örneğin şifreyi tutmazsınız da sadece user ve kullanıcının yetkisini belirten bir değer bırakabilirsiniz ancak buradada bir sürü sorun meydana gelebilir .Birde cookileri zaman aralıklarına göre tanımlayabilirsiniz istediğiniz sürede silinmesini yada zaman vermeden tarayıcı penceresi kapatılmasının ardından silinmesini sağlayabilirsiniz. Her neyse cookileri bu kadar incelemek kafi bence zaten güvenlikleri sağlarken bu konuya daha detaylı değineceğim . Ama cookilerin Asp sayfalarında nasıl oluşturulduğunu nasıl okunduğunu hemen göstereyim



Response.Cookies("vampire")="True"



şeklinde bir cookie yaratabilirsiniz bu cookienin içinde sadece true yazısı bulunacak yada daha komplike bir cookie yapabilirsiniz mesela



Response.Cookies("Turx")("vampire")="True"



Burada yaptığım ise turx isminde bir cookie oluşturmak vede vampire ismine true değerini atamak işlevi aynı fark olarak diyelim aynı alt yapı ile farklı sistemler yazdınız aynı anda ikisinede girmeye çalıştığınızda cookie tanımlamaları aynı olduğu için her iki sistemde de işlevleriniz karışacaktır ancak farklı isimler verdiğiniz zaman herhangi bir sorun çıkmayacaktır ayrıca hazırladığımız cookilerde herhangi bir zaman belirteci bulunmadığından tarayıcı penceresinin kapanması ile cookielerimizde silinecektir bunun yanında cookielere dbnizdeki bir değeride atayabilirsiniz oda şöyle öncelikle db bağlantılarımızı ve tablo bağlantılarımızı yapıyoruz



sql = ("Select * From tablo ")

set Veriler=vampire.execute(Sql)



bağlantımızı sağladıkdan sonra

verimizi çekiyoruz vede cookiemize yolluyoruz



Response.Cookies("Turx")("atanacak_veri_adi")=veri ler("dbdeki_isim")



aslında bu biraz karışık gelebilir birde recordset kullanarak aynı işlemi farklı isimler ile yapayım isteyen istediğini kullansın



Set Control = Server.CreateObject("ADODB.Recordset")

sql = "Select * from tablo"

Control.Open sql,UserLogBag,1,3





Response.Cookies("turx")("vampire")=control("deger ")



bu cookielerimizi okuyup hemen diğer konumuz olan sessionlara geçelim



<%Response.write ""& Request.Cookies("turx")("vampire") & ""%>

<;;span style="">

şeklinde okuyup sayfanıza yazdırabilirsiniz



burada db bağlantımı vede tablo bağlantımı yaptıkdan sonra ( db bağlantısını herhangi bir ortak db yer tanım dosyası ile yapabilirsiniz burada sadece tablo bağlantısını yapıyorum dbye bağlanıldığını var sayıyorum ) turx isimli cookieyi oluşturup içine vampire isimli bir tanım oluşturup control bağlantı nesnesi ile dbden degerin karşıladığı değeri çekip vampireye eşitliyorum . umarım anlaşılır olmuştur cookilerin kısacık özeti cookieleri bir kitap ile ancak anlatabiliriz aslında ...

 
Alıntı ile Cevapla

IRCForumlari.NET Reklamlar
sohbet odaları reklam ver Benimmekan Mobil Sohbet
Cevapla

Etiketler
asp, basit, duzeyli, düzeyli, guvenlik, güvenlik, orta, ve, yazilimlarinda, yazılımlarında


Konuyu Toplam 1 Üye okuyor. (0 Kayıtlı üye ve 1 Misafir)
 

Yetkileriniz
Konu Acma Yetkiniz Yok
Cevap Yazma Yetkiniz Yok
Eklenti Yükleme Yetkiniz Yok
Mesajınızı Değiştirme Yetkiniz Yok

BB code is Açık
Smileler Açık
[IMG] Kodları Açık
HTML-Kodu Kapalı
Trackbacks are Kapalı
Pingbacks are Açık
Refbacks are Açık


Benzer Konular
Konu Konuyu Başlatan Forum Cevaplar Son Mesaj
Sığır Hastalıkları - Basit Hazımsızlık (Basit İndigesyon) Hastalığı Lilith Hayvan Hastalıkları 0 17 Eylül 2014 20:06
Düzeyli ve dürüst olun! Cemalizim Haber Arşivi 0 15 Mayıs 2009 00:42