[FONT=Verdana, Arial, Helvetica, sans-serif]Formdan gelen verilerin
güvenlik kontrolünün yapılması[/FONT]
İleride Form' dan gelen bilgileri böyle Browser penceresine değil de ya bir metin dosyasına ya da Veritabanına kaydedeceğiz demiştim. Hal böyle olunca, internet ortamında Pollyanna gibi her zaman iyi niyetli, iyi düşünen insanlar olmadığını da varsayarak Form'larımızda güvenlik kontrolü yapmamız gerekecektir. Bu neden gereklidir? Hemen onu da açıklayayım. Dedik ya, hep iyi insanlar çıkmaz karşımıza diye. Bu iyi olmayan (aslında iyi olan ama çizgi filmlerde hep kötü insanlara özenen kişilerdir bunlar!) kişiler Form' dan bize gönderdiği bilgilerin içine bazı kodlar yazarlar ve bu kodlar ile bizim sitemizi bulunduğu Server' dan alıp başka bir yere yönlendirme bile yaparlar.. Biz de bunları düşünerek hep iyi niyetli olamalıyz. Tedbirimizi almalıyız değil mi? Şimdi bir örnek yapalım. Daha sonra söylecek çok sözümüz var! Önce bir form sayfası yapalım, daha sonra hem bu formun içindekiler işleyen hem de denetim yapan bir asp sayfası yazalım.. Buyrun:güvenlik kontrolünün yapılması[/FONT]
<html>
<head>
<title>Asp ile Avcılık </title>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-9"> <meta http-equiv="Content-Type" content="text/html; charset=windows-1254">
</head>
<body>
<p>
<b> Merhaba Form Sayfamıza Hoşgeldiniz.. Lütfen Form'u eksiksiz doldurun! </b>
</p>
<form action="denetle.asp" method="post">
<p> <input type="text" name="adi"> </p>
<p> <input type="text" name="soyadi"> </p>
<p> <textarea name="mesaj">Mesajınızı buraya yazın. </textarea> </p>
<p> <input type="submit" name="Gönder" value="Gönder"> </p>
</form>
</body>
</html>
Bu basit form sayfasını form.htm adı ile kaydedin.. Şimdi de bu Form' dan gelecek bilgileri denetleyecek olan asp sayfamızı yazalım:
<% @LANGUAGE=VBScript %>
<html>
<head>
<title>Asp ile Avcılık</title>
<%
Function avla(byval hedef)
hedef = replace(hedef, "'","''")
hedef = replace(hedef,"_","")
hedef = replace(hedef,"*","")
hedef = replace(hedef,"?","")
hedef = replace(hedef,"%","")
hedef = replace(hedef,"<","")
hedef = replace(hedef,">","")
hedef = replace(hedef,"'","''")
hedef = replace(hedef,"chr(13)","<br>")
avla=trim(hedef)
End Function
%>
<%
bos=""
Adi = Trim(Request.Form("adi"))
Adi = avla(Request("adi"))
if adi="" then bos=bos + "İsminizi girmemişsiniz.<br>"
Soyadi = Trim(Request.Form("soyadi"))
Soyadi = avla(Request("soyadi"))
if soyadi = "" then bos=bos + "Soyadınızı girmemişsiniz. <br>"
Bilgi = Trim(Request.Form("mesaj"))
Bilgi = avla(Request("mesaj"))
if Bilgi = "" then bos=bos + "Mesajınızı yazmamışsınız. <br>"
Bilgi = Replace(Bilgi, vbcrlf, "<br>" & vbcrlf)
if bos <> "" then
bos=bos + "<br><a href=javascript:history.back()> << Geri Dönmek içinTıklayınız.</a>"
bos = "LÜTFEN AŞAĞIDAKİ EKSİKLİKLERİ DOLDURUP, FORMU YENİDEN GÖNDERİNİZ...<br> <br>" + bos
%>
</head>
<body>
<% Response.Write (bos) %>
<% else %>
<b>
Form'dan gelen bilgi:<br>
Adı: <%= Adi %> <br>
Soyadı: <%= Soyadi %> <br>
Mesaj: <%= Bilgi%><br>
</b>
</body>
</html>
<% End If %>
Uzuunca bir kodlamanın ardından bu sayfayı denetle.asp adı ile kaydedin. Zaten form.htm sayfamızın action bölümünde bunu belirtmiştik. Yani denetle.asp sayfasına git demiştik.. Şimdi form.htm sayfasını Web Server' da çalıştırın ve boş olarak gönder deyin.. Sonuç?
Şimdi kodlarımızı inceleyebiliriz.
form.htm sayfasında incelenmeye değer pek birşey yok.. Her zamanki form sayfası.. Önemli olan bu form sayfasında gelen bilgileri işleyecek olan aynı zamanda bir de denetleyecek olan denetle.asp sayfasıdır. Bakalım denetle.asp sayfasında neler yapmışız?
Öncelikle sayfanın en başına bu sayfada VBScript kodları yazacağız dedik. <html> <head> ve <title> satırlarını geçtikten sonra head ' ı kapatmadan denetlemeye başlıyoruz. Bunu bir fonksiyon (function) ile yapıyoruz. Fonksiyonumuzun adı avla. Bize zarar verebilecek karakterleri avlıyoruz. Hedefleri belirliyoruz. Mesela hedefimiz bir " < " küçüktür ya da ">" büyüktür işareti olabilir. Html kodları bunların arasında yazıldığından bize zarar verebilirler. (Çok karamsar olduk çook!)
Hedefleri ve avlamamız gereken işaretleri belirledikten sonra fonksiyonumuza son veriyoruz.
End Function
Daha sonra formdan gelen bilgileri hem işliyor hem de denetliyoruz. Adi isimli değerimizi ele alırsak:
Adi = Trim(Request.Form("adi"))
Adi = avla(Request("adi"))
if adi="" then bos=bos + "İsminizi girmemişsiniz.<br>"
Burada öncelikle adi olarak gelecek bilginin yanlarındaki boşlukları temizliyoruz. Daha sonra avla fonksiyonunu kullanarak bir denetleme yapıyoruz. If deyimi ile de adi alanının boş olup olmadığını sınıyoruz. Eğer boş ise sayfaya "İsminizi girmemişsiniz" yazdırıyoruz.
Aynı şeyleri diğer alanlarımzı için de tekrarlıyoruz. Amacımız alanların boş olmaması ve istemediğimiz karakterlerden arındırılması..
Alanları kontrol ettikten sonra formu dolduran kişi eğer formu doldurmadan gönder demişse ya da istemediğimiz karakterleri yaptıysa form işleme işlemi duracak ve şu hata mesajını verecek: "LÜTFEN AŞAĞIDAKİ EKSİKLİKLERİ DOLDURUP, FORMU YENİDEN GÖNDERİNİZ..."
Formu dolduran kişi o anda hatasını anlayacaktır ve geri dönüp formu doldurmak isteyecektir. Biz de bir önceki sayfaya gitmek için bir link yazıyoruz.
Formu dolduran kişi bu sefer formu eksiksiz doldurduğunda ve gönder dediğinde form normal bir şekilde işlenecek ve formu dolduran kişinin bize verdiği bilgileri sayfaya yazacaktır.
Bu derste akıllı bir form işleme sayfası yazdık. Bu bile VBScript ile yazılan Asp sayfalarının ne kadar akıllı olduğunun kanıtı olabilir. Ama bu akıl biz olmadan hiç birşeye yaramaz.. Bu yüzden bu aklı çalıştırmak için mümkün olduğu kadar çok araştırmalı ve öğrenmeliyiz.. Unutmayın bu aklın bize ihtiyacı var...