Anasayfa > Programlama > Asp ve .NET > Web tabanlı yazılımlarda güvenlik
Makaleye verilen puanlar Makaleye verilen puanlar Makaleye verilen puanlar Makaleye verilen puanlar Makaleye verilen puanlar

Web tabanlı yazılımlarda güvenlik




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")=veriler("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") & ""%>

 

ş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 ...

 

Gelelim sessionlara . Yukarıda da anlattığım üzere sessionlar bir ziyaretçinin yada bir kullanıcının server tarafından atanan oturum numarasıdır ki bir çoğunuz bu numaralara tanık olmuşsunuzdur . Görmeseniz bile bir sürü sistemde arka planda veri iletimlerinde bir köprü görevi görmekteler . En güzel yanlarından bir tanesi değerlerin serverda tutuluyor olması ve hazırlayacağınız sistemde herhangi bir şekilde kayıt etmediğiniz takdirde tarayıcı pencresi kapatıldığında siliniyor olmaları örnek olarak diyelim ramstation isimli bir kullanıcı sisteminize girdi server ona yine örnek olarak 3526954 gibi bir session atadı kullanıcı tarayıcı pencresini kapattığı anda bu numara silinir ayrıca sitedeki ziyaretçilerin her birine ayrı ayrı session numaraları atanır ve aynı numara farklı kullanıcılara verilemez . Siz yazılımınızda bu numaraları açığı çıkararak kullanıcınızın ipsinide aldırarak o sessionun hangi işlemleri yaptığını zaman olarakda basit kodlarla görebilirsiniz . Ancak sessionların bundan daha önemli işlevleride var bunlardan bir tanesi her kullanıcıya ayrı bir numara veriyor olmasından dolayı bir veri ekleme düzenleme yada silme işleminde bu numarayı kullanarak gerek bir anda yüzlerce verinin girilmesini engelleyebilirsiniz gereksede tarayıcı haricinde saldırı programları ile formlarınız aracılığı ile saldırıların yapılmasını engelleyebilir yada daha ileri giderek o kullanıcıyı sistemden atabilirsiniz Hayal gücünüze güveniyorsanız sorun yok. örnek olarak hemen session alımını göstereyim detaylı kullanımada ilerleyen sayfalarda geçeceğim

 

öncelikle session değerimizi yakalamayı öğrenelim bu şekilde session değerini yakalayabilirsiniz yakaladıktan sonra herhangi bir post yada get işleminde kullanabilirsiniz

 

<%=session.sessionID%>

 

şimdide örnek olsun diye bir post işleminde onu kullanıma açalım 

 

<form method="POST" action="loggin.asp?vampire=<%=session.sessionID%>">

artık sessionumuzu görebiliriz vampire tabımız session değerimize eşit durumdadır 

Şimdide sessionumuzu basit bir rasgele veri üretici bir kod yazalım vede sonucu hem sayfaya yazdırıp hemde sessiona atayalım oluşacak rasgele verimiz 6 karekter uzunluğunda olsun ve sayı harf ve simgeleri kapsayacak şekilde olsun

 

<%

For i = 1 To 6 ' For döngüsü ile başlıyoruz

Randomize

bas=33

son=125

rasgele61=rasgele61 + chr(int((son - bas + 1) * rnd + bas))

Next

session("trabzon")=rasgele61 ' sessionumuzu trabzon ismi ile oluşturup rasgele oluşturtuğumuz değerimize

'yani rasgele61 e eşitliyoruz daha sonrada sayfaya yazdırıyoruz

Response.write "<center>"&rasgele61

%>

 

 

yukarıda basit olarak 2 şekilde session tanımlamalarını kullandık buradan çıkaracağımız sessionların oturum değeri olduğudur vede yazılımcı tarafından da belirleneceği gibi kendimizinde bir session oluşturabileceğidir ama genelde session olarak serverın oluşturduğu değer kullanılır. Sakın yanlış anlaşılmasın sessionlar sadece server tarafından üretilmez yukarıda biraz daha kolay anlaşılabilir olması amacı ile serverler tarafından oluşturulan session tanımlarını anlattım buradada tanımlamamı biraz daha açarak session un nedemek olduğunu kavratmaya çalıştım . Yoksa sessionlara köprü der geçerdim sessionlarda cookieler gibi bir sürü ara tanım içermektedir vede anlatılması bir kitap alır .

 

 

Evt bu kadar session ve cookie işleminden sonra bu makelenin asp bölümünün son kısmına geçelim vede Asp bölümümüzü bitirelim . Yukarıda anlattığım kullanımları dolaylı yada direk olarak birazdan bizlere lazım olacak bunuda bilmenizde yarar var ...

 

Arkadaşlar bir sisteminiz var ya üye girişi yada üye kayıtı ve girişi yada editör yönetim paneli kısacası veri işlemleri yapılabilecek bir yazılımınız var vede bu sistemde herkesin hakkı dahilinde işlemler yapmasını sağlıyor . Haliyle sisteminizi yetkileri dahilinde herkes kullanmak istemeyecek yada yetkilerini aşmaya çalışacak kullanıcılar olacaktır işte burada ben sizlere bir giriş sistemi tasarlayacağım vede siz bu giriş sisteminden kendinize yeni sistemler oluşturacaksınız yada veri ekleme sistemlerinizi yeniden şematize edeceksiniz . Yani aşağıda anlatacağım mevzu tamamiyle bir login sistemi şeklinde olacak . Bizde sistemimizin güvenliğini nasıl sağlayabileceğiz onu göreceğiz

 

Şimdi bir üye giriş panelinde temelde var olacak iki form vardır bunlardan biri kullanıcı adının yazıldığı diğeride kulanıcının şifresini yazdığı formlardır bunun yanında isteğe göre başka verilerinde girilerek daha çok sorgu sağlanarak girişlerin kontrol edilmesi sağlanabilir . Tabiki bu söylediklerim her sistemde olacak diye bir kayde yok isteyen istediği gibi yazar .

 

 

Öncelikli olarak yapmamız gereken sistemimize başkalarından önce kendimizin saldırması ve güvenlik analizinin yapılmasıdır . Diyelim ki sistemimizde yaptığımız analizlerde sql injection açıkları ek yazılımlar ile brute force saldırı tekniğinin yada aklınıza gelebilecek diğer saldırı şekillerinin hepsi işe yarıyor vede sisteme giriş yapılıyor paniğe gerek yok her şeyin ilacı dünyada var sadece bulmak önemli .

 

 

Yapacaklarımızı sıralayacak olursam

 

Formlarda sınırlamalar yapmak bunlarda gerek karekter sayısının düzenlenmesi

Her oturuma numara vermek yani sessionların kullanımı

Sayfalara süre tanımlamaları Koymak ( Belli zaman aralıkları ile işlem hakkı tanınması )

Güvenlik kodu eklenmesi

Formlara girilen sql injection karekterlerinin yada kodlarının temizlenmesi

Cookielerin Kullanımların gözden geçirilmesi ve cookie kullanım&okuma işlemlerinde revizyonların yapılması

Son olarakta Kullanıcı şifrelerinin kriptolanması

 

öncelikle formlarımızdan fazlaca karekter girilmesini engellemeliyiz ki bu basit bir olay ancak geçilmeside basit ama ben geçilmesini değilde karekter sınırının konulmasını göstereceğim bu sayede sisteme giriş deneyen kişiler giriş sayfasında belirlediğiniz karekter sayısı dışında karekter girmesini engelleyebilir vede uzun olan sql injectionlardan bir nebze kurtulmuş yada saldırıları yavaşlatmış olabilirsiniz

 

kullanacağımız kodu yazayım hemen

 

maxlength="6"

 

işte kullanacağımız kod bu buradaki sayı değeri kullanıcının girebileceği karekter sayısını belirliyor vede o sayıdan fazla karekter girilmesini engelliyor örnek bir form ile gösterip devam edeyim

 

 

<input type="text" name="vampire" maxlength="6" >

 

 

yukarıdaki tanımda sizlerinde gördüğü gibi vampire isimli forma sadece 6 karekter girilmesini tanımladım bu basit bir engelleme methodu bunu javasc. ile de yapabilirsiniz vede geçilmeleri gayet basit kaldiki biz basit önlemlerden başlayıp en yukarıya kadar devam edeceğiz .

 

gelelim her oturuma numara atanmasına vede bunumarayı sorgulatmaya öncelikle bu işlemin yararını anlatayım yukarıda yazmış olduğum saldırı yöntemlerinden bir tanesi olan brute force saldırı yönteminde sisteminize giriş denemeleri yapılarak kullanıcılarınızın şifreleri bulunabilir yada ziyaretçi defteri gibi uygulamalarınıza 5 sn içinde 500den fazla post atılabilir tabiki bu tarz saldrıların meydana gelmesini kimse istemez işte oturum numarasını da sayfamızda veriler ile post ederek basit bir güvenlik kalkanı meydana getireceğiz 

 

hemen başlayalım 

 

öncelikle kullanıcı ve şifrenin yazıldığı sayfada işlem yapacağız 

 

mesela 

 

<form method="POST" action="loggin.asp">

 

şeklinde bir giriş sorgulama işlemimiz olsun burada formlara girilen veriler post methodu ile loggin.asp karşılaştırılarak sizin kodladığınız mekanizmanın işlemesi sağlansın forma veri girilen sayfamızda yapacağımız işlemimiz oldukça basit 

 

yukarıdaki işleme hemen bir değişken ekleyip o değişkenede session numarasını taşımasını söyleyeceğiz yani

 

<form method="POST" action="loggin.asp?vampire=<%=session.sessionID%>">

 

bunu yaptığınızda artık her işlemde adres satırında loggin.asp şeklinde giden bir sorgu yerine loggin.asp?vampire=546555564

gibi bir şekilde postunuz gidecektir buradaki sayıları salladım o sayıları server kendisi verecek burada yaptığım aslında session nesnesine sessionidyi yani oturum numaramızı eşitlemek onuda bir değişkene atayarak başka bir sayfa adres satırı aracılığı ile taşımak bu işlemi cookiler ile de yapabilir yada numaranın görünmesini basitçe engellemek için gizli formlar aracılığı ilede taşıtabilirsiniz 

 

gelelim loggin.asp ye dananın kuyruğunun koptuğu yer bu sayfamızda bir if else yapısı kurarak adres satırından gelen değerin vampire değişkenine atatığımız değerin olup olmadığını sorgulayacağız genelde yazılan brute force yazılımları çok komplike diildir tabiki bunlar piyasaya sürülenler için geçerlidir daha komplike olanlarda daha farklı yöntemler uygulanıyor mesela kendi sayfa tarama motoru yazılmış olanlarda var neyse alacağımız güvenlik önlemlerinden sonra hiç birinin bir ehemmiyeti kalmayacak 

 

if else yapımız

if NOT request.querystring("vampire") = session.sessionID then

response.write "<br><br><br><center>Hata !<br><br><center>"

response.write "<center>Session Kayıtları Uyuşmuyor !"

response.end

else

end if

 

burada vampire değişkenini adres satırından aldırıyoruz vede bir önceki sayfada yaptığımız işlemi aynen tekrarlıyoruz şayet değişkenin taşıdığı değer doğru değilse hata mesajımızı yazdırıyoruz ve sayfadaki sorgulamayı durduruyoruz değer doğru isede herhangi bir şey yapmadan sorgulamaya devam ediyoruz orta düzeyli bir brute force yazılımında yada post atackerlarda sessionlarla ilgili bir şey bulunmadığından saldırı burada kesiliyor haa geçemez demiyor geçsin daha çok engelimiz var :)

 

Gelelim Sayfalara süre kısıtlamasının eklenmesine bu aslında saldırıların bir çoğunu yavaşlatacak olan hatta saldırganı bıktıracak önlemlerden bir tanesidir çünkü sayfada bir işlem süresi olduğundan bir oturum belirlediğimiz süre haricinde o sayfada sayfa yenileme dahil hiç bir işlem icra edemez hemen kodu yazayım . Kodu yaklaşık 2 yıl önce yazmıştım ve ilk defa bir dökümanımda göz önüne sunuyorum çok abartılı birşey diil ama çok işe yarıyor vede sadece formlarda değil sitenizin her tarafında kullanabileceğiniz güzel bir yazılım bloğu gereksiz sayfa çağırmaları engelleyerek bdnizin gereksiz yere harcanmasını engelleyebilirsiniz tabiki bu durum büyük yazılım ile çalışan sitelerde gözle görülür bir kazanç sağlar .

 

Bu kodumda yine sessiondan yararlanacağız sayfanın başından sonuna kadar sayfayı bir havuza alıp saklayacağız 

 

öncelikle sayfanızın başına 

 

<%start_time = timer%>

 

kodunu ekleyin bu sayede sayacımızı başlatmış olacaksınız 

 

daha sonrada sayfanızın kaç sn. de bir görüntülenmesini istediğinizi tanımlayacağız bu kodu geliştirerek tüm sisteminizde uygulayabilirsiniz birde bu kod her kullanıcı için ayrı çalışır yani sitedeki her kullanıcı için bağımsızdır 

 

<% gececek_sure = 5 'Saniye cinsinden %>

 

<%

if timer-session("zaman") < gececek_sure then

  response.write "<center><br>Sayfayı Tekrar Görmek İçin "&gececek_sure&" Saniye Geçmesi Gerekiyor ."

  response.write( "<br><center>Henüz &nbsp;" & timer-session("zaman") & " saniye geçti." )

 session("zaman")=timer

 else

  session("zaman")=timer

 

%>

 

yukarıda session adımız zaman olarak tanımlanmış durumda bunu her sayfa için değiştirebilirsiniz ayrıca gececek_sure tanımınıda her sayfa için değiştirebilirsiniz bu koduda sayfanızın başına ekledikten sonra sayfanızın kodlarının en sonuna 

 

<%end if%> 

 

yazrak if sorgumuzu bitiriyoruz bu sayde sayede sayfalarımızın gereksiz yere refeshlenmesi yada uzaktan brute force yapılmasını bir kademe daha engellemiş oluyoruz 

 

Bu güvenlik önlemimizi aldıkdan sonra gelelim Güvenlik kodu konumuza

 

Sizlerinde gördüğü üzere son yıllarda hatta son bir yılda bir sürü sitede bir yere mesaj atarken yada bir sorgu yaparken karşınıza harflerden yada rakamlardan yada başka simgelerden oluşan resimler yada yazılar çıkmakta çıkan değeri forma girmediğiniz takdirde işleminiz yapılmamakta şimdi bu işlemide yapacağız . Ancak güvenlik kodu mantığı hakkında ufak bir kaç bilgi vermekte fayda var . 

 

Güvenlik kodu gereksiz sorgulardan brute force yazılımlarından ve aklınıza gelebilecek her türlü gereksiz işlemden bir formu korumak için hazırlanan vede günümüzde en çok tercih edilen güvenlik yöntemidir aşılabilirmi evt aşılır ama oturup c de bir sürü kütüphane ile uğraşıp protokolleri çözecek bir yazılım hazırlayıp test etmeniz gerekiyor kaldıki bunu yapana kadar legal çalışmak daha iyi ayrıca ülkemizde daha bu konuda laftan öteye geçmiş bişe görmedim en azından öyle demem lazım :):) Anladınız siz onu ...

 

Şimdi oluşturacağımız güvenlik kodu uygulaması rasgele üretilen bir değerin bir sessiona atanması ve kullanıcının gördüğü değeri form alanına yazarak işlemini gerçekleştirmesine izin veren yada vermeyen bir bekçi niteliğindedir . 3 tür kullanımı vardır yada şöyle diyeyim güvenlik kodu sayfaya 3 şekilde yazdırılır bir normal text olarak 2.si serverınıza atacağınız vede güvenlik kodu oluşturan kodunuzun rasgele seçmesi için tanımladığınız resimler arasından resim seçip sayfaya yazdırması şeklinde 3. olarak aspde kullanımını pek göremeyeceğiniz jsp ve phpdeki grafik kütüphaneleri yardımı ile oluşturulan sanal resimler ile olur bu noktada genelde yani jsp ve php sayfalarında bir font dosyası baz alınır vede yazılan kod karekterleri o fonttan alır daha sonra üzerine arkasına falan çizgiler vs. ekleyerek sayfaya bastırır 

 

işte bu noktada her üç dildede sessionlar devreye girer oluşturulan kod hemen bir değişken ile bir sessiona atanır vede işlemin yapılacağı sayfada doğruluğu kontrol edilir . Asp de direk olarak grafik kütüphanesi olmadığından yani sanal grafikler üretmek için ek nesneleri serverınıza eklemeniz gerektiği için aspde genelde yukarıda anlattığım ilk 2 yöntem tercih edilir . Aslında AspJpeg i inlercesiniz sizde aspde kendi sanal grafiklerinizi oluşturabilirsiniz ama o kadar kasacağınıza oturun jsp kasın hem java öğrenirsiniz hem kendi servletlerinizi yazarsınız hemde java kütüphanelerini çözersiniz :) seçim sizin 

 

ben size burada ilk iki yöntemi anlatacağım kaldiki ilk iki yöntemin ayrıldığı noktalar çok az yani aynı kodlar üzerinden 3-4 satırlık bi değişim yapacağız zaten birinci kodun nasıl kullanıldığının bir kısmını yukarıda session konusunda anlatmıştım ancak ben baştan alacağım 

 

öncelikle kaç karekterlik bir güvenlik kodu oluşturacağımıza karar verelim burada kullanıcıyı fazla sıkmayacak bir sayı seçmemiz iyi olacaktır bu yüzden 4 karekter bence yeterli hemen kodumuzu yazıyoruz 

 

<%

For i = 1 To 4 ' For döngüsü ile başlıyoruz

Randomize

bas=33

son=125

rasgele61=rasgele61 + chr(int((son - bas + 1) * rnd + bas))

Next

session("trabzon")=rasgele61 ' sessionumuzu trabzon ismi ile oluşturup rasgele oluşturtuğumuz değerimize

'yani rasgele61 e eşitliyoruz daha sonrada sayfaya yazdırıyoruz

Response.write "<center>"&rasgele61

%>

 

şimdi bu kodda bir kaç yere değineyim öncelikle burada güvenlik kodumuz sayfaya response nesnesinin write modeli ile yazılıyor yani text olarak yazılıyor bunun şöyle bir dez avantajı var oturup gene çook kasan bir hacker bu kodu geçebilir yani üretilen güvenlik kodunu yazılımı ile alabilir ancak yukarıda anlattığım önlemlerin varlığından dolayı bunun pekte faydası olmayacaktır kaldiki bu kodu sayfadan aldıracak olan kişi oturupta neden kassın ki sizin sitenizi ama yinede içiniz rahat olsun ülkemizde laftan öteye geçen pek yoktur geçeceklerde geçerler alacağını alır ve gider sizin haberiniz bile olmaz youtube.com örneğinde olduğu gibi neyse burası sizlere şu anda lazım diil 

 

ayrıca kodumuzda bir bas ve son tanımları var burada bas ve son a bir sayı değeri atıyoruz bu sayı değerleri ascii karekter aralığında alınacak karekterleri belirtiyor bence bilmiyorsanız kurcalamayın sonra yazamayacağınız kodlar üretir :) denemesi bedava daha sonrada matematiksel işlemler herhalde bunlarıda açıklamama gerek yok ki bence yok zaten kodu session kısmında anlattım buradada tamamladım bu kodu yazdıktan sonra oluşan güvenlik kodumuzun bir forma yazılması gerekiyor çünkü karşılaştırma sayfamızda trabzon isimli session ile formdan gelen güvenlik kodumuzu karşılaştıracağız yani burada aslında yazılım hangi karekterlerin girildiğini her zamanki gibi bizim gözümüz ile algılamıyor :)

 

hemen basit güvenlik kodumuzun girileceği basit bir text oluşturalım vede form imside guvenlik olsun

 

<input type="text" name="guvenlik" maxlength="4" >

 

yani oluturduğumuz kodlarımızın geneli aşağıdaki gibi olacak zaten makalenin sonunda bu güvenlik önlemlerinin uygulandığı kodları bir bütün olarak sunacağım

 

<form method="POST" action="loggin.asp">

<%

For i = 1 To 4

Randomize

bas=33

son=125

rasgele61=rasgele61 + chr(int((son - bas + 1) * rnd + bas))

Next

session("trabzon")=rasgele61

Response.write "<center>"&rasgele61

%>

  <p><input type="text" name="guvenlik" maxlength="4" ><input type="submit" value="Gönder" name="B1"></p>

</form>

 

gördüğünüz gibi güvenlik kodu işlemimiz hazır şimdi ise bunların kontrol edilmesi ve gelen veriye göre işlem yapılmasını halledeceğiz ancak text olarak değilde resimlerden faydalanarak güvenlik kodu üretmek isteyebilirsiniz bunu yapmakta aslında basit kullandığımız for döngüsünde birkaç tanımsal değişiklik ve de bir function hazırlayarak bunu da halledeceğiz hemen kodu yazayım

 

Koda geçmeden önce birkaç şeyide belirtmekte fayda var güvenlik kodumuzu oluştururken verdiğimiz ascii karekter aralığı önemli bu noktada çünkü kodumuz bu sefer imaj dosyalarından faydalanacağı için ürettiği karekterin imaj dosyası yoksa ekranda güvenlik kodu eksik çıkacaktır bu yüzden ben verdiğim ascii karekter aralığını sadece sayılardan oluşacak şekilde tanımlıyorum yani 0-9 aralığını veriyorum şimdi kodumuzu inceleyelim

 

<%

For  i = 1  To  4

Randomize

bas=48

son=57

rasgele61=rasgele61 +  chr(int((son - bas + 1) * rnd + bas))

session("trabzon")=rasgele61

Next

Function  Resim(sifrem)

sifrem = Replace (sifrem ,"0","<img border='0' src='guvenlik/0.gif'>",1,-1,1)

sifrem = Replace (sifrem ,"1","<img border='0' src='guvenlik/1.gif'>",1,-1,1)

sifrem = Replace (sifrem ,"2","<img border='0' src='guvenlik/2.gif'>",1,-1,1)

sifrem = Replace (sifrem ,"3","<img border='0' src='guvenlik/3.gif'>",1,-1,1)

sifrem = Replace (sifrem ,"4","<img border='0' src='guvenlik/4.gif'>",1,-1,1)

sifrem = Replace (sifrem ,"5","<img border='0' src='guvenlik/5.gif'>",1,-1,1)

sifrem = Replace (sifrem ,"6","<img border='0' src='guvenlik/6.gif'>",1,-1,1)

sifrem = Replace (sifrem ,"7","<img border='0' src='guvenlik/7.gif'>",1,-1,1)

sifrem = Replace (sifrem ,"8","<img border='0' src='guvenlik/8.gif'>",1,-1,1)

sifrem = Replace (sifrem ,"9","<img border='0' src='guvenlik/9.gif'>",1,-1,1)

Resim=sifrem

End  Function

Response.Write "<center>"& Resim(rasgele61)

%>

 

Gördüğünüz üzere bir function oluşturuyoruz ve de oluşan güvenlik kodumuza göre gelen rakamların imaj dosya yerlerini tanımlıyoruz bu kadar basit bu kodumu istediğiniz gibi editleyip kullanabilirsiniz ayrıca gördüğünüz gibi her rakamı tek tek tanımladım bu tanımları siz artırabilirsiniz  bunun haricinde function mantığını açıklarım fakat şu anda konumuz functionlar olmadığı için bu konuya girmeyeceğim

 

Şimdi imaj dosyaları ile güvenlik kodu üretimini gördükten sonra gelelim bunların kontrol edilmesine kullanıcı form alanına ne girdi doğrumu girdi doğru girdiyse ne yapılacak yanlış girdiyse ne yapılacak bunları kodlayalım hemen

 

Şimdi oluşturduğumuz güvenlik kodumuzu oluşturulduğu anda tanımladığımız bir sessiona atadığımız için kontrolümüzü bunun üzerinden yapacağız ki kullandığım ad trabzon du yani kontrolümüzü Trabzon isimli sessiondan yapacağım

 

<%

if  session("trabzon")=Request.Form("guvenlik")  Then

Session("trabzon")=""

Else

response.write "<br><br><br><br><br>"

response.write "<a href=javascript:history.go(-1);>  Lütfen Güvenlik Kodunu Doğru Giriniz... </a>"

Response.End

End  if

%>

 

gördüğünüz gibi kontrol işlemimiz çok basit yaptığımı hemen söyleyeyim şimdi Trabzon isimli sessionumuz vardı ve ekrana yazdırdığımız kodu kullanıcımızın guvenlik isimli form alanımıza yazmış olması gerekiyordu işte bende burada form alanına girilen kod ile session aracılığı ile taşıdığım güvenlik kodumu karşılaştırıyorum ve girilen kod doğru ise sayfanın geri kalan işlemlerini yapmasına izin veriyorum şayet doğru değilse de hemen hata mesajını yazdırıyorum ve yorumlama işlemlerini durduruyorum .

 

evt güvenlik kodu uygulaması bu kadar şimdi aslında güvenlik konusunda formlar ile ilgili yapılacak en iyi önlemlerden bir tanesini halledeceğiz oda formlara girilen verilerin incelenmesi ve kullanılmasına izin vermediğimiz karakterlerin temizlenmesi göreceğiz ve bu sayede form alanlarımızdan saldırılara maruz kalmayacağız başlayalım o halde

 

öncelikle örnek bir giriş formu hazırlayalım yine fakat burada yukarıda bahsettiğim güvenlik önlemlerini eklemeyeceğim tüm güvenlik işlemlerini öğrendikten sonra hepsini bir giriş sisteminde toparlayacağım şimdi hemen giriş sistemleri hakkında biraz bilgi edinelim aslında mantıkları oldukça basittir formlara girilen veriler belirtilen tabloda aranır karşılaştırma yapılır girilen bilgilerin tabloda herhangi bir eşleşmesi var ise giriş işlemi yapılıyor yoksa yapılmıyor mantık bu tabikide bu yöntem değiştirilebilir istediğiniz gibi yapabilirsiniz ancak giriş sistemlerin çoğu böyle çalışır . tabiki her kes iyi niyetli girişler yapmayacağına göre bizde hemen güvenlikli bir sistem hazırlayalım . Burada kullanacağımız bir function kodlayacağım vede formları o function ile kontrol edeceğim istemediğim karekterler var ise onları değiştireceğiz ve sistemimizi güvenlik altına alacağız . Başlıyoruz kemerlerinizi bağlayın …

 

öncelikle Kullanıcı adı ve psswd nin girileceği alanlarımızı html olarak oluşturalım

 

<form method="POST" action="loggin.asp">

  <p>Kullanıcı adı <input type="text" name="username" >&nbsp; Şifren

  <input type="text" name="userpass" ></p>

  <p><input type="submit" value="Gönder" name="B1"></p>

</form>

 

burada kullanıcının adını girdiği form alanın adı username olarak tanımladım şifresini girdiği alanı ise userpass olarak tanımladım bu sayfada şimdilik bu kadar şimdi giriş işleminin karşılaştırma sayfasını yazacağım ve yazarken güvenliklerini dahil edeceğim kendi yazdığım login sistemimde yaklaşık olarak 150 satır kod var html kodları hariç tabiki bu yazı dizimde komplike sistemleri ele almayacağım için bu tarz bir sistemi burada anlatmayacağım her neyse şimdi aspde üyelik ve giriş sistemlerine gelelim mantık her zaman olduğu gibi basittir istediğiniz kadar kullanıcıya soru sorarsınız kullanıcı bu soruların cevaplarını formlara yazar yada seçer ve sizde formlardan gelen cevapları tablonuzda kontrol ederek işlemi halledersiniz :) fakat yukarılarda bir yerde gene tekrarlamıştım bu işin temeli biz temeli aşacağız ve daha sağlam bir yapı meydana getireceğiz bir anlamda herkese ama herkese MEYDAN OKUYACAĞIZ okuyalım o zaman

 

şimdi öncelikle değineceğimiz alan functionlar hemen yazdığım functionu buraya ekliyorum bunu sistemimizde kullanarak gerekli temizleme işlemlerini yapacağız

 

burada yine kendi prensiplerimden vaz geçerek yazdığım sorgulama kodlarını paylaşıyorum vereceğim kodun içerisinde 3 adet sorgulama türü var mail adresi kontrol etme string temizleme form temizleme + post temizleme

 

 

<%

Function EmailKontrol(email)

                Dim regEx, Match, Matches

                If email <> "" Then

                               Set regEx = New RegExp

                               regEx.Pattern = "^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$"

                               regEx.IgnoreCase = True

                               If regEx.Test(email) Then EmailKontrol = True Else EmailKontrol = False

                End If

End Function

 

Function SQLInjectionKillers(strWords)

 

strBadWords = Array("SELECT", "DROP", ";", "--", "INSERT", "DELETE", "xp_", "UNION")

strBadWordsReplace = Array("&#83elect", "&#68rop", "&#59", "&#45&#45;", "&#73nsert", "&#68elete", "&#120p&#95", "&#85nion")

                                                              

For iSQL = 0 to uBound(strBadWords)

                strWords = Replace(strWords, strBadWords(iSQL), strBadWordsReplace(iSQL),1,-1,1)

Next

                                                              

SQLInjectionKillers = strWords

                                              

End Function

 

Function PostKontrol(GelenVeri)

                              

GelenVeri = Replace(GelenVeri, "<", "&lt")

GelenVeri = Replace(GelenVeri, ">", "&gt")

GelenVeri = Replace(GelenVeri, "script", "&#115cript", 1, -1, 0)

GelenVeri = Replace(GelenVeri, "SCRIPT", "&#083CRIPT", 1, -1, 0)

GelenVeri = Replace(GelenVeri, "Script", "&#083cript", 1, -1, 0)

GelenVeri = Replace(GelenVeri, "script", "&#083cript", 1, -1, 1)

GelenVeri = Replace(GelenVeri, "object", "&#111bject", 1, -1, 0)

GelenVeri = Replace(GelenVeri, "OBJECT", "&#079BJECT", 1, -1, 0)

GelenVeri = Replace(GelenVeri, "Object", "&#079bject", 1, -1, 0)

GelenVeri = Replace(GelenVeri, "object", "&#079bject", 1, -1, 1)

GelenVeri = Replace(GelenVeri, "applet", "&#097pplet", 1, -1, 0)

GelenVeri = Replace(GelenVeri, "APPLET", "&#065PPLET", 1, -1, 0)

GelenVeri = Replace(GelenVeri, "Applet", "&#065pplet", 1, -1, 0)

GelenVeri = Replace(GelenVeri, "applet", "&#065pplet", 1, -1, 1)

GelenVeri = Replace(GelenVeri, "embed", "&#101mbed", 1, -1, 0)

GelenVeri = Replace(GelenVeri, "EMBED", "&#069MBED", 1, -1, 0)

GelenVeri = Replace(GelenVeri, "Embed", "&#069mbed", 1, -1, 0)

GelenVeri = Replace(GelenVeri, "embed", "&#069mbed", 1, -1, 1)

GelenVeri = Replace(GelenVeri, "event", "&#101vent", 1, -1, 0)

GelenVeri = Replace(GelenVeri, "EVENT", "&#069VENT", 1, -1, 0)

GelenVeri = Replace(GelenVeri, "Event", "&#069vent", 1, -1, 0)

GelenVeri = Replace(GelenVeri, "event", "&#069vent", 1, -1, 1)

GelenVeri = Replace(GelenVeri, "document", "&#100ocument", 1, -1, 0)

GelenVeri = Replace(GelenVeri, "DOCUMENT", "&#068OCUMENT", 1, -1, 0)

GelenVeri = Replace(GelenVeri, "Document", "&#068ocument", 1, -1, 0)

GelenVeri = Replace(GelenVeri, "document", "&#068ocument", 1, -1, 1)

GelenVeri = Replace(GelenVeri, "cookie", "&#099ookie", 1, -1, 0)

GelenVeri = Replace(GelenVeri, "COOKIE", "&#067OOKIE", 1, -1, 0)

GelenVeri = Replace(GelenVeri, "Cookie", "&#067ookie", 1, -1, 0)

GelenVeri = Replace(GelenVeri, "cookie", "&#067ookie", 1, -1, 1)

GelenVeri = Replace(GelenVeri, "form", "&#102orm", 1, -1, 0)

GelenVeri = Replace(GelenVeri, "FORM", "&#070ORM", 1, -1, 0)

GelenVeri = Replace(GelenVeri, "Form", "&#070orm", 1, -1, 0)

GelenVeri = Replace(GelenVeri, "form", "&#070orm", 1, -1, 1)

GelenVeri = Replace(GelenVeri, "on", "&#111n", 1, -1, 0)

GelenVeri = Replace(GelenVeri, "ON", "&#079N", 1, -1, 0)

GelenVeri = Replace(GelenVeri, "On", "&#079n", 1, -1, 0)

GelenVeri = Replace(GelenVeri, "on", "&#111n", 1, -1, 1)

GelenVeri = Replace(GelenVeri, "document.cookie", "&#068ocument.cookie", 1, -1, 1)

GelenVeri = Replace(GelenVeri, "javascript:", "javascript ", 1, -1, 1)

GelenVeri = Replace(GelenVeri, "vbscript:", "vbscript ", 1, -1, 1)

GelenVeri = Replace(GelenVeri, "'", "`")

PostKontrol = GelenVeri

End Function

function guvenlik61(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 ,"\","",1,-1,1)

data = Replace (data ,"And","",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 ,"delete","",1,-1,1)

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

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

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

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

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

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

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

guvenlik61=data

end function

 

 

 

%>

 

 

 

 

evt kodumu ekledim isteyen istediği gibi kullansın aslında en sonunda da yazacağım ama yazayım şimdiden kodu alıpta ben yazdım falan gibi saçmalıklarla dolaşmayın bir gün karşıma çıkar bu laflarınız bende her zaman yaptığım gibi sizi yerin dibine sokacağımdır . ilk olmayacaksınızdır rencide edeceğim sonda olmayacaksınız tabiki bu sözlerim kod araklayıcılara kaldiki ben istediğimi yazarım kod yazmaktan aciz olan vede kendini yazılımcı olarak adlandıran diplomalı yada diplomazsız beceriksizler her zaman bize muhtaç olacaktır

 

şimdi loggin.asp de gelen verileri aldırıp direk tablomuzda sorgulamayacağız öncelikle temizliğin yapılması gerekmekte hemen bunun için formdan verilerimizi çekip yukarıda sizlerle paylaştığım kodlarımın içinde var olan functionlar ile temizleme işlemlerine başlayıp sonuçları tablomuzda sorgulamalıyız aksi halde kapısı sonuna kadar açık olan bir eviniz var demektir

 

<%

PostUserName=SQLInjectionKillers(Request.form("username"))

PostUserPas=SQLInjectionKillers(Request.form("userpass"))

%>

 

burada username ve userpass dan gelen verileri aldım sqlinjectionkillers functionuma yolladım oradan gelen veriyide postusername vede postuserpas a eşitledim birinci temizliğimiz tamamlandı şimdi geçelim diğer temizliklere ama isterseniz burada da kesebilirsiniz temizliği biz devam edelim

 

<%

kullanici_adi=PostKontrol(PostUserName)

sifre=PostKontrol(PostUserPas)

%>

 

işte buradan sonra artık temizlenecek bir şey kalmadı neden gelen veriyi iki kere temizlemeye soktum çünkü ayrı ayrı functionlar içinde farklı terimleri temizliyordum yada şöyle diyeyim kendi yazdığım function kendi giriş mantığıma göre olduğundan dolayı hazırladığım örnekte ona göre oldu .

 

şimdi en son temizleme işleminden sonra artık kullanıcının yolladığı veri temizlendi bundan sonrası size kalmış istediğiniz gibi sorgulama yaptırabilirsiniz bir çok şekil var konumuz olmadığı için şu anda bu noktaya temas etmeyeceğim

 

evt geldik cookiler konusuna artık konumuzun bitmesine de az kaldı hemen konuya giriyorum

 

cookilerden yazımda hatırlayacağınız üzere daha önceden bahsetmiştim burada cookilerin nasıl kullanılması gerektiğini anlatacağım herhangi bir vs vermeyeceğim verilecek kodlarıda zaten daha yukarıda vermiştim

 

şimdi genelde cookiler üyelik sistemi olan yazılımlarda kullanıcıyı bir daha hatırlamak için kullanılır normalde güzeldir ama bir bence cookilerin bu tarz bir kullanımı gereksiz neden diyecek olursanız şifresini vede kullanıcı adını yazmaktan aciz olan insanların web sitelerinde işi yok bunun yanında internete giren bir çok kişi Windows kullanıyor buda o kullanıcının bilgilerinin güvende olmadığı anlamına geliyor temelde sorun varken bir sorunada neden sizin sisteminiz sebep olsun ki hadi diyelim auto login kullanacaksınız cookiede kalkıpta neden user ve şifre barındırılır işte bu gibi durumları engellemek için bir cookiede neler olması gerekiyor bunları anlatacağım . haa şunuda ekliyeyim otomatik loginlerde her zaman kullanılan cookilerde şifre ve kullanıcı adı olacak diye bir kaide yok ben genelde gördüklerimi söylüyorum isteyen istediği gibi yazar

 

şimdi bir cookie oluştururken cookienin içinde direk kullanıcı bilgilerinin barındırılmasının faydası kullanıcının herhangi bir yetki gerektiren işte cookieye başvurulup kim olduğu tanımlanır ancak sitemde cookie kullanımı doğru yapılandırılmadığından dolayı cookienin içinden bulunmaması gereken şeyler bulunur mesela yazılımcımı codermı artık ne derseniz deyin o zati muhterem birkaç satır kodu yazsa bu tarz sorunlar olmayacak sizlere tavsiyem bir cookie oluşturuyorsanız şöyle başlayabilirsiniz

 

şimdi Ahmet isimli bir kullanıcımız olsun bu kullanıcının idsini yada direk user ve şifresini cookiede barındırmak her ne sebeple yada süre ile olursa olsun güvenlik problemidir çalınma ihtimali düşüktür belki ama imkansız değildir . burada yazılımcı olarak şöyle bir mantık yaparsanız bu sorunların hepsinde kurtulursunuz bir üye kayıt olurken sistem ona rasgele bir üye değeri versin yani Ahmet kullanıcımızın dbdeki int. Haricinde birde kendininde bilmediği yada başka üyelerin göremeyeceği bir numarası olsun intsini kullanabilirsiniz ama bu genelde bulunur sistemin herhangi bir yerindeki sorgu karşılaştırmasında vsde ortaya çıkar buda geçmişte ortaya çıkan açıkları incelediğinizde cookie sömürüleri hep bu şekilde olmuştur kullanıcının idsi cookiede adam oradan tak her şeye ulaşıyor ancak sistem ona rasgele bir değer vermesi halinde tüm değerlendirmelerinizi sorgulamalarınızı o numara üzerinden yaparsanız hem işleriniz daha rahat olacaktır hemde daha güvenli bir cookie kullanımı meydana getirmiş olursunuz . Yada şöyle izah edeyim Ahmet kullanıcısına sistemimiz 878937ajıhıahud87661209 gibi bir user number verdi siz dbnizde oluşturacağınız bir rank sisteminde rütbeleri yerleştirirken hangi user numberın hangi rankın kullanıcısı olduğunu gösterip sorgulayabilirsiniz hem bu numarayı cookieye yollayarak sayfalardaki yetkilendirmelerdede kullanırsınız hemde userın kim olduğu belli olmaz ayrıca şifre vs gibi daha önemli bilgileri tutmamış olursunuz ancak bu numarayı kullanıcı haricinde hatta kullanıcınında bilmemesi gerekiyor ben kendime bile güvenmem açıkcası cookieler şimdilik bu kadar gelelim güvenlik konusundaki son konumuza

 

kullanıcılarımızın bilgilerinin yada şifrelerinin şifrelenmesi aspde pek görmeyeceğiniz yada serverınıza ekleyeceğiniz birkaç dll yardımı ile bunu yapabilirsiniz örneğin md5 kriptolama dllsini internetten indirip sisteminizde kullanabilirsiniz ancak geri dönüşümü büyük oranda başarılı olan kriptolama sistemlerini ben tavsiye etmem burada aslında yazılımcılığınızın ne durumda olduğunu görebileceksiniz kendiniz bir kripto hazırlayabilirsiniz buda uzun meşakkatli vede matematik bilgisi gerektiren bir işlemin sonucunda oluyor bu tarz kriptolar piyasada mevcut bunlarıda inceleyerek kullanıcıların şifrelerini şifreleyip güvenliğinizi daha da arttırabilirsiniz ben kendi kriptomu 1 ayda yazdım 435 satırdan oluşuyor içinde baya bir function matematik işlemi limit kare alma küp alma bölme çarpma var vede sonunda

 

6227ad13915f7b2w4d56295yg47d039931h90lqsnc77ad2f6tr6d03631ew76e3ft78vm93ctusdncvasgys21239sr5851d1f0ts4

 

yazdığım herhangi bir şifre yukarıdaki hale dönüyor herhangi bir şifre diyorum kırabilecek varsa şifrenin ne olduğunu görecektir

 

Evtttt bitti bu kadar daha yazasımda yok açıkcası yazılacak daha çok şey var ancak gerek yok şu anda şimdi ufak bir örnek hazırlayıp Asp Sayfamızı Kapatalım

 

Giris.asp ( Formlarımızın olduğu sayfamız )

 

<%start_time = timer

%>

<%

panel_giris = 5

 

if timer-session("zaman") < panel_giris then

  response.write "<br><br><br>"

  response.write "<title> Hata  </title>"

  response.write "<body bgcolor='#333333' text='#FFFFFF'>"

  response.write "<center><br><br><br><br><br><br><br><br><br><font face='tahoma' color=#0099CC 2"">Sayfayı Tekrar Görmek İçin </font><font face='tahoma' 2"" color=#FF3300>"&panel_giris&"</font><font face='tahoma' 2"" color=#0099CC> Saniye Geçmesi Gerekiyor .</font>"

  response.write( "<br><center><font face='tahoma' 2"" color=#0099CC>Henüz </font><font face='tahoma' 2"" color=#FF3300>&nbsp;" & timer-session("zaman") & "</font><font face='tahoma' 2"" color=#0099CC> saniye geçti.</font>" )

 session("zaman")=timer

 

else

 session("zaman")=timer

 

%>

<form method="POST" action="loggin.asp?vampire=<%=session.sessionID%>">

  <p>Kullanıcı adı <input type="text" name="username" maxlength="12" >&nbsp; Şifren

  <input type="text" name="userpass" maxlength="12" ></p>

  <%

For  i = 1  To  4

Randomize

bas=33

son=125

rasgele=rasgele +  chr(int((son - bas + 1) * rnd + bas))

Next

session("trabzon")=rasgele

Response.write "<font face=verdana color=white size=1><center>"&rasgele

%>

    <input type="text" name="guvenlik" maxlength="4" ></p>

  <p><input type="submit" value="Gönder" name="B1"></p>

</form>

<%end if%>

 

loggin.asp ( Giriş Ve Kontrol İşlemlerimizin Yapılacağı sayfa )

 

<%

if  session("trabzon")=Request.Form("guvenlik")  Then

Session("trabzon")=""

Else

response.write "<br><br><br><br><br>"

response.write "<a href=javascript:history.go(-1);>  Lütfen Güvenlik Kodunu Doğru Giriniz... </a>"

response.write "</font>"

Response.End

End  if

 

if NOT request.querystring("vampire") = session.sessionID then

                               response.write " <title> Oturum Hatası ! </title>"

response.write "<br><br><br><center>Hata !<br><br><center>"

response.write "<center>Sistem Oturum Numaranız Yanlış!"

response.end

else

end if

PostUserName=SQLInjectionKillers(Request.form("username"))

PostUserPas=SQLInjectionKillers(Request.form("userpass"))

%>

Yukarıda temizleme işleminin olması için verdiğim  functionları ya sayfanın başına koyacaksınız yada include edeceksiniz aksi halde temizleme işlemi olmaz

 

Daha sonrada tasarladığınız sistemde girişi yaptıracaksınız cookilerinizi oluşturacaksınız vs vs

 

 

 

 

 

Bitti…

 

 

Arkadaşlar başınızı şişirdim nickim fazlaca pcnizin ekranında gözüktü fazlasıyla saçma cümleler yazdım kırılan olduysa şimdiden özür dilerim

Umarım işinize yaracak bir satır bir şeyler sizlere katmışımdır

 

Okuyan herkesten ama herkesten uzun ricalarım var yok Türkçeyi bilmiyor yok kodları yanlış yazdı yok tanımları yanlış söyledi yok şu yok bu yok niye kaşının altında gözün var gibi gerzekçe yorumlar yapmayın hiçbir şey alıntı diil her şeyi tek tek yazdım eleştireceksiniz saygı duyarım saçmalayacaksınız gidin kafanızı duvarlara vurun yada daha iyisini yazın kişiliksizliğinizi benim üzerimde denemeyin her diyeceğinizin cevabını veririm ama kendinizi bana diil tüm dünyaya ispatlayın dünyada her şeyin bir görevi var lütfen sizin göreviniz gereksiz insan olmak olmasın . bir şeyden anlamıyorsanız komplekslerinizi yenemiyorsanız bunu yenmenin yeri internet yada yazılım değil yazılım dünyasında harcanan yüzlerce beceriksizlere +1 yapmayın Serverları meşgul etmeyin beni ise hiiç etmeyin belki sizin tek beceriniz tdk sözlüğünün web  sürümü olmanız ama o size kalsın bana lazım değil trabzonumda ( Memleketim ) öğrendiğim türkçem vatan sevgim bana yetiyor kimseyede NE KENDİMİ NEDE İNANDIKLARIMI KANITLAMAK VE İNANDIRMAK YADA İKNA ETMEK ZORUNDA DEĞİLİM beni beğenmeyenler vs vs olanlar umrumda bile değillll  uğraşmam gereken ve çözmem gereken ayak parmaklarımda dahil olmak üzere bir sürü projem işim saçmalığım var sizde kendinize güzel meşgaleler bulun yada Cin ali Serisini okuyun anca onu anlarsınız Cin Ali Okulda yakışır elinize mesela yazılarıda büyük rahat okuyup anlarsınız 7-8 kez okuyun haaa

Neden bu kadar uzun yazdım derseniz her postumdan her dökümanımdan sonra yani 8 yıl olacak nerdeyse gerzekler heeep beni buluyor mıknatısmıyım neyim anlamadım ki ve sıkıldım bu tarz kişiliksiz internet kafe çocuklarından yada memur zihniyetlilerden umarım bundan sonra daha olgun insanlar görürüm yorum yapan

 

Buradan her satırda benimle birlikte olan sigarama biten kahve poşetime vede Türkçe & yabancı rock gruplarına teşekkürler :):)

 

Forever Open Source ANd Linux ANd Solaris


Bu makale hakkında ek bilgi eklemek için buraya tıklayınız

Yazar & Kaynak: Vampire

Digg this Post! Add Post to del.icio.us Bookmark Post in Technorati Furl this Post!
Eklenme tarihi: 27-4-2007  Okunma: 1378

Ekleyen:  Vampire

Bu Makaleye Verilen Puan:    Makaleye verilen puanlar Makaleye verilen puanlar Makaleye verilen puanlar Makaleye verilen puanlar Makaleye verilen puanlar
Bu Makaleye Puan Ver  

Bölüm Başlık Kullanıcı Yorumları


Sancar SARP Sancar SARP

Tarih: 1-6-2007 7:29pm

Çok harika bir makale yazmışsınız tebrik ediyorum lütfen sancarsarp@hotmail.com adresimden bana ulaşın bir çok konuda sizinle bilgi paylaşımı yapabiliriz.

Reklam Netinternet
Bazı hakları saklıdır: İçeriğin editör ve yazarlarımız tarafından oluşturulan kısımları ve site tasarımının hakkı saklıdır.  Bu sayfa en iyi 1280x1024 ve 1024x768 çözünürlükte izlenir.
Powered by BilgiPortal v2.2
Resim Emlak Estetik Makale ADSL Teknik Servis Yorumlar Müzik estetik Ufo