<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Tunahan.net &#187; ASP</title>
	<atom:link href="http://www.tunahan.net/category/yazilim-gezegeni/asp/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.tunahan.net</link>
	<description>Tunahan H. MADEN Personal Page</description>
	<lastBuildDate>Thu, 01 Jul 2010 23:48:59 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>SQL &#8211; Stored Prosedür Oluşturmak</title>
		<link>http://www.tunahan.net/2010/01/29/sql-stored-prosedur-olusturmak/</link>
		<comments>http://www.tunahan.net/2010/01/29/sql-stored-prosedur-olusturmak/#comments</comments>
		<pubDate>Fri, 29 Jan 2010 17:25:17 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ASP]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[EXEC]]></category>
		<category><![CDATA[ISBN]]></category>
		<category><![CDATA[Kod]]></category>
		<category><![CDATA[Oluşturmak]]></category>
		<category><![CDATA[Procedure]]></category>
		<category><![CDATA[Prosedür]]></category>
		<category><![CDATA[Source]]></category>
		<category><![CDATA[Stored]]></category>

		<guid isPermaLink="false">http://www.tunahan.net/?p=136</guid>
		<description><![CDATA[Prosedür ne demektir?
Nesneye dayalı programlama bu kadar popüler değilken, programlar sadece prosedür denilen parçacıklardan oluşurdu. Her bir prosedür, belli bir işlevi yerine getimrke için özenle yapılandırılmış program parçacığıdır. Mesela, iki sayı alıp bunların toplamlarını hesaplayan bir kod parçasını toplayıcı adında bir prosedür içerisine paketleyebiliriz. Bir prosedür, başka bir prosedür içerisinden çağrılabilir. Bu da sık kullanılan [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Prosedür ne demektir?</p>
<p></strong>Nesneye dayalı programlama bu kadar popüler değilken, programlar sadece prosedür denilen parçacıklardan oluşurdu. Her bir prosedür, belli bir işlevi yerine getimrke için özenle yapılandırılmış program parçacığıdır. Mesela, iki sayı alıp bunların toplamlarını hesaplayan bir kod parçasını toplayıcı adında bir prosedür içerisine paketleyebiliriz. Bir prosedür, başka bir prosedür içerisinden çağrılabilir. Bu da sık kullanılan işlemler için yazılmış kodların bir defa yazılıp çok defa kullanılmasını böylelikle de programlamayı kolyalaştırmayı amaçlar.</p>
<p>Saklı prosedürler, bir çok gelişmiş programlama dilindeki fonksiyon yapılarına karşılık gelir. Birden fazla işlemi, paketlenmiş bir halde bir tek komut ile çalıştırmamız gerektiğinde stored procedures kullanılır. İşlemden kasıt T-SQL ile yapılabilen her şeydir.</p>
<p>Stored procedure, 1980’li yılların sonunda Sybase SQLServer ile birlikte kullanıma girdi. En büyük özelliği sorguların önceden hazırlanması(derlenemesi) ve VTYS ile aynı uzayda çalışmasından dolayı daha hızlı sonuç vermesidir.</p>
<p>Bir SP oluşturulduktan sonra, veritabanı sunucusunda saklanır. Her ihtiyaç duyulduğunda aynı sp defalarca çağrılabilir. Cursor gibi oturum kapandığında silinmez.</p>
<p>Network bazlı çalışmalarda ağ trafiği ve sistem kaynaklarının kullanımın düzenleyerek de performans artışı sağlar. Bir dize işlem, bir tek paket içerisinde yer alır. Gerektiğinde bir tek komut ile tetiklenebilir. Paketin tamamı çalışıncaya kadar istemde bulunan terminale hiçbir şey gönderilmez. Tüm komutlar bittiğinde bir tek sonuç gönderilir. Bu da bazı durumlarda ağ trafiğini rahatlatır.<br />
Bir SP sistem tarafından oluşturulduğu anda şu aşamalara tabi tutulur:</p>
<p><strong>1.</strong> SP’nin bileşenleri parçalara ayrıştırılır<br />
<strong>2.</strong> Veritabanı içerisinde table,view gibi başka nesnelere atıfta bulunan referanslar varsa, geçerli olup olmadıkları kontrol edilir.(Geçerli:1-nesne varmı, 2-izin var mı)<br />
<strong>3.</strong> Kontrollerden geçen SP’nin adı sysobjects tablosuna, kodları ise syscomments tablosuna saklanır.<br />
<strong>4.</strong> Bu işlemlerle birlikte derleme işlemi yapılır. Normalizasyon işlemleri olarak da anılan bu işlemler sonucunda, ağaç şeması elde edilir. Bu şema da sysprocedures tablosunda saklanır.<br />
<strong>5.</strong> SP herhangi bir anda çağrıldığında, ilk kez çalışıyorsa bu işlemler gerçekleştirilir. İlk sefa çağrılmıyorsa, kontrol, sorgulama ağacı oluşturma işlemleri yapılmaz ve oldukça hızlı bir şekilde SP’nin derlenmiş hali çalışır. Bundan dolayı sp’ler derlenen nesnelerden biri olarak anılır.</p>
<p><strong>SP’ler şu faydaları sağlar:</strong></p>
<p><strong>1.</strong> Uygulamanın getirdiği bazı iş kuralları prosedür içinde tanımlanabilir. Bir kez oluştuktan sonra bu kurallar birden çok uygulama tarafından kullanılarak daha tutarlı bir veri yönetimi sağlanır. Ayrıca bir fonksiyonelliğin değişmesi ihtiyacı doğduğunda her uygulama için değişiklik yapmak yerine, sadece bir platformda değişiklik yapılır.</p>
<p><strong>2.</strong> Tüm prosedürler üstün performansla çalışır ancak birden fazla çalıştırılacak olan prosedürler sorgulama planları procedure cache içinde saklandığından daha da hızlı çalışırlar.<br />
<strong>3.</strong> Stored Procedure’ ler SQL Server start ettikten sonra otomatik olarak çalıştırılmak üzere ayarlanabilirler.<br />
4. Stored Procedure’ ler harici olarak kullanılırlar. Trigger’ lardan farklı olarak prosedürler uygulama tarafından ya da script tarafından bir şekilde çağrılmak zorundadırlar. Otomatik devreye giremezler.<br />
<strong>5.</strong> Stored Procedure’ lerın içinde SQL sorgulama diline ek olarak T-SQL komutlarını kullanabiliriz.<br />
<strong>6.</strong>Kullanıcının bir tabloya erişim izni olmasa bile o tablo üzerinde işlem yapan bir stored procedure’ ü kullanma izni olabilir.</p>
<p><strong>SP oluşturma:</strong></p>
<p><span style="background-color: #ffffff;">CREATE PROC [ EDURE ] procedure_name [ ; number ]<br />
[ { @parameter data_type }<br />
[ VARYING ] [ = default ] [ OUTPUT ]  ]<br />
[ ,...n ]</span><br />
<strong>Örnek:<br />
</strong>Çalıştırıldığı tarih itibariyle, aldığı kitapları getirmeyen üyelerin adını veren bir SP yazalım:</p>
<p>CREATE  PROCEDURE sp_cezaliUye<br />
AS<br />
&#8211; Bugünün tarihini al<br />
DECLARE @buGun DATETIME<br />
SET  @buGun = GetDate()</p>
<p>SELECT uyeAdi FROM odunc<br />
WHERE geldiMi=0 AND VermeTarihi + VermeSuresi &lt; @buGun<br />
&#8211; bugünden önce gelmesi gereken ödünç işlemlerindeki üye adını seç.</p>
<p><strong>Daha sonra bu SP şu komut ile çağrılır:</strong></p>
<p><strong>EXEC sp_cezaliUye</strong><br />
&#8211; sp_cezaliUye stored procedure&#8217;ünü çalıştır.</p>
<p>SP üstünde değişiklik yapmak istediğimizde ise,</p>
<p><strong>Sp_helptext sp_adi</strong></p>
<p>Diyerek SP’nin içeriğini görebiliriz.<br />
Daha sonra bu içeriği Query Analyzer kod penceresine yapıştırıp,</p>
<p>ALTER PROCEDURE sp_cezaliUye<br />
AS</p>
<p>DECLARE @buGun DATETIME<br />
SET  @buGun = GetDate()</p>
<p>SELECT uyeAdi FROM odunc<br />
WHERE geldiMi=0 AND VermeTarihi + VermeSuresi &lt; @buGun</p>
<p>Diyerek yeni halini kaydettirebiliriz.</p>
<p><strong>İPUCU:</strong><br />
Bir çok işlemi kod yazmaksızın yapmayı sağlayan Enterprise Manager’i kullanarak sp’leri de kolayca değiştirebilirisiniz. Bunun için Enterprise manager ile bir sp’yi seçip çift tıklamak yeterlidir.</p>
<p><strong>SP’ye parametre yollama:<br />
</strong>Bazen SP’ler dışarıdan parametre alabilirler:</p>
<p><strong>Örnek:</strong><br />
Herhangi bir tarih verildiğinde, bu tarihte süresi bittiği halde teslim edilmeyen kitapları bulan bir SP yazalım ancak tarih olarak bu günden daha büyük bir parametre alamasın. Böyle bir durum olduğunda, bu günün tarihini versin.</p>
<p>CREATE  PROCEDURE <a style="color: #000000; font-family: Arial; text-decoration: none;" href="mailto:sp_cezaliUye_1@referansTarih">sp_cezaliUye_1@referansTarih</a> DATETIMEASDECLARE @buGun DATETIME SET @buGun = GetDate()IF @referansTarih &gt; @buGun SET @referansTarih = @buGun &#8212; şayet, bugünün tarihi referans tarihten küçük ise,<br />
referans tarihi bugünün tarihi ile değiştir.<br />
SELECT uyeAdi FROM odunc<br />
WHERE geldiMi=0 AND VermeTarihi + VermeSuresi &lt; @referansTarih<br />
&#8211; bugün veya daha eski bir tarihte, gelmemiş kitapları alan üyelerin listesini veren sorgu</p>
<p>Bazen dışarıdan gelen parametrelerin isteğe bağlı olması istenebilir.<br />
Bu durumda DEFAULT değer atama seçeneği kullanılır. Şayet dışarıdan parametreye değer atanmazsa, geçerli değer default atanmış değer olarak alınır ve işlem yapılır:</p>
<p><strong>Örnek:</strong><br />
CREATE  PROCEDURE sp_cezaliUye_2<br />
@referansTarih DATETIME = NULL<br />
&#8211; dışarıdan referans tarihi gelmedi ise, NULL olarak kabul et.<br />
AS</p>
<p>DECLARE @buGun DATETIME<br />
SET  @buGun = GetDate()</p>
<p>IF (@referansTarih IS NULL) OR (@referansTarih&gt;@buGun)<br />
SET @referansTarih = @buGun<br />
&#8211; Referans tarih gelmedi ise veya bugünün tarihinden büyük ise, bugünün tarihini al.</p>
<p>SELECT uyeAdi FROM odunc<br />
WHERE geldiMi=0 AND VermeTarihi + VermeSuresi &lt; @referansTarih<br />
Go</p>
<p>şeklinde yazabiliriz. Daha sonra</p>
<p>EXEC sp_cezaliUye_2 @referansTarih=’01.01.2003’</p>
<p><strong>İle veya</strong></p>
<p>EXEC sp_cezaliUye_2<br />
Diyerek sp’yi çağırabiliriz.</p>
<p><strong>DİKKAT:</strong><br />
SP’de bir parametre için default değer tanımı yaparken, bu değerin sabit bir değer veya NULL olması gerektiğine dikkat etmelidir.</p>
<p><strong>İPUCU:</strong><br />
Bazı durumlarda, SP içerisinde SQL ifadesini bir değişkene atamak suretiyle durumlara göre dinamik olarak meydana getirip, daha sonra da onu çalıştırabiliriz. Bu durumda da EXEC fonksiyonu kullanılır. EXEC fonksiyonu, bir stored procedure batch&#8217;in ilk ifadesi değil ise de stored procedure çalıştırılırken kullanılmak zorundadır.</p>
<p><strong>Örnek:</strong></p>
<p>&#8212; Yanlış ifade(çalışmaz):<br />
DECLARE @isim VARCHAR(10)<br />
&#8230;<br />
sp_cezaliUye_2</p>
<p>&#8211; Doğru ifade(çalışır)<br />
DECLARE @isim VARCHAR(10)<br />
&#8230;.<br />
EXEC sp_cezaliUye_2</p>
<p><strong>Örnek:</strong><br />
Kitaplar tablosu üstünde aşağıdaki parametrelere göre arama yapabilecek bir SP yazalım. Parametrelerden gelenler için filtreleme yapılsın.<br />
Dışarıdan alınabilecek Parametreler: ISBNNo, KitapAdi, Yazari, Ozeti</p>
<p>CREATE  PROCEDURE sp_kitapBul<br />
@ISBNNo CHAR(16) =NULL,<br />
@KitapAdi VARCHAR(55)=NULL,<br />
@kitapYazari VARCHAR(55)=NULL,<br />
@KitapOzeti VARCHAR(55)=NULL<br />
AS</p>
<p>DECLARE @sSQL VARCHAR(500)<br />
&#8211; Bir SQL değişkeni tanımlıyoruz<br />
Set @sSQL= &#8216;SELECT * FROM Kitap WHERE 1=1 &#8216;<br />
IF @ISBNNo IS NOT NULL<br />
SET @sSQL = @sSQL + &#8216;  AND ISBNNo = &#8221;&#8217; + @ISBNNo + &#8221;&#8221;<br />
&#8211; ISBNNo parametresi null değilse sorguya ekliyoruz.</p>
<p>IF @KitapAdi IS NOT NULL<br />
SET @sSQL <a style="color: #000000; font-family: Arial; text-decoration: none;" href="mailto:=@sSQL">=@sSQL</a> + &#8216; AND KitapAdi  LIKE  &#8221;%&#8217;  + @KitapAdi +  &#8216;%&#8221;&#8217;<br />
&#8211; KitapAdi parametresi NULL değil ise sorguya ekliyoruz.</p>
<p>IF @KitapYazari IS NOT NULL<br />
SET @sSQL = @sSQL + &#8216; AND KitapYazari  LIKE  &#8221;%&#8217;  + @KitapYazari +  &#8216;%&#8221;&#8217;<br />
&#8212;KitapYazari Null değil ise sorguya ekliyoruz.</p>
<p>IF @KitapOzeti   IS NOT NULL<br />
SET @sSQL = @sSQL + &#8216;  AND KitapOzeti  LIKE  &#8221;%&#8217;  + @KitapOzeti +  &#8216;%&#8221;&#8217;<br />
&#8211; kitapOzeti null değil ise sorguya ekliyoruz.<br />
print @sSQL &#8211;nasıl bir SQL oluşturduğumuzu yazdırıyoruz.</p>
<p>EXEC(@sSQL)<br />
&#8211; bir VARCHAR değişkenin içerdiği T-SQL ifadesini çalıştırıyoruz.</p>
<p>Farklı parametre değerleri ile SP’yi çağırabiliriz:</p>
<p>&#8211; sadece ISBN vererek çağıralım<br />
EXEC Sp_kitapBul @ISBNNo=’12345’<br />
&#8211; ISBN ve KitapAdi parametreleri ile çağırma<br />
EXEC Sp_kitapBul @ISBNNo=’12345’, @kitapAdi=’Yol’</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tunahan.net/2010/01/29/sql-stored-prosedur-olusturmak/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SQL Injection &#8211; Korunma Yollari</title>
		<link>http://www.tunahan.net/2010/01/29/sql-injection-korunma-yollari/</link>
		<comments>http://www.tunahan.net/2010/01/29/sql-injection-korunma-yollari/#comments</comments>
		<pubDate>Fri, 29 Jan 2010 17:21:44 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ASP]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[Injection]]></category>
		<category><![CDATA[Korunma]]></category>
		<category><![CDATA[Şifre]]></category>
		<category><![CDATA[Yollari]]></category>

		<guid isPermaLink="false">http://www.tunahan.net/?p=133</guid>
		<description><![CDATA[Yazıya başlamadan önce belirtmek istediğim şey; bu makale bazı SQL injeksiyon yöntemlerinin nasıl yapıldığı konusunda öğretici bilgi içerebilir. Bu bilgileri ben sadece olası yapılabilecek hataların düzeltilmesi maksadıyla yayınlıyorum. Bu yazı kötü amaçlı olarak yazılmamıştır.
Dünyanin her tarafinda, kullanicilarina; kredi karti numaralari, kullanici bilgileri gibi gizli kalmasi gereken bilgilerin, ürünlere ve siparislere ait verilerin saklandigi uç-arka veri [...]]]></description>
			<content:encoded><![CDATA[<p><em><strong>Yazıya başlamadan önce belirtmek istediğim şey; bu makale bazı SQL injeksiyon yöntemlerinin nasıl yapıldığı konusunda öğretici bilgi içerebilir. Bu bilgileri ben sadece olası yapılabilecek hataların düzeltilmesi maksadıyla yayınlıyorum. Bu yazı kötü amaçlı olarak yazılmamıştır.</strong></em></p>
<p>Dünyanin her tarafinda, kullanicilarina; kredi karti numaralari, kullanici bilgileri gibi gizli kalmasi gereken bilgilerin, ürünlere ve siparislere ait verilerin saklandigi uç-arka veri depolariyla hizmet veren web siteleri bulunmaktadir. Ve genel olarak, web sitelerindeki form araciligi ile alinan girdi ile veritabanindaki bilgiler filtrelendikten sonra sonucu kullaniciya gönderen bu tür sistemlerde Yapisal Sorgulama Dili (Structured Query Language &#8211; SQL) kullanilmaktadir. Uygulama içerisinde kullanilacak parametre degerleri alinirken kullanilan formun SQL Deyimini yeniden yapilandirabilecek bazi özel karakterlere izin vermesiyle güvenlik problemleri ortaya çikmaktadir.</p>
<p>Bu güvenlik problemleri kullanilarak bir uygulamanin arkasinda, bu uygulamaya destek veren veri tabani üzerindeki bütün bilgilere ulasilabilir veya bilgiler üzerinde degisiklik yapilabilir. Veya veri tabani sisteminin komutlari kullanilarak kullanilan sunucular üzerinde uygulama harici istenen islemler de yapilabilir. Bu problemlerden korunmak için de uygulama girdilerini bu tür karakterlere karsi kontrol eden fonksiyonlarin kullanilmali ve genis çapli uygulamalarin bu güvenlik açiklarini tasiyip tasimadigini anlamak için güvenlik denetimine tabi tutulmalidir..</p>
<p>Ilgilendiren Sektör ve Sirketler:</p>
<p>Özel olarak gelistirilmis uygulamalar kullanan tüm kurum ve kuruluslar<br />
Internet / Intranet üzerinde uygulama gelistiren kuruluslar</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p>1. Bir Uygulama Güvenligi Problemi &#8211; &#8216;Yapisal Sorgulama Dili Kullanimi&#8217;</p>
<p>Yapisal Sorgulama Dili SQL&#8217;in uygulamalarda kullanimina örnek vermek gerekirse;</p>
<p>select Name, Address FROM Users WHERE UserID = &#8216;2081&#8242;</p>
<p>Seklindeki SQL Deyimi &#8216;Users&#8217; adli tablodan &#8216;2081&#8242; ürün ID si ile veritabanina kayitli olan kisiye ait olan isim ve adres bilgilerini dönecektir. Bu noktada muhtemel zayiflik, kullanilan formun SQL Deyimini yeniden yapilandirabilecek bazi özel karakterlere izin vermesiyle ortaya çikmaktadir. Çözümü ise girdilerden bu özel karakterlerin filtrelenmesini saglayan fonksiyonlardir.</p>
<p>Hizla gelisen internet teknolojileri karsisinda yeni pazarda geç olmadan yerini almak isteyen müsterilerine daha kisa sürede daha kullanisli ve ucuz çözümler sunmak zorunda olan uygulama gelistiriciler bu süreçte güvenlik gibi önemli bir faktörü ikinci plana atmaktadirlar.</p>
<p>Giderek yayginlasan ve medyanin haber potansiyelini olusturan; çalinan kredi karti numaralari, yer alti sitelerde dagitilan müsteri bilgileri, sirket projeleri &#8211; yazismalari yaklasan tehlikenin habercisi olmakla beraber halen bu tür kayiplarin yaratabilecegi maddi sonuçlari kavrayamayan ve hala &#8216;az maliyetle kurtarilan güvenlik projeleri&#8217; &#8216;yle övünen yöneticilere uyari niteligi tasimaktadir. Öyleki -herzaman bir adim önde olmayi amaçlayan- saldirganlar güvenligin en üst seviyede olmasi beklenen devlet siteleri de dahil olmak üzere pek çok sisteme yönelik saldirilarina da ara vermeksizin devam etmektedirler.</p>
<p>Maddi ve manevi degere sahip sirketinizi bir anlamda is ortaklarini olan uygulama gelistiricilerin hazirladiklari uygulama ürünlerine emanet edildigini düsünürsek, &#8216;uygulamalariniza ne kadar güvenirsiniz?&#8217; gibi bir soruya verilecek cevap büyük önem tasimaktadir.</p>
<p>Böyle bir ortamda uygun güvenlik çözümü için ayrilmis bütçe bir lüks degil her an yapilabilecek bir saldirida sirketin ugrayacagi zarari ortadan kaldirmak için alinmasi gereken önlem niteligi tasimaktadir.</p>
<p>2. Örnek Saldirilar &#8211; &#8216;Yapilacak Hamleleri Önceden Tahmin Edebilmek&#8230;&#8217;</p>
<p>Güvenlikte sikça kullanilan bir deyim; &#8216;Saldirganlardan korunabilmek için onlar gibi düsünmelisiniz!..&#8217;. Saldirganin sisteminize girmek için kullanabilecegi yöntemleri bilmek bu saldirilardan korunabilmek için alinan önlemleri daha saglikli kilacaktir.</p>
<p>Örneklerde kullanacagimiz hedef ; Microsoft® Internet Information Server™&#8217; dan Microsoft® SQL Server™&#8217;a varsayilan sistem hesabi&#8217;ndan (sa) baglanan ASP tabanli bir kullanici hesabi yöneticisi olacak.<br />
Form.asp : Username ve Password girdisini alan form.Solda&#8230;<br />
Login.asp : Veritabani ile baglantiya geçen ve girdinin dogrulugunu kontrol eden ASP kodu.</p>
<p>2.1. Kötü Amaçli (&#8217;) Imleçleri Yardimiyla Izinsiz Giris Saglama:</p>
<p>Kullanici &#8216;Username&#8217; &amp; &#8216;Password&#8217; verisini Login.asp ye yolladiktan sonra .asp kodunun yapacagi is verilen yoldaki veritabani ile baglanti kurup ilgili tabloda Username ve Password sütünlarinda gönderilen verinin dogrulugunu kontrol etmek olacaktir. Bu islem sonucunda eger sonuç olumluysa kullaniciya; &#8216;Giris Yapildi&#8217; olumsuzsa; &#8216;Geçersiz Kullaniciadi &amp; Sifre&#8217; mesaji verilecektir.<br />
Örnekleyecek olursak;</p>
<p>Username : ilkay<br />
Password : 2081</p>
<p>Seklindeki kullanici girdisi asagidaki SQL Deyimini olusturacaktir;</p>
<p>select count(*) FROM Users WHERE Username = &#8216;ilkay&#8217; AND Password = &#8216;2081&#8242;</p>
<p>Ilk bakista sorun olmayan bir SQL Deyimi&#8230; Fakat saldirganin;</p>
<p>Username : ilkay<br />
Password : &#8216; OR 1=1&#8211;</p>
<p>Seklindeki girdilerle olusturacagi SQL Deyimi ise;</p>
<p>select count(*) FROM Users WHERE Username = &#8216;ilkay&#8217; AND Password = &#8221; OR 1=1 &#8211;&#8217;</p>
<p>Olacaktir ki, bu durumda girisin saglanmasi için sart &#8216;ilkay&#8217; kullanici adina ait sifrenin hiçbirsey* olmasi veya ikinci bir opsiyon olarak 1=1 esitliginin saglanmasidir.</p>
<p>* Hiçbisey = Bosluk</p>
<p>Sonuç : 1=1 esitligi saglandigina göre saldiri basariyla sonuçlanacak ve &#8216;Giris Yapildi&#8217; mesaji verilecektir.</p>
<p>Not : Microsoft® SQL Server™ &#8216;&#8211;&#8217; imlecinden sonra gelen yersiz kullanilmis tirnak isaretlerini göz ardi edecektir. Ilk bakista basit gibi görünen ve sadece SQL Server&#8217;a ait olan bu özellik ilerde örneklerden de anlasilacagi üzere saldirgana büyük kolaylik saglayacaktir..</p>
<p>2.2. Uzaktan Çalistirilmasi Mümkün Olan Prosedürler:</p>
<p>MS SQL Server&#8217;a varsayilan sistem hesabindan yaptigimiz baglanti SQL Enjeksiyon saldirisinda muhtemel saldirgana sunucuda saklanan prosedürleri çalistirabilmesi için gerekli haklari taniyacaktir. Saldirganin kullanabilecegi prosedürlerden bir tanesi; &#8216;master..xp_cmdshell&#8217; olabilir.</p>
<p>Username : ilkay<br />
Password : &#8216;; EXEC master..xp_cmdshell &#8216;dir c:&#8217;&#8211;</p>
<p>Girdileriyle olusacak SQL Deyimi;</p>
<p>select count(*) FROM Users WHERE Username = &#8216;ilkay&#8217; AND Password = &#8221;; EXEC master..xp_cmdshell &#8216;dir c:&#8217;&#8211;&#8217;</p>
<p>Sonuç : SQL Server Kullaniciadi ve Sifreyi bulunduran sütunlari arayacaktir bulamadigi için &#8216;Yanlis Kullaniciadi &amp; Sifre&#8217; mesajini verecektir fakat bu arada arka planda &#8216;dir c:&#8217; komutunu çalistiracak ve saldirgan C sürücüsünün içerigine ulasacaktir.</p>
<p>2.3. SQL Server Hedef Alinarak Yapilan Saldirilar:</p>
<p>Yönetici haklarina sahip saldirgan silme,ekleme,degistirme&#8230;vb gibi komutlari rahatlikla çalistirabilecektir.</p>
<p>SHUTDOWN WITH NOWAIT SQL Server&#8217;in kritik komutlarindan bir tanesidir. Komutla beraber SQL Server görevine son verir.</p>
<p>Username : &#8216;; SHUTDOWN WITH NOWAIT&#8211;<br />
Password : [Bos]</p>
<p>Bu girdilerle olusturulan SQL Deyimi;</p>
<p>select Username FROM Users WHERE Username=&#8221;; SHUTDOWN WITH NOWAIT; &#8211;&#8217; AND Password=&#8221;</p>
<p>Sonuç : SQL Server kullaniciadinin bulunamadigi mesajini verecektir. Fakat bununla beraber arka planda diger komutu çalistirdigi için SQL Server kapanacaktir.</p>
<p>2.4. ODBC Hatalarindan Faydalanarak Yapilan Saldirilar:</p>
<p>SQL Server&#8217;in verdigi hatalardan faydalanarak veritabanindaki neredeyse tüm bilgilere ulasmak mümkündür.</p>
<p>Hedef; http://Victim/Default.asp?id=10 seklinde ürün ID leri ile çalisan ASP tabanli bir websitesi.</p>
<p>Saldiri SQL Server&#8217;in integer ve string cinsinden verileri birlikte gönderememesinden faydalinarak yapilabilir;</p>
<p>Gönderilen &#8216;10&#8242; sayisina veritabanindan herhangi bir string eklenir.</p>
<p>http://Victim/Default.asp?id=10 UNION select TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES&#8211;</p>
<p>Not: &#8216;INFORMATION_SCHEMA.TABLES&#8217; sistem tablosu, sistemde bulunan diger tüm tablolar hakkinda bilgi içerir. Deyimde kullanilan &#8216;TABLE_NAME&#8217; de yine tüm tablo isimlerini içerir.</p>
<p>Olusacak SQL Deyimi;</p>
<p>select TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES</p>
<p>String -&gt; Integer dönüsümünü yapamayan SQL Server asagidaki hatayi verecektir.</p>
<p>Microsoft OLE DB Provider for ODBC Drivers error &#8216;80040e07&#8242;<br />
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value &#8216;Table1&#8242; to a column of data type int.<br />
/Default.asp, line 5</p>
<p>Hata, saldirgana &#8216;Table1&#8242; olarak buldugu cevabi integer a çeviremedigini (dolayisiyla veritabanindaki ilk tablo adinin &#8216;Table1&#8242; oldugunu) belirtmektedir. Saldirgan diger tablolarin adini asagidaki sekilde ögrenebilir&#8230;</p>
<p>http://Victim/Default.asp?id=10 UNION select TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME NOT IN (&#8217;Table1&#8242;)&#8211;</p>
<p>Veya dogrudan LIKE komutunu kullanarak aradigi seye daha kolay yoldan ulasabilir;</p>
<p>http://Victim/Default.asp?id=10 UNION select TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE &#8216;%/%25Login%/%25&#8242;&#8211;</p>
<p>SQL Server&#8217;in verecegi hata;</p>
<p>Microsoft OLE DB Provider for ODBC Drivers error &#8216;80040e07&#8242;<br />
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value &#8216;Admin_Login&#8217; to a column of data type int.<br />
/Default.asp, line 5</p>
<p>Admin_Login adinda bir tablo oldugunu ögrenen saldirgan muhtemelen tablodaki ilk kullaniciadi ve sifreye ulasmak isteyecektir. Izleyebilecegi yol ise;</p>
<p>http://Victim/Default.asp?id=10 UNION select TOP 1 Username FROM Admin_Login&#8211;</p>
<p>Hata;</p>
<p>Microsoft OLE DB Provider for ODBC Drivers error &#8216;80040e07&#8242;<br />
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value &#8216;ilkay&#8217; to a column of data type int.<br />
/Default.asp, line 5</p>
<p>Bu sekilde &#8216;admin&#8217; kullaniciadinin varligini dogrulayan saldirganin sifreyi ele geçirmek için kullanacagi girdi;</p>
<p>http://Victim/Default.asp?id=10 UNION select TOP 1 Password FROM Admin_Login WHERE Username=&#8217;ilkay&#8217;&#8211;</p>
<p>Hata;</p>
<p>Microsoft OLE DB Provider for ODBC Drivers error &#8216;80040e07&#8242;<br />
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value &#8216;2081&#8242; to a column of data type int.<br />
/Default.asp, line 5</p>
<p>Sonuç :<br />
Username : ilkay<br />
Password : 2081</p>
<p>2.5. Veritabanina Ekleme Yapma veya Veri Düzenleme:</p>
<p>Kullaniciadi ve sifre bilgisine ulasan muhtemel saldirgan benzer yöntemleri ve UPDATE,insert komutlarini kullanarak sifreyi degistirebilir veya daha temizi baska bir kullanici hesabi açabilir&#8230;</p>
<p>http://Victim/Default.asp?id=10; UPDATE &#8216;Admin_Login&#8217; SET &#8216;Password&#8217; = &#8216;NewPwd&#8217; WHERE Username=&#8217;ilkay&#8217;&#8211;</p>
<p>Yeni bir kullanici hesabi için;</p>
<p>http://Victim/Default.asp?id=10; insert INTO &#8216;Admin_Login&#8217; (&#8217;UserID&#8217;, &#8216;Username&#8217;, &#8216;Password&#8217;, &#8216;Details&#8217;) VALUES (666,&#8217;Desperate_Cry&#8217;,'2081&#8242;,&#8217;N /A&#8217;)&#8211;</p>
<p>3. Nasil Korunmali? &#8211; &#8216;Aksi Dogrulanincaya Kadar Tüm Kullanici Girdileri Kötüdür&#8230;&#8217;</p>
<p>Gelebilecek SQL Enjeksiyon saldirilarindan korunabilmek için alinan önlemlerde temel alinmasi geren nokta&#8230; &#8216;Aksi dogrulanincaya kadar tüm kullanici girdileri kötüdür!&#8217;.</p>
<p>3.1. Kullanici Haklarinin Sinirlandirilmasi</p>
<p>Yaygin olarak yapilan hata; Web Server dan SQL Server a yapilan baglantilarda varsayilan sistem hesabi kullanilmasi&#8230; Bu sekilde yönetici haklarina sahip olan saldirgan örneklerde de görülebilecegi üzere istegi komutu çalistirip istedigi ekleme,silme,düzeltme eylemini gerçeklestirebilecektir. Bunu yerine yapilmasi gereken yeni bir kullanici hesabi olusturup kullanicinin çalistirabilecegi komutlari sinirlandirmak olacaktir.</p>
<p>Mesela sitenizden ürünlerinizin incelenmesine ve bunlar arasindan siparis verilmesine izin verecekseniz, &#8216;web_user&#8217; gibi bir kullanici adi olusturup ürünleri incelemek için; ürünler sütununda sadece &#8217;select&#8217; kullanimina ve siparisleri için; siparisler sütununda sadece &#8216;insert&#8217; kullanimina izin vermeniz uygun olacaktir.</p>
<p>3.2. Girdilerde Tirnak Imleçlerinin (&#8217;) Kötü Amaçli Kullaniminin Engellenmesi</p>
<p>Yaygin SQL Enjeksiyon saldirilari SQL deyimlerinin girdilerdeki gereksiz (&#8217;) tirnak isaretleri yardimiyla yeniden olusturulmasi sayesinde yapilir.</p>
<p>Küçük bir filtreleme fonksiyonu veya tek tirnagi çift tirnaga çeviren bir fonksiyon muhtemel bir saldiriyi engellmek için yeterli olabilir.</p>
<p>ASP Kullanarak girdileri kontrol ederek degistiren bir fonksiyon kolaylikla yazilabilir;</p>
<p>Bu fonksiyonu bastaki örnekte kullanirsak;</p>
<p>select count(*) FROM Users WHERE Username=&#8217;ilkay&#8217; AND Password=&#8221; OR 1=1 &#8211;&#8217;</p>
<p>seklinde olan deyim&#8230;</p>
<p>select count(*) FROM Users WHERE Username=&#8217;ilkay&#8217; AND Password=&#8221; OR 1=1 &#8211;&#8217;</p>
<p>&#8216;e dönüsecektir.</p>
<p>3.3. Form Girdilerinden Gereksiz Karakterlerin Elenmesi</p>
<p>SQL Enjeksiyon saldirilari genelde &#8216;;, &#8211;,select, insert ve xp_&#8217; gibi karakterlerin-kelimelerin kullanilmasiyla yapildigi için gönderilecek girdinin önce bir filtreleme fonksiyonundan geçirilmesi muhtemel zayifligi engelleyebilir.Örnegin kullanicidan E &#8211; Mail adresini girmesi isteniyorsa harfler ve sayilarin yaninda sadece &#8216; @,-,_,.&#8217; karakterlerinin kullanilmasina izin verilmelidir.</p>
<p>Ve sunucuda saklanan xp_cmdshell ve xp_grantlogin gibi genel prosedürler,C/C++ tabanli DLL ler, kullanici tarafli fonksiyonlar&#8230;vb, izole edilmis bir sunucuya tasinmalidir. Bazi zararli kelime-harfleri filteleyen ASP fonksiyonu asagida örneklenmistir;</p>
<p>Tirnak degistirme fonksiyonu ve filtreleme fonksiyonu beraber kullanilirsa;</p>
<p>select Username FROM Users WHERE Usename=&#8221;; EXEC master..xp_cmdshell &#8216;dir c&#8217;; &#8211;&#8217; AND Password=&#8221;</p>
<p>Seklindeki SQL Deyimi&#8230;</p>
<p>select Username FROM Users WHERE Usename=&#8221; EXEC master.. cmdshell &#8216;dir c:&#8217; &#8216; AND Password=&#8221;</p>
<p>e dönüsecektir ki bu da herhangi bir kayit bulumadigi hatasini vermekten öteye gitmeyecektir.</p>
<p>Bu fonksiyonu kullanicidan gelen bütün girdilere, adres satiri ifadelerine ve çerezlerden gelen tüm veriye uygulamamiz gelebilecek saldirinin önüne geçecektir.</p>
<p>3.4. Girdi Uzunlugunun Sinirlandirilmasi</p>
<p>Veritabanindaki ayrilan alanin uzunlugu 10 karakterlikse, formunuzda bu alan için 50 karakter sigan bir text kutusuna sahip olmaniz sakincali olabilir. Ve mümkün oldugu kadar girdi uzunluklarini kisa tutmak muhtemel saldiriyi engellemek için önlem sayilabilir.</p>
<p>3.5. Girdi Cinsinin Kontrol Edilmesi</p>
<p>Formunuzdan girilen verinin istediginiz türden bir veri olup olmadigini kontrol eden bir fonksiyon kötü amaçli kullanimlarda saldirganin kullanabilecegi harf/sayi seçenegini kisitlayacaktir. Mesela, eger Ürün ID si için formunuzdan girdi aliyorsaniz girdinin sayisal bir ifade olup olmadigini kontrol eden bir fonksiyon fayda saglayacaktir.</p>
<p>3.6. Girdi Cinsinin Kontrol Edilmesi</p>
<p>Formunuz araciligi ile topladiginiz verileri yollarken mutlaka &#8216;POST&#8217; metodunu kullanin ki kullanicilariniz adres çubugunda girdikleri verilerle beraber form degerlerini gördüklerinde akillarina farkli fikirler gelmesin.</p>
<p>4. Son Söz &#8211; &#8216;Herzaman bir adim önde!&#8217;</p>
<p>Aldiginiz güvenlik önlemleri veya (en iyi ihtimalle) yazip da kullanmayi bir aliskanlik haline getiremediginiz güvenlik politikalari sizi güvenlik problemlerine karsi koruyabilir mi? Eger güvenlik ile ilgili problemleri yönetmeyi süreç temelli bir güvenlik bilinci içerisinde ele almiyorsaniz hiçbir güvenlik ürünü, bir güvenlik kaybina ugramanizi engelleyemez.</p>
<p>Bilgi sistemleri altyapinizi tasidiklari güvenlik zaaflarina karsi düzenli olarak kontrol ettirmek, risklerinizi takip etmek, dogru teknolojiyi dogru yerde ve dogru sekilde kullanmanizi saglayacak güvenlik politikalarinizi olusturup güvenlik probleminizi sürekli yönetebilecek olgunluga ulasmak hedeflenmelidir. Bilgi sistemlerinin önemli bir kismini olusturan uygulamalarin tasiyabilecegi güvenlik sorunlari uzun süredir ihmal edilmelerinden dolayi, günümüzün en popüler sistem sizma noktalarini teskil etmektedirler. Bu nedenle uygulama güvenligine iliskin gereken önemi vermeniz, güvenlik denetimi yaptirmaniz ve kurumunuzun bilgi güvenligi yönetim sistemini olusturmaya bir yerinden baslamanizi öneriyorum&#8230;</p>
<table border="0" cellpadding="0">
<tbody>
<tr>
<td><strong><strong>SQL Injection Ataklarından Nasıl Korunuruz?</strong></strong></p>
<p>Bu makalemizin konusu başlıktan da anlaşılacağı gibi, web uygulamalarımıza yapılan saldırılara karşı nasıl önlem almamız gerektiği. Aslında web uygulamamıza yapılabilecek bir çok saldırı metotları vardır. Bu makalede, bu saldırı çeşidinden biri olan Sql Injection (Sql Aşılama) ataklarına karşı savunma taktiklerini anlatacağım. Peki sql injection atakları nasıl yapılır?? Sql Injection atakları, web uygulamalarımızda yer alan veri girişleri için kullandığımız TextBox form elemanlarının içine yazılan bazı sql komut deyimlerinin yazılması ile olur.</p>
<p>Web uygulamalarımızın en zayıf bölümü kullanıcı girişlerinin yapıldığı ve sonucunda yetkilendirme yapıldığı bölümlerdir. Yani login sayfalarıdır. Web uygulamaları ile ilgilenen herkes mutlaka bir login sayfası yapmıştır. Temel olarak iki tane TextBox ve bir tane Button yer alır. Kullanıcı TextBox&#8217;lara gerekli verileri girdikten sonra Button&#8217;a tıklar ve Button&#8217;un OnClick olayı devreye girer. OnClick olayında ise veritabanına bağlantı gerçekleştirilir, gerekli sorgu komutu yazılır ve eğer TextBox&#8217;lara girilen veriler ile veritabanındaki tabloda yer alan herhangi bir kayıt eşleştiyse (veya en az bir kayıt döndürüyorsa) bu kullanıcı için web uygulamasına giriş başarılı olmuştur. Yani kullanıcının Authenticate işlemi gerçekleştirilmiştir. Aslında her şey düzgün çalıştığını zannederken kötü niyetli kişiler tarafından web uygulamalarınızın tehdit altında olduğunu farketmezsiniz. Bende web uygulamaları ile çalışmaya yeni başlarken eğer kod düzgün çalışıyorsa her şey bitmiş gibi düşünürdüm. Güvenlik kısmını herzaman arka plana atmıştım. Bazen makelelerimizde esas konuya yoğunlaşmak için bazı güvenlik ilkelerini ihlal ederiz. Fakat siz uygulamalarınızda güvenlikten asla ödün vermeyin.</p>
<p>Sizlere bu makalede kötü yazılmış bir kod ve iyi yazılmış bir kodun karşılaştırmasını yapacağım. Fakat en önce Sql Injection ataklarına karşı koymanız için gereken 5 temel savunma prensibini bilmeniz gerekir:</td>
</tr>
</tbody>
</table>
<table border="1" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td width="47%"><strong><strong>Prensipler</strong></strong></td>
<td width="53%"><strong><strong>Neler Yapmalısınız?</strong></strong></td>
</tr>
<tr>
<td>Kullanıcı girdilerine asla güvenmeyin.</td>
<td>Tüm TextBox girişlerinin değerlerini Validator Kontrolleri, Regular Expressions veya kod ile kontrol edin.</td>
</tr>
<tr>
<td>Veritabanına asla admin düzeyinde bağlanmayın.</td>
<td>Veritabanına gerekli düzeyde kısıtlı erişim ile bağlanın.</td>
</tr>
<tr>
<td>Asla dinamik Sql sorguları kullanmayın.</td>
<td>Parametre göndererek veya Stored Procedure Kullanın.</td>
</tr>
<tr>
<td>Veritabanına verilerinizi asla açık şekilde yazmayın.</td>
<td>Verilerinizi şifreleme algoritması kullanarak veritabanına kaydedin.</td>
</tr>
<tr>
<td>Web uygulamalarınızda meydana gelebilecek istisnalarla(Exceptions) veya hatalarla ilgili bilgileri en düşük düzeyde kullanıcıya aktarın.</td>
<td>Web uygulamalarınızda meydana gelebilecek olası her hataya karşı özel bir hata sayfası hazırlayın.</td>
</tr>
</tbody>
</table>
<p>Şimdi sıra geldi web uygulamalarınızı nasıl yazmanız ve yazmamanız gerektiğine.<br />
login.aspx sayfamızda yer alan Button&#8217;un OnClick olayına şu şekilde kod yazılmış olduğunu farzedelim.</p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr height="326">
<td height="326" valign="top" bgcolor="#cccccc">private void Button1_Click(object sender, System.EventArgs e)<br />
{<br />
string strCnx = ConfigurationSettings.AppSettings["BadconnStr"];<br />
SqlConnection conn = new SqlConnection(strCnx);</p>
<p>conn.Open();<br />
SqlCommand cmd = new SqlCommand();<br />
cmd.Connection = conn;<br />
cmd.CommandText = &#8220;Select * From users Where username = &#8216;&#8221;+ txtusername.Text +&#8221;&#8216; AND password = &#8216;&#8221;+ txtpassword.Text +&#8221;&#8216; &#8220;;</p>
<p>SqlDataReader dr;<br />
dr = cmd.ExecuteReader();<br />
if(dr.Read())<br />
{<br />
FormsAuthentication.RedirectFromLoginPage(txtusername.Text,false);<br />
}<br />
else<br />
{<br />
ErrLabel.Text = &#8220;Başarısız İşlem&#8221;;<br />
}</td>
</tr>
</tbody>
</table>
<p>Eğer kullanıcı kendi kullanıcı adı ve şifresini girerse her şey normal şekilde sürer. Fakat eğer iyi yazılmamış bir login sayfasında aşağıdaki gibi bir ifade girilirse ne olur görelim.</p>
<p><strong><strong>&#8216;or 1=1&#8211;</strong></strong></p>
<p>şeklinde bir Sql ifadesi kullanıcı adının girileceği TextBox&#8217;a girilir ve şifre kısmına da rastgele bir değer girilirse, veritabanımızdaki tabloda böyle bir kullanıcı olmasa bile yetkilendirme işlemi başarılı olacaktır. Çünkü &#8216;or 1=1&#8211; ifadesinin TextBox&#8217;a girilmesi sonucu sorgu ifadesi şu şekle dönüşmüş olur.</p>
<p><strong><strong>Select * From users Where username = &#8216; &#8216;or 1=1&#8211;&#8217; AND password = &#8216;&#8221;+ txtpassword.Text +&#8221;&#8216; </strong></strong></p>
<p>Kullanıcı adını yazdığımız TextBox nesnesine girilen &#8216;or 1=1&#8211; ifadesinde yer alan &#8212; işaretlerinin anlamı; &#8212; işaretlerinden gelen sonraki ifadeleri yoksay olacaktır. Yani sonuç olarak ifademiz;</p>
<p><strong><strong>Select * From users Where username = &#8216; &#8216;or 1=1&#8211;</strong></strong></p>
<p>şekline dönüşecektir.Bu ifadede yer alan or 1=1 ifadesi sürekli doğru sonucu vereceğinden sonuç olarak sorgu işlemi bir kayıt döndürecektir. Bizim if döngümüzde yer alan dr.Read() ifadesi de true değerini alacağından if deyimi çalıştırılacak ve kullanıcı Authenticate işlemini başarı ile geçecektir.</p>
<p>Peki bu Sql Injection saldırısının çalışmasını sağlayan hatalar neydi? Kodumuzu satır satır inceleyelim.</p>
<p><strong><strong>string</strong></strong><strong><strong> strCnx = ConfigurationSettings.AppSettings["BadconnStr"]; </strong></strong><strong><br />
<strong><strong>SqlConnection conn = new SqlConnection(strCnx);</strong></strong></strong></p>
<p>bu ifadede BadconnStr değerini Web.config sayfamızdan almaktayız. Web.config sayfamızda yer alan ConnectionString ifademiz şu şekildedir.</p>
<p>Bu ConnectionString ifadesindeki hata veritabanına sa olarak bağlanmamızdır. Hiçbir zaman veritabanına sa kullanıcısı olarak bağlanmayın. Çünkü sa veritabanı üzerinde çok yüksek haklara sahiptir. Oysa bize gerekli olan sadece <strong><strong>SELECT</strong></strong> sorgusu.</p>
<p>Diğer bir hata ise sorgu işleminin dinamik olarak yapılması. Eğer bu şekilde dinamik olarak SQL sorguları yaratılırsa yukarıda girilen &#8216;or 1=1&#8211; ifadesinin girilmesi ile çok büyük güvenlik açıklarına neden olursunuz. Peki ne yapacağız. Yukarıda bahsettiğim prensiplere göre parametre olarak veri göndermeli veya Stored Procedure kullanmalıyız.</p>
<p>Aslında yukarıda TextBox&#8217;lara girilen değerleri de kontrol etmemiz gerekir. Yine aynı şekilde TextBox&#8217;ın MaxLength özelliğinin mutlaka kısıtlanması gerekir. Yani TextBox&#8217;lara sınırsız karakter girilmesini önlemeliyiz. TextBox&#8217;lara girilebilecek özel karakterleri de kontrol etmeliyiz. Yani &#8216; &#8221; &#8211; + # % &amp; gibi bir çok karakterlerin girilmemesini sağlamalıyız.</p>
<p>Sadece &#8216;or 1=1&#8211; ifadesinden farklı Sql Injection saldırıları da olabilir. Örneğin yine kullanıcı adını girdiğimiz TextBox nesnesinin içine,<br />
<strong><br />
</strong><strong><strong>&#8216;; UPDATE users SET password = &#8216;deneme&#8217; WHERE username = &#8216;mehmet&#8217; &#8212; </strong></strong></p>
<p>ifadesi de girilebilir. Peki bu Sql Injection ne gibi zararlara neden olur?</p>
<p>Bu ifade ile çoklu Sql deyimleri noktalı virgül yardımı ile aynı anda çalıştırılabilir. Bu ifade ile users tablosunda yer alan kullanıcı adı mehmet olan kişinin şifresini deneme olarak değiştiriyor. Eğer yukarıdaki gibi kötü yazılmış bir kod varsa bu işlem başarı ile gerçekleştiriliyor. Yine aynı şekilde buna benzer bir ifade ile, veritabanında yeni kullanıcılar yaratılabilr, bir tablo silinebilir, veya herhangi bir stored procedure yazılarak çok farklı işlemler gerçekleştirilebilir. Bunu önlemenin yolu veritabanına bağlantı yaptığımız ConnectionString&#8217;inde yer alan user&#8217;a sadece ve sadece gerekli izinler verilmelidir. Örneğin, burada user&#8217;ın sadece SELECT ifadesi için izin verilseydi hiç bir sorun olmayacaktı.</p>
<p>Şimdi daha güvenli login işleminin nasıl gerçekleşeceğini görelim.</p>
<p><strong><strong>Daha Güvenli Login Sayfamız</strong></strong></p>
<p>Öncelikle sayfamızın tasarım kısmının neye benzediğine bakalım. Daha iyi görebilmek için şeklin üzerine tıklayıp büyütebilirsiniz</p>
<p><a href="http://www.capraz.net/aspnetimages/Sqlinjection_1.gif" target="_blank"></a></p>
<p>LOGIN Butonuna tıkladığımızda çalışacak kodu görmeden önce Web.config dosyasında yer alan ConnectionString ifadesini görelim.</p>
<p>Button&#8217;umuzun OnClick olayında çalışacak kod ise şu şekildedir.</p>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr height="537">
<td height="537" valign="top" bgcolor="#cccccc">private void Button1_Click(object sender, System.EventArgs e)<br />
{<br />
if(Page.IsValid)<br />
{<br />
string strCnx = ConfigurationSettings.AppSettings["BetterconnStr"];<br />
SqlConnection conn = new SqlConnection(strCnx);</p>
<p>conn.Open();<br />
SqlCommand cmd = new SqlCommand();<br />
cmd.Connection = conn;<br />
cmd.CommandType = CommandType.StoredProcedure;<br />
cmd.CommandText = &#8220;UserControl&#8221;;</p>
<p>SqlParameter prm;<br />
prm = new SqlParameter(&#8221;@username&#8221;,SqlDbType.NVarChar,50);<br />
prm.Direction = ParameterDirection.Input;<br />
prm.Value = FormsAuthentication.HashPasswordForStoringInConfigFile(txtusername.Text,&#8221;SHA1&#8243;);<br />
cmd.Parameters.Add(prm);</p>
<p>prm = new SqlParameter(&#8221;@password&#8221;,SqlDbType.NVarChar,50);<br />
prm.Direction = ParameterDirection.Input;<br />
prm.Value = FormsAuthentication.HashPasswordForStoringInConfigFile(txtpassword.Text,&#8221;SHA1&#8243;);<br />
cmd.Parameters.Add(prm);</p>
<p>SqlDataReader dr;<br />
dr = cmd.ExecuteReader();<br />
if (dr.Read())<br />
{<br />
FormsAuthentication.RedirectFromLoginPage(txtusername.Text, false);<br />
}<br />
else<br />
{<br />
ErrLabel.Text = &#8220;Başarısız İşlem&#8221;;<br />
}<br />
}<br />
}</td>
</tr>
</tbody>
</table>
<p>Yukarıda makalenin ilk başında bahsettiğim 5 temel prensibin hepsi bu login işleminde uygulandı. TextBox nesnelerine girilebilecek max karakter sayısının kısıtlanması ile çalışabileck Sql deyimleri girilemez. Aynı şekilde RegularExpressionValidator ifadeleri ile özel karakterlerin girilmesi önlenlenmiş oldu. Yine ConnectionString ifademizde benim yarattığım bir kullanıcı ile bağlanılıyor. Bu kullanıcıya sadece StoredProcedure&#8217;leri çalıştırılmasına izin veriliyor. Böylece başka herhangi bir sql komutunun çalışmasına olanak tanınmıyor. Çünkü veritabanına bağlanan kullanıcının yapabildikleri kısıtlanmıştır. SqlCommandType&#8217;in özelliği Stored Procedure olarak ayarlanmış ve böylece dinamik SQL ifadelerinin kullanılması engellenmiş olur. Stored Procedure&#8217;e aktarılan parametrelerde şifrelenerek veritabanında, şifrelenmiş olarak duran kayıtlarla karşılaştırlır.</p>
<p>Elbette web uygulamasının içerisinde, login sayfasından farklı sayfalarda yer alan TextBox nesneleri ile kötü niyetli kullanıcılar veritabanımıza dolayısıyla web uygulamamıza zarar verebilirler. Örneğin, herkesin bildiği site içerisinde arama yapabilmemizi sağlayan TextBox nesnelerine girilen değerlerde kontrol edilmelidir.</p>
<p>Bu makalenin içerisinde yer alan kodları daha iyi anlayabilmek için, makale içinde geçen bazı konuları (FormsAuthentication, Verileri Şifreleme, RegularExpressionValidator, Stored Procedure) yine aspnedir.com sitesinden okumanızı tavsiye ederim.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tunahan.net/2010/01/29/sql-injection-korunma-yollari/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Asp Sayfalarının Yaratılması</title>
		<link>http://www.tunahan.net/2009/12/15/asp-sayfalarinin-yaratilmasi/</link>
		<comments>http://www.tunahan.net/2009/12/15/asp-sayfalarinin-yaratilmasi/#comments</comments>
		<pubDate>Tue, 15 Dec 2009 04:01:05 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ASP]]></category>
		<category><![CDATA[Sayfalarının]]></category>
		<category><![CDATA[Yaratılması]]></category>

		<guid isPermaLink="false">http://www.tunahan.net/?p=59</guid>
		<description><![CDATA[ASP dosyası, aşağıdakilerin herhangi bir bileşimini barındıran .asp uzantılı bir metin dosyasıdır:
· Metin
· HTML etiketleri
· ASP betik komutları
Bir .asp dosyası yaratmak kolaydır. Betik eklemek istediğiniz bir HTML dosyasının varolan .htm ya da .html uzantısını .asp ile değiştirin. .asp dosyasını ağ kullanıcılarına açık hale getirmek için dosyayı sitenizde bir dizine kaydedin. (dizinin &#8220;Script&#8221; ve &#8220;Execute&#8221; haklarının [...]]]></description>
			<content:encoded><![CDATA[<p>ASP dosyası, aşağıdakilerin herhangi bir bileşimini barındıran .asp uzantılı bir metin dosyasıdır:</p>
<p>· Metin<br />
· HTML etiketleri<br />
· ASP betik komutları<br />
Bir .asp dosyası yaratmak kolaydır. Betik eklemek istediğiniz bir HTML dosyasının varolan .htm ya da .html uzantısını .asp ile değiştirin. .asp dosyasını ağ kullanıcılarına açık hale getirmek için dosyayı sitenizde bir dizine kaydedin. (dizinin &#8220;Script&#8221; ve &#8220;Execute&#8221; haklarının açık olduğundan emin olun) Dosyayı tarayıcınızda görüntülediğiniz zaman, ASP nin dosyayı işlediğini ve bir HTML sayfası dödürdüğünü göreceksiniz. Artık .asp dosyasına betik komutları ekleyebilirsiniz.</p>
<p>NOT: .asp dosyaları ekstra işlem gerektirdiğinden, bütün HTML sayfalarınızı ASP sayfalarına çevirmeyin. Sadece betik komutları içerecek olan HTML dosyalarınızı .asp dosyalarına çevirin. .asp ve .htm dosyalarını aynı dizin içinde bulundurabilirsiniz. .asp dosyalarını yaratmak için herhangi bir metin düzenleyiciyi kullanabilirsiniz. Microsoft Visual InterDev gibi ASP için gelişmiş destek içeren bir düzenleyiciyi daha kullanışlı bulabilirsiniz. Daha önce HTML kullanmadıysanız, Microsoft Front Page i de kullanabilirsiniz. Front Page ile yarattığınız HTML sayfalarınıza da Insert Script komutu ile basit ASP komutları ekleyebilirsiniz.</p>
<p>Betik Komutlarının Eklenmesi<br />
Betik, bir dizi komutlardan oluşur. Metin düzenleyen, bir ses ya da resim dosyasını açan HTML etiketlerinin aksine, betik komutları ağ sunucusuna belli eylemleri gerçekleştirme talimatı verir. Betik komutları bir kullanıcının ismini bir değişkende saklayabilir, tarayıcıya gönderilen sayfada görüntüleyebilir ya da bir veri tabanına kaydedebilir.</p>
<p>Betik komutları normal metinden ayraçlarla ayrılır. Ayraç, bir birimin başını ya da sonunu belirtmeye yarayan bir simge ya da simgeler dizisidir. HTML de ayraçlar, etiketleri çevreleyen küçüktür (&lt;) ve büyüktür (&gt;) işaretleridir.</p>
<p>ASP betik komutlarını çevrelemek için &lt;% ve %&gt; ayraçlarını kullanır. Ayraçlar içinde, kullandığınız betik dilinde geçerli olan bütün komutları kullanabilirsiniz. Aşağıdaki örnekte bir betik komutu içeren basit bir HTML sayfası gösterilmiştir.</p>
<blockquote><p>&lt;HTML&gt;<br />
&lt;BODY&gt;<br />
Bu sayfa en son &lt;%= Now %&gt; da güncellendi.<br />
&lt;/BODY&gt;<br />
&lt;/HTML&gt;</p></blockquote>
<p>Now adlı VBScript işlevi, o andaki tarih ve saati döndürür. Ağ sunucusu bu sayfayı işlediğinde deyiminin yerine o andaki tarih ve saati koyar ve sayfayı tarayıcıya gönderir.</p>
<p>Bu sayfa en son 12/15/99 22:00:00 PM.da güncellendi.<br />
Ayraçlarla ayrılan komutlar, birincil betik komutları olarak adlandırılır. Bu komutlar, birincil betik dili kullanılarak işlenirler. Ayraçlar içindeki her komut, birincil betik dilinde geçerli olmalıdır. Varsayılan olarak, birincil betik dili VBScript dir. Başka bir betik dili de ayarlayabilirsiniz.</p>
<p>İstemci tarafında yapılan betiklemeye (tarayıcının işlettiği betik) aşinaysanız, HTML in &lt;SCRIPT&gt; etiketinin sunucu tarafındaki betiklemede (ASP) aynen kullanılmadığını göreceksiniz. Sunucu tarafı betiklemede &lt;SCRIPT&gt; etiketi, yalnız birincil betik dili dışında bir betik dilinin yordamlarını tanımlar.</p>
<p>HTML ve Betik Komutlarının Birlikte Kullanımı<br />
ASP ayraçları içinde, birincil betik dilinizde geçerli olan bütün ifade, yordam veya işleçleri kullanabilirsiniz. VBScript ve diğer betik dillerinde bir ifade bir tür eylem ya da tanımı belirten, sözdizimsel olarak tam bir birimdir. Aşağıdaki If&#8230;Then&#8230;Else ifadesi, sık kullanılan bir VBScript ifadesidir.</p>
<blockquote><p>&lt;%<br />
If Time &gt;= #12:00:00 AM# And Time &lt; #12:00:00 PM# Then<br />
Selamlama = &#8220;Günaydın!&#8221;<br />
Else<br />
Selamlama = &#8220;Merhaba!&#8221;<br />
End If<br />
%&gt;</p>
<p>&lt;%= Selamlama %&gt;</p></blockquote>
<p>Bu ifade, Selamlama adlı değişkende &#8220;Günaydın!&#8221; ya da &#8220;Merhaba!&#8221; değerini saklar. komutu, tarayıcıya değişkenin o andaki değerini gönderir.</p>
<p>Bu nedenle, bu betiği öğlen 12 den önce (ağ sunucusunun saatine göre) görüntüleyen kullanıcılar &#8220;Günaydın!&#8221; mesajı ile, daha sonra görüntüleyenler ise &#8220;Merhaba!&#8221; mesajı ile karşılaşırlar.</p>
<p>Bir ifadenin bölümleri içerisine HTML metni de girebilirsiniz. Örneğin bir If&#8230;Then&#8230;Else ifadesinin içerisine HTML de karıştıran aşağıdaki örnek de önceki örnekle aynı sonucu doğurur.</p>
<blockquote><p>&lt;% If Time &gt;= #12:00:00 AM# And Time &lt; #12:00:00 PM# Then %&gt;<br />
Günaydın!<br />
&lt;% Else %&gt;<br />
Merhaba!<br />
&lt;% End If %&gt;</p></blockquote>
<p>Koşul doğru ise, yani saat gece 12 ile öğlen 12 arasında ise ağ sunucusu koşulu takip eden &#8220;Günaydın!&#8221; HTML metnini tarayıcıya gönderir, koşul sağlanmıyorsa da &#8220;Merhaba!&#8221; HTML metni tarayıcıya gönderilir. Bu şekilde HTML ve betik komutlarının karıştırılması / birlikte kullanılması, birkaç satır HTML metninin bir If&#8230;Then&#8230;Else ifadesiyle çevrelenmesi için kullanışlıdır. Önceki örnek, bir selamlama metnini sayfanızın çeşitli yerlerinde tekrar tekrar göstermek istediğiniz durumda daha iyidir. Bir değişkene bir kez değer verir ve tekrar tekrar kullanabilirsiniz.</p>
<p>HTML metinlerini betik komutlarının arasına serpiştirmek yerine, tarayıcıya bir betik komutu içinden de HTML metni gönderebilirsiniz. Tarayıcıya metin döndürmek için ASP nin varolan Response nesnesini kullanın. Takip eden örnek de önceki betiklerle aynı sonucu doğurur.</p>
<blockquote><p>&lt;%<br />
If Time &gt;= #12:00:00 AM# And Time &lt; #12:00:00 PM# Then<br />
Response.Write &#8220;Günaydın!&#8221;<br />
Else<br />
Response.Write &#8220;Merhaba!&#8221;<br />
End If<br />
%&gt;</p></blockquote>
<p>Response.Write kendisini takip eden metni tarayıcıya gönderir. Response.Write ı tarayıcıya döndürülen metni devingen olarak yaratmak istediğinizde kullanın. Örneğin birden çok değişkenin değerini içeren bir damga dizisi yaratmak isteyebilirsiniz. İlerleyen bölümlerde Response nesnesi ve diğer nesneler hakkında daha fazla bilgiyi ilerleyen kesimlerde öğreneceksiniz. Şimdilik bir HTML sayfasına betik yerleştirmek için değişik yollar olduğunu bilmeniz yeterlidir.</p>
<p>JScript ile çalışıyorsanız bir ifade bloğunu temsil eden yaylı parantezleri HTML etiketleri ve metin arasına serpiştirerek ASP komutlarınıza yerleştirebilirsiniz. Örneğin:</p>
<blockquote><p>&lt;% if (screenresolution == &#8220;low&#8221;) { %&gt;<br />
Bu, sayfanın metin sürümüdür.<br />
&lt;% } else { %&gt;<br />
Bu, sayfanın çoklu ortam sürümüdür.<br />
&lt;% } %&gt;</p></blockquote>
<p>ASP Talimatlarının Kullanılması<br />
ASP, kullandığınız betik diline dahil olmayan bazı talimatları da içerir. Bu talimatlar, çıktı talimatı ve işleme talimatlarıdır. &lt;%= ifade %&gt; şeklindeki ASP çıktı talimatı, bir değişkenin değerini gösterir. Bu çıktı talimatı, Response.Write kullanmak ile aynı şeydir. Örneğin, çıktı deyimi, &#8220;tırmanma&#8221; kelimesini (değişkenin o andaki değeri) tarayıcıya yollar. &lt;%@ anahtar kelime%&gt; şeklindeki ASP işleme deyimi, ASP ye bir .asp dosyasının işlenmesi için gereken bir bilgi verir. Örneğin aşağıdaki talimat sayfanın birincil betik dilinin VBScript olduğunu belirtir:</p>
<blockquote><p>&lt;%@ LANGUAGE=VBScript %&gt;</p></blockquote>
<p>İşleme talimatı, bir .asp dosyasının ilk satırında yer almalıdır. İşleme talimatını #include deyimi ile içerilen bir dosyaya koymayın. @ işareti ve anahtar kelime arasına bir boşluk koyun.</p>
<p>İşleme talimatı, aşağıdaki anahtar kelimeleri kullanır:</p>
<p>. LANGUAGE anahtar kelimesi sayfanın betik dilinin atanmasında kullanılır.<br />
. CODEPAGE anahtar kelimesi kod sayfasını (damga kodlama çeşidini) seçer.<br />
. LCID anahtar kelimesi sayfanın yerel belirtecini kurar.<br />
. TRANSACTION anahtar kelimesi, sayfanın bir işlem bağlamında çalışacağını belirler.<br />
. ENABLESESSIONSTATE anahtar kelimesi, bir ASP sayfasının oturum durumu kullanıp kullanmadığını belirtir.<br />
Bir talimatta birden çok anahtar kelimeye yer verebilirsiniz; anahtar kelime / değer çiftleri boşluklarla ayrılmalıdır. Eşittir işareti (=) etrafına boşluk koymayın. Aşağıdaki örnek hem betik dilini hem de kod sayfasını seçmektedir.</p>
<blockquote><p>&lt;%@ LANGUAGE=JScript CODEPAGE=932 %&gt;</p></blockquote>
<p>Betiklerdeki Boş Alanlar<br />
Birincil betik diliniz VBScript ya da JScript ise, ASP komutlardaki boş alanları temizler. Diğer betik dilleri için ASP boşluk alanları korur ve böylece metin / komut konumu gibi etmenlere bağlı olan Python gibi dillerin de doğru bir şekilde yorumlanması sağlanır. Sözü edilen boşluk alanları, boşluk karakterleri, satır sonu karakterleri gibi damgalardır.</p>
<p>VBScript ve JScript için ise, açılış ayracından sonra ve kapanış ayracından önce komutların daha kolay okunması açısından boşluk alanlar kullanabilirsiniz. Aşağıdaki komutların tümü geçerlidir.</p>
<blockquote><p>&lt;% Color = &#8220;Green&#8221; %&gt;</p>
<p>&lt;%Color=&#8221;Green&#8221;%&gt;</p>
<p>&lt;%<br />
Color = &#8220;Green&#8221;<br />
%&gt;</p></blockquote>
<p>ASP, bir ifadenin bitiş ayracı ve ondan sonraki ifadenin başlangıç ayracı arasında kalan boşluk alanları da yok eder. Bu ifadeler arasındaki boşluk alanları korumak istiyorsanız HTML deki &#8220;nbsp&#8221; (bozulamaz boşluk karakteri) karakterini kullanın. Örneğin:</p>
<blockquote><p>&lt;%<br />
&#8216;Dizgi değeri içeren iki değişken tanımlayın.<br />
Betik = &#8220;betik&#8221;<br />
Dili = &#8220;dili&#8221;<br />
%&gt;<br />
&lt;P&gt;VBScript bir &#8220;&lt;%=Betik%&gt; &lt;%=Dili%&gt;&#8221; dir.&lt;/P&gt;</p></blockquote>
<p>Not; Bu yazı 04 Aralık 2003 tarihinde <a href="http://www.sorucevap.com/uyeler/dersler.asp?maxiturk">http://www.sorucevap.com/uyeler/dersler.asp?maxiturk</a> adresinde yayınlanmıştır.</p>
<p>Kolay Gelsin <img src='http://www.tunahan.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.tunahan.net/2009/12/15/asp-sayfalarinin-yaratilmasi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Asp&#8217;de Betik Dilleriyle Çalışma</title>
		<link>http://www.tunahan.net/2009/12/15/aspde-betik-dilleriyle-calisma/</link>
		<comments>http://www.tunahan.net/2009/12/15/aspde-betik-dilleriyle-calisma/#comments</comments>
		<pubDate>Tue, 15 Dec 2009 03:55:25 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ASP]]></category>
		<category><![CDATA[Betik]]></category>
		<category><![CDATA[Dilleri]]></category>
		<category><![CDATA[Source]]></category>

		<guid isPermaLink="false">http://www.tunahan.net/?p=54</guid>
		<description><![CDATA[Betik dilleri, HTML ile Java, C++ ve Visual Basic gibi programlama dilleri arasında bir geçiş aşamasıdır. HTML genellike metin düzenlemek için kullanılır. Programlama dilleri de genellikle bilgisayarlara bir dizi karmaşık talimatlar vermek için kullanılır. Betik dillerinin de bilgisayarlara komutlar vermek için kullanılabilmelerine karşın, sözdizim kuralları genellikle programlama dillerine oranla az katıdır. Betik dilleri metin düzenleme [...]]]></description>
			<content:encoded><![CDATA[<p>Betik dilleri, HTML ile Java, C++ ve Visual Basic gibi programlama dilleri arasında bir geçiş aşamasıdır. HTML genellike metin düzenlemek için kullanılır. Programlama dilleri de genellikle bilgisayarlara bir dizi karmaşık talimatlar vermek için kullanılır. Betik dillerinin de bilgisayarlara komutlar vermek için kullanılabilmelerine karşın, sözdizim kuralları genellikle programlama dillerine oranla az katıdır. Betik dilleri metin düzenleme ya da bir programlama dilinde yazılmış ve derlenmiş bileşenleri çağırma ve kullanma üzerinde yoğunlaşırlar.</p>
<p>ASP, ağ geliştiricilerinin çeşitli betik dilleri kullanarak eksiksiz yordamlar yazabilmelerine olanak verir. Çeşitli betik dilleri bir tek .asp dosyası içinde kullanılabilir. Buna ek olarak, betikler sunucu tarafında okunup işlendiği için istemci tarayıcının betik desteği olmasına da gerek yoktur.</p>
<p>Ağ sunucunuzda uygun betik motoru kurulu olan her betik dilini kullanabilirsiniz. Bir betik motoru belli bir dilde yazılan komutları işleyen bir programdır. ASP iki betik motoru ile birlikte gelir; Microsoft VBScript ve Microsoft JScript. REXX ve Perl gibi diğer betik dillerinin betik motorlarını da yükleyip kullanabilirsinz.</p>
<p>Bir Visual Basic programcısı iseniz, Visual Basic in bir alt kümesi sayılabilecek olan VBScript i kullanmaya hemen başlayabilirsiniz. Java, C ya da C++ programcısı iseniz, JScript sözdizimini kendinize yakın bulacaksınız. Yalnız, JScript Java ya da C ile ilişkili değildir.</p>
<p>ASP bir ActiveX betikleme platformudur. Bir dili kullanmak için ActiveX Betik Standardı na uyan ve ağ sunucunuzda bir COM (Common Object Model / Ortak Nesne Modeli) nesnesi olarak duran bir betik motoru kurmalısınız.</p>
<p>Birincil Betik Dilinin Atanması<br />
ASP birincil betik dili, &lt;% ve %&gt; ayraçları içinde verilen komutları işlemek için kullanılan dildir. Bir ASP uygulamasında sayfa başına bir ya da uygulamadaki tüm sayfalar için bir birincil betik dili atayabilirsiniz.</p>
<p>Bir Sayfa için Dil Atanması<br />
Tek bir sayfanın birincil betik dilini atamak için .asp dosyanızın başına &lt;%@ LANGUAGE %&gt; komutunu ekleyin. Bu komutun sözdizimi:</p>
<p>&lt;%@ LANGUAGE=BetikDili %&gt;<br />
Burada BetikDili tek bir sayfanın birincil betik dilidir. Sayfanın dil seçimi ASP uygulaması için yapılan dil seçiminin umursanmamasını sağlar.</p>
<p>ASP komutlarının kullanılması için verilen talimatları izleyin, daha fazla bilgi için:</p>
<p>NOT: Object.Method (Nesne.Yordam / İşlev) sözdizimini kullanmayan bir dili birincil betik dili olarak kullanmak istiyorsanız öncelikle LanguageEngines kayıt anahtarını yaratmanız gerekmektedir (Bakınız Windows Kayıt Düzenleyicisi: Regedit).</p>
<p>Bir Uygulama için Geçerli Dilin Atanması<br />
Bir uygulamadaki her sayfa için geçerli olan birincil betik dilini atamak için, Internet Hizmet Yöneticisi&#8217;ndeki (Internet Service Manager) App Options (Uygulama Seçenekleri) bölümünde Default ASP Language (Varsayılan ASP Dili) özelliğini ayarlayın.</p>
<p>Sunucuda VBScript ve JScript Kullanımı<br />
Sunucuda ASP ile VBScript kullanırken, VBScript in iki özelliği kullanılamaz. ASP betikleri sunucuda çalıştırıldığı için, InputBox ve MsgBox kullanıcı arayüzü ögeleri desteklenmemektedir. Ayrıca, CreateObject ve GetObject adlı VBScript işlevlerini de sunucu tarafı betiklerinde kullanmayınız. Bunun yerine Server.CreateObject kullanınız, böylece ASP yaratılan nesneyi takip edebilir. CreateObject ve GetObject ile yaratılan nesneler, ASP nin kendi nesnelerine erişemezler ve işlemlerde yer alamazlar. Bir istisna, Admin Objects (Yönetici Nesneleri) kullanıldığı durumdur.</p>
<p>Açıklama Satırlarının Dahil Edilmesi<br />
Bütün ASP betiklerinin işlenmesi sunucu tarafında yapıldığı için, betiklemeyi desteklemeyen tarayıcılardan betiklerin saklanması için HTML açıklama satırı etiketlerinin kullanılmasına gerek yoktur. Bütün ASP komutları, tarayıcıya gönderilmeden önce işlenirler. Bir HTML sayfasına açıklamalar ekleyebilirsiniz. Bu açıklamalar tarayıcıya gönderilir ve kullanıcı kaynak HTML i gömek isterse görülürler.</p>
<p>VBScript Açıklamaları<br />
Kesme işareti kullanarak açıklama satırları yazma VBScript de mümkündür. HTML açıklamalarının aksine, bunlar betik işlenirken ayıklanırlar ve tarayıcıya gönderilmezler.</p>
<p>&lt;%<br />
&#8216;Bu satır ve aşağıdaki satırlar açıklamadır.<br />
&#8216;DiziYaz işlevi bir dizinin tüm<br />
&#8216;elemanlarını listeler.<br />
Call DiziYaz (Dizi())<br />
%&gt;</p>
<p>Bir çıktı deyimine açıklama ekleyemezsiniz. Örneğin aşağıdaki betik komutlarından birincisi çalışır ancak ikincisi çalışmaz çünkü ikincisi &lt;%= ile başlamaktadır:</p>
<p>&lt;% i = i +1 &#8216;i yi 1 arttırır. Bu satır çalışır. %&gt;<br />
&lt;%= name &#8216;değişken değerini yazar. Bu satır çalışmaz%&gt;</p>
<p>JScript Açıklamaları // açıklama simgeleri JScript de desteklenmiştir. Bu simgeler her açıklama satırında kullanılmalıdır.<br />
&lt;% Call TarihYaz %&gt;<br />
&lt;SCRIPT LANGUAGE=JScript RUNAT=Server&gt;<br />
// Bu, TarihYaz işlevi için bir tanımdır<br />
function TarihYaz()<br />
{<br />
var x<br />
x = new Date()<br />
// Bu satır şu andaki tarihi tarayıcıya gönderir,<br />
Response.Write(x.toString())<br />
}<br />
&lt;/SCRIPT&gt;</p>
<p>Büyük-Küçük Harf Ayrımı<br />
VBScript büyük-küçük harf ayrımı yapmaz. ASP nin Request nesnesini kullanmak için Request ya da request yazabilirsiniz. Büyük-küçük ayrımının yapılmamasının bir sonucu değişken isimlerinin bu ayrımla ayırdedilememesidir. Örneğin renk ve Renk adında iki ayrı değişken kullanamazsınız.</p>
<p>JScript büyük-küçük harf ayrımı yapar. Örneğin Date yerine date yazmak bir hata oluşturur. Bu dökümanda bahsedilen ASP nesnelerinin yazılış biçimi, JScript de geçerlidir. (Response gibi.)</p>
<p>Not; Bu yazı 04 Aralık 2003 tarihinde <a href="http://www.sorucevap.com/uyeler/dersler.asp?maxiturk">http://www.sorucevap.com/uyeler/dersler.asp?maxiturk</a> adresinde yayınlanmıştır.</p>
<p>Kolay Gelsin <img src='http://www.tunahan.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.tunahan.net/2009/12/15/aspde-betik-dilleriyle-calisma/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Değişken ve Sabit Kullanımı</title>
		<link>http://www.tunahan.net/2009/12/15/degisken-ve-sabit-kullanimi/</link>
		<comments>http://www.tunahan.net/2009/12/15/degisken-ve-sabit-kullanimi/#comments</comments>
		<pubDate>Tue, 15 Dec 2009 03:52:54 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ASP]]></category>
		<category><![CDATA[Değişken]]></category>
		<category><![CDATA[Kullanım]]></category>
		<category><![CDATA[Sabit]]></category>

		<guid isPermaLink="false">http://www.tunahan.net/?p=51</guid>
		<description><![CDATA[Değişken bir ismi olan ve bilgisayarın belleğinde sayı ya da dizgi gibi bir tür veri saklayan bir depolama yeridir. Değişkende saklanan veriye değişkenin değeri denir. Değişkenler betiğin ne yaptığını anlatan isimler kullanarak verileri saklamanıza, geri almanıza ve üzerlerinde işlem yapmanızı sağlar.
Değişkenlerin Bildirilmesi ve İsimlendirilmesi
Değişkenleri tanımlarken ve isimlendirirken kullandığınız betik dilinin kurallarına uyun. Bir değişkeni kullanmadan [...]]]></description>
			<content:encoded><![CDATA[<p>Değişken bir ismi olan ve bilgisayarın belleğinde sayı ya da dizgi gibi bir tür veri saklayan bir depolama yeridir. Değişkende saklanan veriye değişkenin değeri denir. Değişkenler betiğin ne yaptığını anlatan isimler kullanarak verileri saklamanıza, geri almanıza ve üzerlerinde işlem yapmanızı sağlar.</p>
<p>Değişkenlerin Bildirilmesi ve İsimlendirilmesi<br />
Değişkenleri tanımlarken ve isimlendirirken kullandığınız betik dilinin kurallarına uyun. Bir değişkeni kullanmadan önce tanımlamanız gerekmese de, hataların önlenmesi açısından değişkenlerin tanımlanması iyi bir alışkanlıktır. Bir değişken tanımlamak demek, betik motoruna o isimde bir değişkenin varolduğunu ve betik boyunca isminin / değerinin kullanılabileceğini söylemek demektir.</p>
<p>VBScript<br />
VBScript de değişkenlerin önceden tanımlanmasına gerek yoktur, ancak değişkenlerin kullanılmadan önce tanımlanması iyi bir alışkanlıktır. VBScript de bir değişken tanımlamak için Dim, Public, ya da Private ifadelerinden birini kullanın. Örneğin:</p>
<blockquote><p>&lt;% Dim KullaniciAdi %&gt;</p></blockquote>
<p>VBScript deki Option Explicit ifadesini bir .asp dosyasında da kullanabilirsiniz, böylece değişkenlerin açık bir şekilde bildirilmesini zorunlu kılmış olursunuz. Option Explicit ifadesi herhangi bir ASP talimatından sonra ve HTML metni ve betik komutlarından önce gelmelidir. Bu ifade yalnızca VBScript ile yazılan ASP komutlarını etkiler, JScript komutları üzerinde bir etkisi yoktur.</p>
<p>JScript<br />
Microsoft JScript sadece bir yordamın yerel değişkenlerinin tanımlanmasını gerekli kılar, fakat burada da bütün değişkenlerin kullanılmadan önce tanımlanmaları iyi bir alışkanlıktır. Bir değişken tanımlarken var ifadesini kullanın. Örneğin:</p>
<blockquote><p>&lt;% var KullaniciAdi; %&gt;</p></blockquote>
<p>Değişkenlerin Etkinlik Alanları<br />
Bir değişkenin etkinlik alanı ya da yaşam süresi hangi betik komutlarının o değişkene erişebileceğini belirtir. Bir yordam içinde tanımlanan değişkenin yerel etkinlik alanı vardır. Yordam her işletilişinde değişken yaratılır ve tekrar yok edilir. Yordamın dışındaki herhangi bir şeyden bu değişkene erişilemez. Bir yordamın dışında tanımlanan değişkenin ise evrensel (global) etkinlik alanı vardır. ASP sayfasındaki her komut bu değişkene erişebilir ve değerini değiştirebilir.</p>
<p>Bir yerel değişken ve bir evrensel değişkenin adları aynı olabilir. Birinin değerinin değişmesi, diğerininkini değiştirmeyecektir. Eğer değişkenleri tanımlamıyorsanız, bir yordam içinde istemeden evrensel değişkenin değerini değiştirebilirsiniz. Örneğin aşağıdaki betik komutları Y adında iki değişken olmasına rağmen 1 değerini döndürür:</p>
<blockquote><p>&lt;%<br />
Dim Y<br />
Y = 1<br />
Call YerelDegiskeneAktar<br />
Response.Write Y</p>
<p>Sub YerelDegiskeneAktar<br />
Dim Y<br />
Y = 2<br />
End Sub<br />
%&gt;</p></blockquote>
<p>Aşağıdaki betik komutları ise 2 değerini döndürür, çünkü değişkenler açıkça tanımlanmamıştır. Yordam, Y nin değerine 2 atadığı zaman, betik motoru bunun evrensel değişkene atanmak istediğini varsayar:</p>
<blockquote><p>&lt;%<br />
Y = 1<br />
Call YerelDegiskeneAktar<br />
Response.Write Y</p>
<p>Sub SetLocalVariable<br />
Y = 2<br />
End Sub<br />
%&gt;</p></blockquote>
<p>Olabilecek problemleri önlemek için, bütün değişkenleri ayrı ayrı tanımlama alışkanlığı edinin. Bu, özellikle ASP sayfanıza #include ifadesi kullanarak diğer dosyaların içerilmesini sağlarken önemlidir. Dahil edilen betik başka bir dosyada tutulmaktadır, ancak aynı dosyanın bir parçası gibi işlem görmektedir. Değişkenleri tanımlamazsanız, asıl betikte ve dahil edilen betikte farklı değişken isimleri kullanmanız gerektiğini unutabilirsiniz.</p>
<p>Değişkenlere Oturum ya da Uygulama Etkinlik Alanı Atama<br />
Evrensel değişkenler yalnızca bir ASP sayfasında erişilebilirdir. Değişkenin bir sayfanın ötesinde erişilebilir olmasını sağlamak için değişkene bir oturum ya da uygulama etkinlik alanı verin. Oturum etkinlik alanına sahip değişkenler, bir ASP uygulamasında kullanıcı tarafından istenen tüm sayfalarda etkindir. Oturum değişkenleri tek bir kullanıcının bilgilerini tutmak için iyi bir yoldur. Bu bilgiler; kullanıcın kimlik bilgileri ya da tercih bilgileri vs. olabilir. Uygulama değişkenleri belli bir uygulamanın tüm kullanıcılarına ilişkin bilgilerin tutulmasında iyi bir yoldur. Bu bilgiler ise; uygulamaya özel selamlama biçimi, uygulama için gerekli olan ilk değerler vs. olabilir.</p>
<p>ASP, içinde değişken saklayabileceğiniz iki standart nesne sunar: Session (oturum) nesnesi ve Application (uygulama) nesnesi.</p>
<p>Oturum Etkinlik Alanı<br />
Bir değişkene oturum etkinlik alanı vermek için, değişkeni Session nesnesi içinde isimlendirilmiş bir girişte saklayın. Örneğin aşağıdaki komutlar Session nesnesi içinde iki yeni değer saklar:</p>
<blockquote><p>&lt;%<br />
Session(&#8221;Adi&#8221;) = &#8220;Meltem&#8221;<br />
Session(&#8221;Soyadi&#8221;) = &#8220;Ergün&#8221;<br />
%&gt;</p></blockquote>
<p>Session nesnesinden bilgi almak için isimlendirilmiş girişe, çıktı komutu (&lt;%=) ya da Response.Write ile erişin. Aşağıdaki örnek çıkış komutunu kullanarak Session(&#8221;Adi&#8221;) nin o anki değerini göstermektedir.</p>
<p>Merhaba &lt;%= Session(&#8221;Adi&#8221;) %&gt;<br />
Session nesnesinde kullanıcı tercihlerini de saklayabilirsiniz ve böylece kullanıcıya hangi sayfayı döndüreceğinize karar verebilirsiniz. Örneğin uygulamanızın ilk sayfasında, kullanıcıya sayfanızın sadece metin içeren bir şeklini isteme şansı verebilir ve bu seçimi takip eden tüm sayfalarda da uygulayabilirsiniz.</p>
<blockquote><p>&lt;% If Session(&#8221;ScreenResolution&#8221;) = &#8220;Low&#8221; Then %&gt;<br />
Bu sayfanın metin sürümüdür.<br />
&lt;% Else %&gt;<br />
Bu sayfanın çoklu ortam sürümüdür.<br />
&lt;% End If %&gt;</p></blockquote>
<p>Uygulama Etkinlik Alanı<br />
Bir değişkene uygulama etkinlik alanı vermek için değişkeni Application nesnesi içindeki bir isimlendirilmiş girişte saklayın. Örneğin aşagıdaki komut, uygulamaya özel bir selamlamayı Application nesnesi içinde saklamaktadır.</p>
<blockquote><p>&lt;% Application(&#8221;Selamlama&#8221;) = &#8220;THY ye hoş geldiniz!&#8221; %&gt;</p></blockquote>
<p>Application nesnesinden bilgi alabilmek için, ASP çıkış komutunu (&lt;%=) ya da Response.Write ı kullanarak uygulamadaki sayfaların herhangi birinden isimlendirlmiş girişe erişin. Aşağıdaki örnek, çıkış komutunu (&lt;%=) kullanarak Application(&#8221;Selamlama&#8221;) nın değerini gösterir:</p>
<blockquote><p>&lt;%= Application(&#8221;Selamlama&#8221;)%&gt;</p></blockquote>
<p>Sabitlerin Kullanılması<br />
Bir sabit, bir sayı ya da dizginin yerini alan bir isimdir. ASP ile birlikte gelen bazı temel bileşenler (ActiveX Veri Nesneleri-ADO gibi) betiklerinizde kullanabileceğiniz sabitler tanımlar. Bir bileşen sabitleri bir bileşen tür kütüphanesi (bir ActiveX bileşenince desteklenen nesneler ve türler hakkında bilgi tutan bir dosya) içinde saklayabilir. Global.asa dosyasında bir tür kütüphanesi oluşturduktan sonra, tanımlanan sabitleri uygulamadaki tüm betiklerde kullanabilirsiniz.</p>
<p>Bir tür kütüphanesi tanımlamak için, uygulamanızın Global.asa dosyasında &lt;METADATA&gt; etiketini kullanın. Örneğin ADO tür kütüphanesini tanımlamak için aşagıdaki ifadeleri kullanın:</p>
<blockquote><p>&lt;!&#8211;METADATA TYPE=&#8221;typelib&#8221;<br />
FILE=&#8221;c:\program files\common files\system\ado\msado15.dll&#8221;<br />
&#8211;&gt;</p></blockquote>
<p>Daha sonra, Global.asa dosyasıyla aynı uygulamadaki bütün betiklerde ADO sabitlerini kullanabilirsiniz. Takip eden örnekte, adOpenKeyset ve adLockOptimistic deyimleri ADO sabitleridir:</p>
<blockquote><p>&#8216;Recordset Nesnesini Yaratın ve Açın<br />
Set RsMusteri = Server.CreateObject(&#8221;ADODB.Recordset&#8221;)<br />
RsMusteri.ActiveConnection = OBJdbConnection<br />
RsMusteri.CursorType = adOpenKeyset<br />
RsMusteri.LockType = adLockOptimistic</p></blockquote>
<p>ASP nin önceki sürümlerinde, bazı bileşenlerin tanımladığı sabitlerin bulunduğu dosyaların, bu sabitlerin kullanıldığı her ASP dosyasında dahil edilmesi zorunlu idi. #include ifadesinin sabit tanımlarının dahil edilmesinde kullanılması hala desteklenmektedir, ama tür kütüphanelerinin kulanımı daha kolaydır ve betiklerinizin kolayca günlenmesini sağlar. ASP nin ilerki sürümlerinde bileşenler sabitlerin tanımlandığı dosyaları sağlamayabilir.</p>
<p>Kendi sabitlerinizi tanımlayabilirsiniz. VBScript de Const ifadesini kullanın. JScript de ise var ifadesini kullanın. Kandi sabitlerinizi birden çok ASP sayfasında kullanmak isterseniz, tanımları ayrı bir ASP dosyasına koyun ve bu sabitleri kullanan ASP dosyalarına bu dosyayı da dahil edin.</p>
<p>Not; Bu yazı 04 Aralık 2003 tarihinde <a href="http://www.sorucevap.com/uyeler/dersler.asp?maxiturk">http://www.sorucevap.com/uyeler/dersler.asp?maxiturk</a> adresinde tarafımca yayınlanmıştır.</p>
<p>Kolay Gelsin <img src='http://www.tunahan.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.tunahan.net/2009/12/15/degisken-ve-sabit-kullanimi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Asp&#8217;de Yordamların Yazılması</title>
		<link>http://www.tunahan.net/2009/12/15/aspde-yordamlarin-yazilmasi/</link>
		<comments>http://www.tunahan.net/2009/12/15/aspde-yordamlarin-yazilmasi/#comments</comments>
		<pubDate>Tue, 15 Dec 2009 03:43:58 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ASP]]></category>
		<category><![CDATA[Source]]></category>
		<category><![CDATA[Yordam Yazım]]></category>

		<guid isPermaLink="false">http://www.tunahan.net/?p=49</guid>
		<description><![CDATA[Bir yordam, belli bir işi yapan ve bir değer döndürebilen betik komutları kümesidir. Kendi yordamlarınızı tanımlayabilir ve bunları betiklerinizde tekrar tekrar çağırabilirsiniz. Yordam tanımlarınızı, bu yordamları çağıran .asp dosyasına yerleştirebileceğiniz gibi sıkça kullanılan yordamlarınızı ortak kullanılan bir .asp dosyadına yerleştirip #include deyimiyle diğer .asp dosyalarına dahil edebilirsiniz. Ayrıca, bir ActiveX paketini de bu işlev için [...]]]></description>
			<content:encoded><![CDATA[<p>Bir yordam, belli bir işi yapan ve bir değer döndürebilen betik komutları kümesidir. Kendi yordamlarınızı tanımlayabilir ve bunları betiklerinizde tekrar tekrar çağırabilirsiniz. Yordam tanımlarınızı, bu yordamları çağıran .asp dosyasına yerleştirebileceğiniz gibi sıkça kullanılan yordamlarınızı ortak kullanılan bir .asp dosyadına yerleştirip #include deyimiyle diğer .asp dosyalarına dahil edebilirsiniz. Ayrıca, bir ActiveX paketini de bu işlev için kullanabilirsiniz.</p>
<p>Yordam Tanımlama<br />
Yordam tanımları &lt;SCRIPT&gt; ve &lt;/SCRIPT&gt; etiketleri arasında yer alır ve belirtilen betik dilinin kurallarına uymak zorundadır. &lt;SCRIPT&gt; etiketini, birincil betik dilinden ayrı bir betik dilinde yazılan yordamlar için kullanın. Birincil betik dilinde yazılan yordamlar için ise, &lt;% ve %&gt; betik ayraçlarını kullanın.</p>
<p>HTML in &lt;SCRIPT&gt; etiketini kullanırken, betiğin sunucu tarafında işlenmesi için iki özelliği kullanmalısınız. &lt;SCRIPT&gt; etiketini kullanmanın sözdizimi:</p>
<blockquote><p>&lt;SCRIPT RUNAT=SERVER LANGUAGE=JSCRIPT&gt;<br />
yordam tanımı<br />
&lt;/SCRIPT&gt;</p></blockquote>
<p>RUNAT=SERVER özelliği, ağ sunucusuna betiğin sunucuda işlenmesi gerektiğini söyler. Eğer bu özelliği kurmazsanız, betik istemci tarayıcı da işlenir. LANGUAGE özelliği bu betik bloğu için kullanılacak olan betik dilini belirtir. Betik motorunuz olan herhangi bir betik dilini kullanabilirsiniz. VBScript belirtmek için VBSCRIPT, JScript belirtmek içinse JSCRIPT değerini kullanmanız gerekir. Eğer LANGUAGE özelliğini kurmazsanız, betik bloğu birincil betik dilinde yorumlanır.</p>
<p>Betik bloğundaki komutlar seçilen betik dilinde bir ya da daha fazla tam yordam oluşturmalıdır. Örneğin aşağıdaki komutlar JScript dilindeki BirYordam yordamını tanımlamaktadır:</p>
<blockquote><p>&lt;HTML&gt;<br />
&lt;SCRIPT RUNAT=SERVER LANGUAGE=JSCRIPT&gt;<br />
function BirYordam()<br />
{<br />
Response.Write(&#8221;BirYordam çağırıldı!&#8221;)<br />
}<br />
&lt;/SCRIPT&gt;</p></blockquote>
<p>Önemli: Sunucu tarafında &lt;SCRIPT&gt; etiketleri arasında tam yordamların parçaları olmayan betik komutları kullanmayın. Bir yordamın bölümü olmayan komutlar, tahmin edilemeyecek sonuçlar doğurabilirler, çünkü çalıştırılma sıraları tahmin edilemez. Ayrıca, ASP çıkış komutunu (&lt;%=) da bir yordam içinde kullanamazsınız. Bunu yerine, Response.Write kullanmalısınız.</p>
<p>Yordam Çağırma<br />
Yordam çağırmak için, yordamın adını bir komutta kullanın. VBScript den JScript yordamları çağırıyorsanız, yordam isminden sonra parantez kullanın; yordamın hiçbir parametresi yoksa boş parantez kullanın. JScript den VBScript ya da JScript yordamları çağırıyorsanız, yordam adından sonra mutlaka parantez kullanın.</p>
<p>VBScript de yordam çağırırken Call anahtar kelimesini de kulanabilirsiniz. Yalnız, çağırdığınız yordamın parametreleri varsa bu parametreler de parantezler dahilinde verilmelidir. Call anahtar kelimesini kullanmazsanız parametreler etrafına parantez koymanıza da gerek yoktur. Call sözdizimi ile herhangi bir standart ya da kullanıcının tanımladığı işlevi çağırmak isterseniz, işlevin döndürdüğü değer atılır.</p>
<p>Aşağıdaki örnekte iki değişik betik dili (VBScript ve JScript) kullanılarak yordam yazılması ve çağırılması örneklenmiştir:</p>
<blockquote><p>&lt;%@ LANGUAGE = VBSCRIPT &gt;%<br />
&lt;HTML&gt;<br />
&lt;BODY&gt;<br />
&lt;% Call Yaz %&gt;<br />
&lt;BR&gt;<br />
&lt;% Call TarihYaz() %&gt;<br />
&lt;/BODY&gt;<br />
&lt;/HTML&gt;</p>
<p>&lt;%<br />
Sub Yaz<br />
Response.Write &#8220;&lt;TABLE&gt;&#8221;<br />
Response.Write &#8220;&lt;TR&gt;&lt;TH&gt;Name&lt;/TH&gt;&lt;TH&gt;Value&lt;/TH&gt;&lt;/TR&gt;&#8221;<br />
Set Params = Request.QueryString<br />
For Each p in Params<br />
Response.Write &#8220;&lt;TR&gt;&lt;TD&gt;&#8221; &amp; p &amp; &#8220;&lt;/TD&gt;&lt;TD&gt;&#8221; &amp; _<br />
Params(p) &amp; &#8220;&lt;/TD&gt;&lt;/TR&gt;&#8221;<br />
Next<br />
Response.Write &#8220;&lt;/TABLE&gt;&#8221;<br />
End Sub<br />
%&gt;</p>
<p>&lt;SCRIPT LANGUAGE=JScript RUNAT=Server&gt;<br />
function TarihYaz()<br />
{<br />
var x<br />
x = new Date()<br />
Response.Write(x.toString())<br />
}<br />
&lt;/SCRIPT&gt;</p></blockquote>
<p>Dizilerin Yordamlara Parametre Olarak Gönderilmesi<br />
VBScript de bir dizinin tümünü bir yordama göndermek için, dizi isminden sonra boş parantez kullanın; JScript de ise boş köşeli parantez kullanın.</p>
<p>Not; Bu yazı 04 Aralık 2003 tarihinde <a href="http://www.sorucevap.com/uyeler/dersler.asp?maxiturk">http://www.sorucevap.com/uyeler/dersler.asp?maxiturk</a> adresinde tarafımca yayınlanmıştır.</p>
<p>Kolay Gelsin <img src='http://www.tunahan.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.tunahan.net/2009/12/15/aspde-yordamlarin-yazilmasi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Asp&#8217;de Bileşen ve Nesnelerin Kullanılması</title>
		<link>http://www.tunahan.net/2009/12/15/aspde-bilesen-ve-nesnelerin-kullanilmasi/</link>
		<comments>http://www.tunahan.net/2009/12/15/aspde-bilesen-ve-nesnelerin-kullanilmasi/#comments</comments>
		<pubDate>Tue, 15 Dec 2009 03:40:34 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ASP]]></category>
		<category><![CDATA[Bileşen]]></category>
		<category><![CDATA[Kullanım]]></category>
		<category><![CDATA[Nesne]]></category>
		<category><![CDATA[Source]]></category>

		<guid isPermaLink="false">http://www.tunahan.net/?p=46</guid>
		<description><![CDATA[ActiveX bileşenleri güçlü ağ uygulamaları yaratmanın anahtarıdır. Bileşenler, betiklerinizde kullanabileceğiniz nesneler sunar. ASP ayrıca betiklerinizde kullanabileceğiniz standart nesneler sunar. Bu bölümde bileşenlerin sağladığı nesneler ve ASP nin standart nesnelerinin kullanılması anlatılmaktadır.
Bileşenler Hakkında
Bir ActiveX bileşeni, belli bir işi ya da belli işleri yapan program kodu içeren bir dosyadır. Bileşenler sık kullanılan işleri yaparlar, böylece bu işleri [...]]]></description>
			<content:encoded><![CDATA[<p>ActiveX bileşenleri güçlü ağ uygulamaları yaratmanın anahtarıdır. Bileşenler, betiklerinizde kullanabileceğiniz nesneler sunar. ASP ayrıca betiklerinizde kullanabileceğiniz standart nesneler sunar. Bu bölümde bileşenlerin sağladığı nesneler ve ASP nin standart nesnelerinin kullanılması anlatılmaktadır.</p>
<p>Bileşenler Hakkında<br />
Bir ActiveX bileşeni, belli bir işi ya da belli işleri yapan program kodu içeren bir dosyadır. Bileşenler sık kullanılan işleri yaparlar, böylece bu işleri yapmak için kendi kodunuzu yazmanıza gerek yoktur. ASP, veri tabanı erişim bileşeni (Database Access Component) gibi hemen kullanabileceğiniz temel bileşenlerle birlikte gelir. Daha sonra başka bazı bileşenleri dışardan edinebilir ya da kendi bileşenlerinizi yazabilirsiniz.</p>
<p>Bileşenleri, betikleriniz ya da ağ uygulamalarınızın temel taşları olarak kullanırsınız. Betik dillerinde yeniyseniz, bileşenleri kullanan betikleri bileşenlerin nasıl çalıştığını bilmeden yazabilirsiniz. Sadece bilmeniz gereken, bileşenlerin sağladığı nesnelere nasıl erişmeniz gerektiğidir. Bileşenler, programlama öğrenmeden iyi betikler yazabilmenizi sağlar.</p>
<p>Ağ uygulaması geliştiricisiyseniz, iş mantığını çevreleyen bileşenler yazabilirsiniz. Örneğin bir ürünün satışında satış vergisini hesaplayan bir bileşen yazabilirsiniz. Daha sonra bu bileşeni belli bir siparişi işleyen bir betikten çağırabilirsiniz. Vergi hesaplanması işini sipariş işinden ayırarak belli bir bölge için vergi düzenlemeleri değiştiğinde yazdığınız bileşeni kolayca günleyebilirsiniz. C, C++, Java ya da Visual Basic gibi COM u (Common Object Model / Ortak Nesne Modeli) destekleyen tüm programlama dillerinde bileşen yazabilirsiniz. COM programlama ile ilişkiniz varsa; ActiveX bileşenleri otomasyon sunucularıdır. Ağ sunucusunda çalışacaklarsa, ActiveX bileşenleriniz MsgBox işlevi gibi görsel ögelere sahip olmamalıdır.</p>
<p>Bileşenler tekrar kullanılabilir. Bir bileşeni ağ sunucunuza kurduğunuz zaman, onu bir ASP betiğinden, bir ISAPI uygulamasından, sunucudaki diğer bir bileşenden ya da başka bir COM-uyumlu programlama dilinde yazılan bir programdan çağırabilirsiniz.</p>
<p>Bir Bileşene Ait Nesnenin Bir Örneğinin Yaratılması<br />
Bir bileşen, bir dinamik kütüphane (.dll) ya da çalıştırılır dosyada (.exe) tutulan çalıştırılır koddur. Bileşen, bir ya da daha fazla nesne ve onun / onların yordamlarını (method) ve özelliklerini içerir. Bir bileşenin sağladığı nesneyi kullanmak için nesnenin bir örneğini oluşturursunuz ve bu yeni örneğe bir değişken ismi atarsınız. ASP nin Server.CreateObject yordamını kullanarak nesne örneği yaratın. Kullandığınız betik dilinin değişken atama sözdizimini kullanarak nesne örneğinize bir isim verin.</p>
<p>Örneğin ASP AdRotator nesnesinin bir örneğinin yaratılması aşağıdaki gibidir:</p>
<p>VBScript ile:</p>
<blockquote><p>&lt;% Set MyAds = Server.CreateObject(&#8221;MSWC.AdRotator&#8221;) %&gt;<br />
JScript ile:</p>
<p>&lt;% var MyAds = Server.CreateObject(&#8221;MSWC.AdRotator&#8221;) %&gt;<br />
HTML &lt;OBJECT&gt; etiketini kullanarak da nesne örnekleri yaratabilirsiniz. RUNAT ve ID özelliklerini belirtmelisiniz. Nesneyi ya onun PROGID si ya da CLSID si ile tanımlayabilirsiniz:</p>
<p>&lt;OBJECT RUNAT=Server ID=MyAd PROGID=&#8221;MSWC.AdRotator&#8221;&gt;&lt;/OBJECT&gt;</p></blockquote>
<p>ya da</p>
<blockquote><p>&lt;OBJECT RUNAT=Server ID=MyAd<br />
CLASSID=&#8221;Clsid:1621F7C0-60AC-11CF-9427-444553540000&#8243;&gt;&lt;/OBJECT&gt;</p></blockquote>
<p>Bir Nesneye Ait Metodların Çağırılması</p>
<p>Metod, bir nesne üzerinde ya da bir nesne ile birlikte uygulayabileceğiniz bir iş / harekettir. Bir metodu çağırmak için kullanılan genel sözdizimi:<br />
Nesne.Metod parametereler<br />
Parametreler metoda göre değişir.<br />
Örneğin Response standart nesnesinin Write metodunu aşağıdaki gibi kullanarak tarayıcıya bilgi gönderebilirsiniz:</p>
<blockquote><p>&lt;% Response.Write &#8220;Merhaba&#8221; %&gt;</p></blockquote>
<p>NOT: Bazı betik dilleri Nesne.Metod sözdizimini desteklemez. Sizin diliniz desteklemiyorsa, Windows kayıtlarına (registry) bir kayıt eklemelisiniz.</p>
<p>Not; Bu yazı 04 Aralık 2003 tarihinde <a href="http://www.sorucevap.com/uyeler/dersler.asp?maxiturk">http://www.sorucevap.com/uyeler/dersler.asp?maxiturk</a> adresinde tarafımca yayınlanmıştır.</p>
<p>Kolay Gelsin <img src='http://www.tunahan.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.tunahan.net/2009/12/15/aspde-bilesen-ve-nesnelerin-kullanilmasi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Asp&#8217;de Kolleksiyon Kullanımı</title>
		<link>http://www.tunahan.net/2009/12/15/aspde-kolleksiyon-kullanimi/</link>
		<comments>http://www.tunahan.net/2009/12/15/aspde-kolleksiyon-kullanimi/#comments</comments>
		<pubDate>Tue, 15 Dec 2009 03:37:14 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ASP]]></category>
		<category><![CDATA[Kolleksiyon]]></category>
		<category><![CDATA[Kullanımı]]></category>

		<guid isPermaLink="false">http://www.tunahan.net/?p=44</guid>
		<description><![CDATA[Birçok ASP standart nesnesi koleksiyonları destekler. Koleksiyon; numara, nesne ya da başka değerleri saklamak için kullanılabilecek bir yerdir. Koleksiyonlar da dizilere benzer ama eleman ekledikçe ve eleman silindikçe koleksiyonların boyu değişebilir. Dizilerin aksine bir elemanın yeri koleksiyonlar değiştirildikçe değişir. Koleksiyonun bir elemanına adıyla, dizin numarasıyla erişebilirsiniz.
Bir Elemana Adı ya da Dizin Numarasıyla Erişmek
Koleksiyondaki özel bir [...]]]></description>
			<content:encoded><![CDATA[<p>Birçok ASP standart nesnesi koleksiyonları destekler. Koleksiyon; numara, nesne ya da başka değerleri saklamak için kullanılabilecek bir yerdir. Koleksiyonlar da dizilere benzer ama eleman ekledikçe ve eleman silindikçe koleksiyonların boyu değişebilir. Dizilerin aksine bir elemanın yeri koleksiyonlar değiştirildikçe değişir. Koleksiyonun bir elemanına adıyla, dizin numarasıyla erişebilirsiniz.</p>
<p>Bir Elemana Adı ya da Dizin Numarasıyla Erişmek<br />
Koleksiyondaki özel bir elemana adıyla erişebilirsiniz. Örneğin Contents koleksiyonu Session nesnesinde saklanan değişkenleri tutar. Ayrıca Server.CreateObject ile yaratılan bütün nesneleri de tutar. Aşağıdaki bilgileri Session nesnesinde sakladığınızı düşünün:</p>
<blockquote><p>&lt;%<br />
Session.Contents(&#8221;Adi&#8221;) = &#8220;Mustafa&#8221;<br />
Session.Contents(&#8221;Soyadi&#8221;) = &#8220;Aydıner&#8221;<br />
%&gt;</p></blockquote>
<p>Bir nesneye, o nesneyi koleksiyona saklarken kullandığınız isimle erişebilirsiniz. Örneğin aşağıdaki deyim &#8220;Mustafa&#8221; kelimesini döndürür:</p>
<blockquote><p>&lt;%= Session.Contents(&#8221;Adi&#8221;) %&gt;</p></blockquote>
<p>Bir elemana aynı zamanda onunla ilgili bir dizin numarasıyla da erişebilirsiniz. Örneğin aşağıdaki deyim Session nesnesinin ikinci alanındaki bilgiyi döndürür.</p>
<blockquote><p>&lt;%= Session.Contents(2) %&gt;</p></blockquote>
<p>ASP koleksiyonları 1 le başlayarak numaralandırılır. Bir elemanla ilişkili numara koleksiyona eleman eklendikçe ya da koleksiyondan eleman silindikçe değişebilir. Eleman numarasının aynı kalacağını düşünmemelisiniz. Dizinli erişim genelde takip eden kesimde anlatıldığı gibi bir koleksiyonun elemanlarına sıradan erişmek gerektiğinde ya da yalnız okunur bir koleksiyona erişildiğinde kullanınır.</p>
<p>Bir Koleksiyona Sıradan Erişim<br />
Bir koleksiyonun elemanlarına sıradan da erişebilirsiniz. Koleksiyona sıradan erişmek için koleksiyonun ismini kullanmalısınız. Örneğin VBScript&#8217;in For..Each deyimlerini kullanarak Session nesnesinde sakladığınız elemanlara erişebilirsiniz:</p>
<blockquote><p>&lt;%<br />
Dim Item</p>
<p>For Each Item in Session.Contents<br />
Response.Write Session.Contents(Item) &amp; &#8220;&lt;BR&gt;&#8221;<br />
Next<br />
%&gt;</p></blockquote>
<p>Bir koleksiyonda saklanan elemanların sayısını belirlemek için Count deyimi kullanılır. Count deyimi, VBScript&#8217;in For..Next deyimleri ile kullanılarak da koleksiyonun elemanlarına sıradan erişilebilir:</p>
<blockquote><p>&lt;%<br />
Dim Item</p>
<p>For Item = 1 to Session.Contents.Count<br />
Response.Write Session.Contents(Item) &amp; &#8220;&lt;BR&gt;&#8221;<br />
Next<br />
%&gt;</p></blockquote>
<p>JScript&#8217;te de for deyimi kullanarak koleksiyonun elemanlarına erişebilirsiniz. Aşağıdaki örnekteki tekniği kullanmanız tavsiye edilir:</p>
<blockquote><p>&lt;%<br />
var item, numitems;<br />
numitems = Session.Contents.Count;<br />
for (item = 1; item &lt;= numitems; item++) {<br />
Response.Write(Session.Contents(item) + &#8220;&lt;BR&gt;&#8221;)<br />
}<br />
%&gt;</p></blockquote>
<p>Microsoft JScript sürüm 3.0 da tanıtılan Enumerator nesnesini de bu amaçla kullanabilirsiniz:</p>
<blockquote><p>&lt;%<br />
var mycoll = new Enumerator(Session.Contents);</p>
<p>while (!mycoll.atEnd()) {<br />
var x = mycoll.item();<br />
Response.Write(Session.Contents(x) + &#8220;&lt;BR&gt;&#8221;);<br />
mycoll.moveNext();<br />
}<br />
%&gt;</p></blockquote>
<p>Not; Bu yazı 04 Aralık 2003 tarihinde <a href="http://www.sorucevap.com/uyeler/dersler.asp?maxiturk">http://www.sorucevap.com/uyeler/dersler.asp?maxiturk</a> adresinde tarafımca yayınlanmıştır.</p>
<p>Kolay Gelsin <img src='http://www.tunahan.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.tunahan.net/2009/12/15/aspde-kolleksiyon-kullanimi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nesne Etkinlik Alanlarının Atanması</title>
		<link>http://www.tunahan.net/2009/12/15/nesne-etkinlik-alanlarinin-atanmasi/</link>
		<comments>http://www.tunahan.net/2009/12/15/nesne-etkinlik-alanlarinin-atanmasi/#comments</comments>
		<pubDate>Tue, 15 Dec 2009 03:31:37 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ASP]]></category>
		<category><![CDATA[Alanları]]></category>
		<category><![CDATA[Atanması]]></category>
		<category><![CDATA[Etkinlik]]></category>
		<category><![CDATA[Nesne]]></category>
		<category><![CDATA[Source]]></category>

		<guid isPermaLink="false">http://www.tunahan.net/?p=40</guid>
		<description><![CDATA[Sayfa Etkinlik Alanı Kullanımı
Server.CreateObject ile yarattığınız bir nesne o sayfa boyunca varolur. Nesne o sayfa üzerindeki bütün betik komutlarınca erişilebilir ve sayfanın işlenmesi bittiğinde bırakılır.
Visual Basic ya da VBScript ile programlama yaptıysanız, ASP sayfayı işlemeyi bitirene kadar bir nesneyi bırakamamanıza dikkat edin. Örneğin aşağıdaki VBScript ifadesi bir nesneyi bırakmak için kullanılır:
Set myObj = Nothing
Bu ifadeyi [...]]]></description>
			<content:encoded><![CDATA[<p>Sayfa Etkinlik Alanı Kullanımı<br />
Server.CreateObject ile yarattığınız bir nesne o sayfa boyunca varolur. Nesne o sayfa üzerindeki bütün betik komutlarınca erişilebilir ve sayfanın işlenmesi bittiğinde bırakılır.</p>
<p>Visual Basic ya da VBScript ile programlama yaptıysanız, ASP sayfayı işlemeyi bitirene kadar bir nesneyi bırakamamanıza dikkat edin. Örneğin aşağıdaki VBScript ifadesi bir nesneyi bırakmak için kullanılır:</p>
<blockquote><p>Set myObj = Nothing</p></blockquote>
<p>Bu ifadeyi bir ASP sayfasında kullanırsanız, myObj yi kullanmaya ilişkin her deneme tahmin edildiği gibi bir hata kodu döndürecektir. Ama aslında ASP siz nesneyi bıraktıktan sonra da o nesneye atanan kaynakları tutar ve sayfanın işlenmesi bitenen kadar da bu sürer.</p>
<p>Nesnelerin sayfa etkinlik alanları olduğu için kodla bırakılabileceklerine güvenmeyin. Örneğin aşağıdaki döngü 1001 tane Connection nesnesi yaratır ve bu da büyük bir SQL sunucu üzerindeki bağlantılardan bile birçoğunu açar:</p>
<blockquote><p>&lt;%<br />
For I = 0 to 1000<br />
Set Conn = Server.CreateObject(&#8221;ADODB.Connection&#8221;)<br />
Conn.Open &#8220;connection string&#8221;<br />
Next<br />
%&gt;</p></blockquote>
<p>Bir Nesneye Oturum Etkinlik Alanı Atanması<br />
Oturum etkinlik alanına sahip bir nesne her yeni oturum için yaratılır ve oturum sona erince bırakılır; yani her aktif oturum için bir nesne vardır. Oturum etkinlik alanı, birden çok betik tarafından kullanılan ama tek bir kullnıcı oturumunu etkileyen nesneler için kullanılır.</p>
<p>Bir nesneye oturum etkinlik alanı atamak için nesneyi ASP nin standart Session nesnesinde saklayın. Global.asa dosyasında &lt;OBJECT&gt; etiketini kullanarak ya da bir ASP sayfasında Server.CreateObject metodunu kullanarak oturum etkinlik alanı olan bir nesne yaratabilirsiniz.</p>
<p>Global.asa dosyasında &lt;OBJECT&gt; etiketini RUNAT (Server atanmalıdır) ve SCOPE (Session atanmalıdır) deyimleri ile genişleterek kullanabilirsiniz. Örneğin:</p>
<blockquote><p>&lt;OBJECT RUNAT=Server SCOPE=Session ID=MyAd PROGID=&#8221;MSWC.Adrotator&#8221;&gt;<br />
&lt;/OBJECT&gt;</p></blockquote>
<p>Nesneyi Session nesnesi içinde sakladıktan sonra nesneye uygulamadaki herhangi bir sayfadan erişebilirsiniz. Aşağıdaki ifade bir önceki örnekte &lt;OBJECT&gt; etiketi ile yaratılan nesneyi kullanmaktadır:</p>
<blockquote><p>&lt;%= MyAd.GetAdvertisement(&#8221;addata.txt&#8221;) %&gt;</p></blockquote>
<p>Bir ASP sayfasında Server.CreateObject metoduyla bir nesneyi Session nesnesinde tutabilirsiniz. Örneğin:</p>
<blockquote><p>&lt;% Set Session(&#8221;MyAd&#8221;) = Server.CreateObject(&#8221;MSWC.Adrotator&#8221;) %&gt;</p></blockquote>
<p>Nesneyi aşağıdaki gibi kullanabilirsiniz:</p>
<blockquote><p>&lt;% Set MyAd = Session(&#8221;MyAd&#8221;) %&gt;<br />
&lt;%= MyAd.GetAdvertisement(&#8221;addata.txt&#8221;) %&gt;</p></blockquote>
<p>Nesnelere Uygulama Etkinlik Alanı Atanması<br />
Uygulama etkinlik alanına sahip bir nesne, uygulama başlayınca yaratılan bir nesnedir. Bu nesne tüm istemcilerce paylaşılır. Çok az durumda bir nesneye uygulama etkinlik alanı vermelisiniz. Sayaçlar gibi bazı nesnelere uygulama etkinlik alanı verilebilir ama genelde takip eden kesimde önerilen alternatifleri kullanmalısınız.</p>
<p>Bir nesneye uygulama etkinlik alanı vermek için nesneyi ASP nin standart Application nesnesinde saklayın. Bunu yapmak için Global.asa dosyasında &lt;OBJECT&gt; etiketi kullanabilir ya da bir ASP sayfasında Server.CreateObject kullanabilirsiniz.</p>
<p>Not; Bu yazı 04 Aralık 2003 tarihinde <a href="http://www.sorucevap.com/uyeler/dersler.asp?maxiturk">http://www.sorucevap.com/uyeler/dersler.asp?maxiturk</a> adresinde tarafımca yayınlanmıştır.</p>
<p>Kolay Gelsin <img src='http://www.tunahan.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.tunahan.net/2009/12/15/nesne-etkinlik-alanlarinin-atanmasi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Standart Asp Nesneleri</title>
		<link>http://www.tunahan.net/2009/12/15/standart-asp-nesneleri/</link>
		<comments>http://www.tunahan.net/2009/12/15/standart-asp-nesneleri/#comments</comments>
		<pubDate>Tue, 15 Dec 2009 03:29:45 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ASP]]></category>
		<category><![CDATA[Nesne]]></category>
		<category><![CDATA[Object]]></category>
		<category><![CDATA[Request]]></category>

		<guid isPermaLink="false">http://www.tunahan.net/?p=38</guid>
		<description><![CDATA[Application Nesnesi
Application nesnesini bir uygulamanın tüm kullanıcıları arasında bilgi paylaştırmak için kullanırsınız.
Request Nesnesi
Request nesnesini bir HTTP istemiyle gelen bütün bilgilere erişmek için kullanabilirsiniz. Bu, bir HTML formundan POST veya GET ile iletilen parametreleri, çeşitli &#8220;cookie&#8221; leri vs. içerir. Request nesnesi aynı zamanda sunucuya gönderilen ikili verilere (sunucuya gönderilen ikili dosyalar gibi) de erişmenizi sağlar.
Response Nesnesi
Response [...]]]></description>
			<content:encoded><![CDATA[<p>Application Nesnesi<br />
Application nesnesini bir uygulamanın tüm kullanıcıları arasında bilgi paylaştırmak için kullanırsınız.</p>
<p>Request Nesnesi<br />
Request nesnesini bir HTTP istemiyle gelen bütün bilgilere erişmek için kullanabilirsiniz. Bu, bir HTML formundan POST veya GET ile iletilen parametreleri, çeşitli &#8220;cookie&#8221; leri vs. içerir. Request nesnesi aynı zamanda sunucuya gönderilen ikili verilere (sunucuya gönderilen ikili dosyalar gibi) de erişmenizi sağlar.</p>
<p>Response Nesnesi<br />
Response nesnesiyle bir kullanıcıya gönderdiğiniz bilgiyi kontrol edersiniz. Bu bilgiyi doğrudan tarayıcıya göndermek ya da tarayıcıyı başka bir URL ye yönlendirmek şeklinde olabilir.</p>
<p>Server Nesnesi<br />
Server nesnesi, sunucudaki metod ve özelliklere erişimi sağlar. En sık kullanılanı bir ActiveX nesnesinin bir örneğini yaratan Server.CreateObject metodudur. Diğer metodlar bir betiğin zaman sınırını belirlemek, karakter dizilerine URL ya da HTML kodlaması atama gibi işler yapar.</p>
<p>Session Nesnesi<br />
Session nesnesini belli bir kullanıcı oturumuna ilişkin bilgi saklamak için kullanırsınız. Session nesnesinde saklanan değişkenler, kullanıcı uygulamanın sayfaları arasında gezindikçe atılmaz, aksine bu değişkenler kullanıcı uygulama sayfalarına eriştiği sürece kalır.</p>
<p>ObjectContext Nesnesi<br />
ObjectContext nesnesini bir ASP betiği ile yapılan bir işlemi işlemek ya da iptal etmek için kullanabilirsiniz.</p>
<p>Not; Bu yazı 04 Aralık 2003 tarihinde <a href="http://www.sorucevap.com/uyeler/dersler.asp?maxiturk">http://www.sorucevap.com/uyeler/dersler.asp?maxiturk</a> adresinde tarafımca yayınlanmıştır.</p>
<p>Kolay Gelsin <img src='http://www.tunahan.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.tunahan.net/2009/12/15/standart-asp-nesneleri/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
