Root > Documents > Web Güvenlik Açıkları > ASP & Basic Objects -1-
Cyber-Warrior.Org \ Doküman \ Web Güvenlik Açıkları > ASP & Basic Objects -1-
Madde
  Yazar : GangBoy
  Date : 23.11.2004 16:16:30
 
# ASP & Basic Objects -1-
 

S.a Arkadaslar

Bu dökümani okumanizi siddetle tavsiye ediyorum.
Herzaman isinize yariyacaktir.Bu dökümani ögrenme hevesi olan arkadaslara bir yol göstermesi ve ilk atilimi yaptirmak için yazdim.

Simdi baslayalim;

-Response Ve Request Nesneleri-

-Response nesnesi-

Response.Write
Response nesnesi asp nin bir nesnesidir ve ziyaretciye sunucudan çiktilar göndermeye yarar.
Bu nesne en fazla write methodu ile kullanilir.Asp taglari arasina yazacagimiz "response.write"sayesinde sayfada herhangi bir degiskenin içeriginin ve yazinin
görüntülenmesini saglayabiliriz.Simdi bu nesneyi uygulamaya gecirelim(Bu arada asp komutlari <% %> arasina yazilir)=

<html>
<head>
<title>Response write</title>
</head>
<% @ LANGUAGE=VBScript CODEPAGE=1254 %>

<% g=gangboy

Response.Write "gangboy"
Response.Write "<H3>"&g&"</H3>"
Response.write ("gangboy")
Response.write (d)

%>

</BODY>
</HTML>

Buradaki yazim sekillerini pekistirmek icin once inceleyim sonrada uygulayin.("Yoksa cok cabuk unutuluyo sahidim :)")
Dikkat etmeniz gereken bir husus da eger bir yaziyi görüntüleyeceksek bunu cift tirnak icinde yazmamizdir.Eger bu bir deigkense tirnak isareti kulanmamaliyiz,çünkü
"response.write"ile tirnak içinde yazdirilanlar gözetilmeksizin server tarafindan ekrana bastirilcaktir.Tirnak içinde yazilmayan
degiskenlerin icerigi ekrana yazdirilir.Ayrica response.write nesnesini kisa olarak soyle de yazabiliriz;
<%=(Degisken yada sabit)%>

Örn:


<html>
<head>
<title>Response write</title>
</head>
<% @ LANGUAGE=VBScript CODEPAGE=1254 %>
<%d=gangboy%>

<%="gangboy"%>
<%=d%>


</BODY>
</HTML>

"Response.write" nesnesi arasinda html taglarini da kullanabiliriz.
Böyle durumda html taglarini yine cift tirnak arasinda yazmaliyiz.Ayrica ifade icinde degisken kullanilacaksa bunu da "&" isareti ile ayirmaliyiz.
(Not:Sayfanin basindaki CODEPAGE=1254 ifadesi yazinin Türkce karakterlere göre yorumlanacagini bildirir.Asp nin bu özelligi ile istedigimiz tarzda yazi ciktilari alabiliriz.)

Response.Redirect

Kullanim sekli response.redirect "url" seklindedir. Bu kodlar istemci tarafindan okundugunda mevcut sayfa calismasini durdurup belirtilen url deki sayfayi ekrana getirecektir.

Simdi konuyu daha iyi anlamak için iki sayfa hazirlayarak bu sayfayi yönlendirelim.

Bu sayfalarin isimlerini redirect.asp ve yonlendirilen.asp yapalim.

redirect.asp =


<html>
<head>
<title>Kitap Kategorileri</title>
</head>
<% @ LANGUAGE=VBScript CODEPAGE=1254 %>
<%
Response.Write "Bu sayfa asagida belirtilen sayfayi yükleyecek "
Response.Redirect "yonlendirilen.asp"
%>
</BODY>
</HTML>

Bu sayfa acildiginda yonlendirilen.asp yonlendirilecektir.Siz siz olun benim gibi yonlendirilecek sayfaya yazmayi unutupta
aha bu calismiyo demeyin :))

yonlendirilen.asp =

<html>
<head>
<title>yönlendirilen sayfa</title>
</head>
<% @ LANGUAGE=VBScript CODEPAGE=1254 %>
<%
Response.Write "<h4>Bu sayfa, bir önceki redirect.asp sayfasinin çalistirilmasi ile görüntülenmistir</h4> "

%>
</BODY>
</HTML>


Bu olayi deneyerek yönlendirme olayini görebilirsiniz.
"redirect.asp"sayfamiz calistiginda response.write ile yazilan yaziyi göremeyecegiz çünkü hemen arkasindan gelen "response.redirect"
ile sayfamiz yonlendirilecek ve ekranda yönlendirilen.asp sayfasi belirecektir.

Response.Flush
Sunucu eger asp sayfasnin içinde bu ifadeye rastlarsa o zamana kadar tampon hafizada (buffer) sakladigi sayfa degerini browser a gönderir.


<html>
<head>
<title>Response flush</title>
</head>
<% @ LANGUAGE=VBScript CODEPAGE=1254 %>
<%
Response.Buffer=true
%>

<p>Bu satir sunucunun tampon (buffer) hafizasinda saklanan ilk satir.<BR>
bu satirdan sonraki "flush" metodu ile hemen browser a gonderilecek

</p>
<%
Response.Flush *
%>
<p>Bu yazi flush metodundan sonra gosterilmistir</p>


</bOdy>
</html>

Yukaridaki satira bakarsak * isaretli satira kadar olan islemlerin sonucunu tampon hafizada tutacak,* isaretlisatirdaki ifade ile bu degerleri
ziyaretcinin browser a gönderip arkasindan da kalan satirlari isleyecektir.Sayfanin bitiminde kanalan diger satirlarin sonucu
da browser a gönderilecektir.Yukaridaki kodlari calistirdigimiz zaman belki biz kullanici olarak bir fark göremeyecegiz.
Olaylar çok hizli gerçeklestigi icin bize cok normal bir sayfa yükleniyormus gibi gözükür.

Response.Clear

Sunucunun o ana dek kullaniciya göndermek üzere tuttugu tampon hafizadaki tüm bilgileri siler.
Örn:

<html>
<head>
<title>response clear</title>
</head>
<% @ LANGUAGE=VBScript CODEPAGE=1254 %>
<%
Response.Buffer=true
%>


<p>Bu satir sunucunun tampon (buffer) hafizasinda saklanan ilk satir.<BR>
bu satirdan sonraki "Response.clear" ile ne yazikki silinecek :) <br>
ve sayfada gözükmeyecek

</p>
<%
Response.Clear *
%>
<p>Tampon hafiza temizlendikten sonra gönderilen bir yazidir bu yazi.</p>

</bOdy>
</html>

(* isaretini satir belli etmek için koyuyorum sizde kodlariniza koymayin sakin.)

*Isaretli satirdaki komut ile tampon hafiza silinmistir.Ziyaretçiye burdan sonraki satirlar gösterilecektir.

(Bu arada sayfa basligida silinecektir dikkat ederseniz.)


Response.End

Yukarida yazdigimiz response.clear in tam tersidir. Bu satiri gördügünde sunucu islemleri durdurup,o zamana kadar olan tampon hafiza degerlerini
browser a gönderir ve scriptin çalismasi durur.

Örn:

<html>
<head>
<title>response end</title>
</head>
<% @ LANGUAGE=VBScript CODEPAGE=1254 %>

<%
Response.Buffer=true
%>

<p>Bu yazidan sonraki yazilar gözükmüyor, çünkü sunucuya bu satirdan hemen sonra<BR>
"dur ve tampon hafizandaki degerleri gönder" komutu verdik.

</p>
<%
Response.End
%>
<p>Bu yazi hiçbir zaman goruntulenmeyecek</p>


</bOdy>
</html>

Response.Buffer


Response nesnesinin bu özelligi ile sayfa yüklenme biçimlerini belirleyebiliriz.
response.buffer=true seklindeki bir ifade ,web sayfasindaki kodlarin en basina yazilir.Bu ifadeyi gören server içindeki bütün sunucu scriptlerin islevi tamamlanmadan
,browser a gönderilmeyecektir.Ne zaman ki sayfa sunucu tarafli scriptlerin çalismasi biter ve sayfa tamamlanirsa o zaman buffer sakladigi sayfa bilgilerinin tamamini browser
a gönderir.Response.buffer degeri ASP2,0 da default olarak "false" yani bufferlama yapmaz,ASP3.0 da tam tersi "true" degerine esittir.Buffer özelligine yukarida ögrendigmiz
methotlar ile müdahale edebiliriz.

Response.Expires

Sunucu sayfalari gönderdiginde,bu sayfalar ziyaretçinin bilgisayarinda geçici bir bellekte (chace) saklanir.Browser ilk önce
adreste belirtilen sayfayi bu bellekte arar.Burada amaç "hiz" dir.Ancak bazen sayfanin her seferinde gönderilmesini isteyebiliriz.Sunucuda belki bir takim degiskenlerin degeri degisebilir.
Yada birtakim güncellemeler yapiliyor olabilecektir.Bu durumda sayfanin ziyaretçinin belleginde geçici olarak saklanmasini engelleyebilriz ve bu isi expires özelligi ile yapariz.
Örn:

<%response.expires=0%>
<html>
<bOdy>
<p>Bu sayfa bellekte saklanmayacaktir,her seferinde sunucudan gönderilecektir.</p>
</bOdy>
</html>

Bu sekilde sayfanin geçici hafizada tutulmasini engelledik.


Response.ExpiresAbsolute

Bazende sayfalarin belirli bir tarihe kadar geçici bellekte saklanmasini isteyebiliriz degilmi?
Bu durumda ExpiresAbsolute özelligini kullaniriz.
Örn:

<%
Response.ExpiresAbsolute=#May 05,2004 05:30:30#
%>
<html>
<bOdy>
<p>Bu sayfa 5 Mayis 2004 saat 05:30:30 a kadar geçici bellekte saklanacaktir.</p>
</bOdy>
</html>


Buraya kadar response nesnesinin en çok kullanilan methodlarini inceledik insallah buraya kadar yararli olabilmisimdir.
Simdide request nesnesini ve methodlarini inceliyecegiz.

Request Nesnesi

Kullanicilarin sunucudan talep ettigi her sayfaya istek (request) denir.

Bu nesnenin nasil kullanildigina bir bakalim.


Request.Querystring

Çok kullanilan bir ifadedir.Ayni sayfaya veya baska sayfalara degisken veya degiskenler tasimamizi saglar.
<A href> tagiyla veya response.redirect ile yönlendirdigimiz sayfalara istedigimiz degiskenleri tasir.
Bu ifadeler ile yönlendirecegimiz sayfanin adresini yazdiktan sonra "?" isareti ardindan sayfaya tasiyacagimiz degiskenin adini ve degerini belirtiriz.
Örnegmizle konuyu daha iyi kavramaya çalisalim :
querystring.asp isimli bir sayfa olusturalim.

<html>
<head>
<title>Querystring</title>
</head>
<% @ LANGUAGE=VBScript CODEPAGE=1254 %>

<a href= "isteksayfasi.asp?site=cyber-warrior&ismi=gangboy">
link kodu içindeki soru isaretinden sonraki degiskenler,link adresinde belirtilen sayfaya tasinacak.
</a>

</BODY>
</HTML>


Simdide link ile yönlendirecegimiz sayfayi hazirlayalim.

Bu sayfanin ismide isteksayfasi.asp olmali.


<html>
<head>
<title>Gelen</title>
</head>
<% @ LANGUAGE=VBScript CODEPAGE=1254 %>

<% site=Request.QueryString("site")
ad=Request.QueryString("ismi")
%>
Diger sayfadan gönderdiginiz site degeri: <b><%=site%></b><br>
isim: <b><%=ad%></b>

</BODY>
</HTML>

Bu kodlar çalistiginda degiskenlerinizin degerlerinin yonlendirilen sayfada gozukecegini göreceksiniz.
Burada sizde degerleri degistirerek çalismalar yapmanizi tavsiye ederim.

Request.Querystring ve Form Kullanimi

Geldik sitelerde en çok kullanlan olayabu sekilde kullanicinin tercihleri belirtilen degiskenler formlar sayesinde alinip,querystring ile
ayni sayfada veya baska bir sayfalarda islenebilir.

Örnegimiz için querystringForm.asp adinda bir form olusturalim.


<html>
<head>
<title>Form</title>
</head>
<% @ LANGUAGE=VBScript CODEPAGE=1254 %>

<form action="isteksayfasiForm.asp" method="get">
Lütfen isminizi giriniz:
<input type="text" name="isim"><br><br>
<input type="submit" value="gönder">
</form>


</bOdy>
</html>

Simdi yapacagmiz is bu formdan degiskenler yardimiyla aldigimiz bilgiyi isteksayfasiForm.asp sayfasinda islemek.

Bunun için isteksayfasiForm.asp sayfasinida olusturalim.


<html>
<head>
<title>Form cevap</title>
</head>
<% @ LANGUAGE=VBScript CODEPAGE=1254 %>

<%

Response.Write ("Merhaba: <b>" & Request.querystring("isim") & "</b>!")
Response.Write ("<br>Bugün nasilsiniz?")

%>

</BODY>
</HTML>


Sanirim yavas yavas mantigini anlamaya baslamissinizdir.Sik sik tekrarlar yapin deneyim kazandikça kafaniza yerlesecektir.

Önemlinot ="request.querystring ile form degiskenleri isleyebilmek için formun "get" methodu ile olusturulmasi gerekiyor!!!"

Peki ben get methodu degilde post methodunu kullanmak istiyorum çünkü onda hem belli bir veri gönderme siniri yok,hemde browser in
adres satirinda degiskenlerin yolu gözükmüyor derseniz simdi ;

Request.Form ve Form Kullanimi

Request nesnesi ailesinden olan Request.Form,form degerlerinin kullanilmasi için gelistirilmistir.Method olarak "post" u kullanir.
Eski örneklerimiz gibi düzenlersek ayni çiktilari aliriz.

Simdi örnegimizi hazirlayalim ve PostForm.asp ismiyle kaydedelim:

<html>
<head>
<title>Post Form</title>
</head>
<% @ LANGUAGE=VBScript CODEPAGE=1254 %>
<form action="RequestForm.asp" method="post">
Lütfen isminizi giriniz:
<input type="text" name="isim"><br><br>
<input type="submit" value="gönder">
</form>


</bOdy>
</html>

Birde degiskenin gönderilecegi RequestForm.asp sayfasini hazirlayalim:

<html>
<head>
<title>request.form</title>
</head>
<% @ LANGUAGE=VBScript CODEPAGE=1254 %>

<%

Response.Write ("Merhaba: <b>" & Request.Form("isim") & "</b>!")
Response.Write ("<br>Bugün nasilsiniz?")

%>

</BODY>
</HTML>

Bu methoduda isledik son olarak bir çok yerde isinize yarayabilecek olan ;

Request.ServerVeriables


Bu özellik adindan da anlasilacagi gibi kullaniciya sunucu ve browser hakkinda bilgiler getirir.Kullanim sekli;

Bu örnegi RequestServer.asp adiyla kaydedip inceleyin ve bir kerede kendiniz yazin.

<html>
<bOdy>
<p>
<b>kullandigin tarayici:</b>
<%Response.Write(Request.ServerVariables("http_user_agent"))%>
</p>
<p>
<b> IP Adresin:</b>
<%Response.Write(Request.ServerVariables("remote_addr"))%>
</p>
<p>
<b> DNS :</b>
<%Response.Write(Request.ServerVariables("remote_host"))%>
</p>
<p>
<b>Sayafayi çagirmak için kullandigin metod:</b>
<%Response.Write(Request.ServerVariables("request_method"))%>
</p>
<p>
<b>Sunucunun Domain ismi:</b>
<%Response.Write(Request.ServerVariables("server_name"))%>
</p>
<p>
<b>Sunucunun Port numarasi:</b>
<%Response.Write(Request.ServerVariables("server_port"))%>
</p>
<p>
<b>Sunucunun Kullandigi yazilim:</b>
<%Response.Write(Request.ServerVariables("server_software"))%>
</p>

</bOdy>
</html>

Geldik yazinin sonuna buraya kadar sizlere birseyler verebildiysem gerçekten çok mutlu olacagim.Programlama deneyimleri olan arkadaslarin kolay anlayabilecegi gibi olamayan arkadaslar da tekrar tekrar kodlari yazarak iyice ogrensinler ve bol bol alistirma yapsinlar.
Yakinda bu dökümanin devamini yazacagim onda daha fazla örnek olacak o yüzden bunlari iyi ögrenin.

Selametle.

<%Bu döküman gangboy tarafindan yazilmistir%>
<%written by gangboy%>

   
   
Cyber-Warrior TIM All Legal and illegal Rights Reserved.\CWDoktoray 2001©