Tekil Mesaj gösterimi
Alt 17 Mart 2007, 20:43   #15
Çevrimdışı
telNET
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Sayısı: (0)
IF Ticaret Yüzdesi:(%)
Cevap: ASP Anlatımı (Dökümandır)




ZARARLI KOD TEMİZLEME
ASP-uyumlu Server dendiği zaman akla ilk gelen Microsoft Internet Information Server, site güvenliği açısından sürekli sınanan ve açığı bulunduğu taktirde MS’un yama programları ile bu açığı giderilen bir sunucu programı olarak bilinir. Bu, IIS’in ve diğer MS ürünü Web sunucu programlarının (MS Site Server ve MS Transaction Server ürünlerinin) “kurşun geçirmez” olduğu anlamına gelmez. Fakat sunucu program üreticisi ne kadar önlem alırsa alsın, sizin sitenize, kulllanıcıların yollayacağı zararlı kodları önlemeye çalışmayacaktır. Bu bir zorunluktur. Sizin için zararlı kod sayılan metin, bir başka Internet sitesi için normal kullanıcı girdisi olabilir. Server programını geliştirenler sizin ne tür girdiyi zararlı sayacağını bilemezler. Bunu siz bilmek zorundasınız.
Son yılların deneyimleri gösteriyor ki, başka yollarla Internet sitenizin kök dizinine ulaşmaya çalışan Hacker tiplerin dışında kalan zararlı kullanıcılar (Hacker özentisi kişiler!), genellikle bir veritabanına gittiğini anladıkları Form bilgilerinin içine Server Side Include (sunucu tarafında çalışacak haricî dosya) içeriği görevini yapacak kod parçacıkları katabilirler. Bu amaçla kullanılabilecek zararlı bir kod şöyle olabilir:
<script language="JavaScript"><!--
function reload() {
self.focus();
document.location.href = "[Üye Olmadan Linkleri Göremezsiniz. Üye Olmak için TIKLAYIN...]
}
setTimeout("reload();", 5000);
// --></script>
Bu kodun b&#252;t&#252;n zararı, i&#231;erdiği veritabanını ASP sayfasının herhangi bir etiketi i&#231;inde kullanıldığı taktirde ziyaret&#231;iyi burada yazılı URL’e g&#246;t&#252;rmesi ve buradaki sayfayı Browser’ınızda g&#246;r&#252;nt&#252;lemek olacaktır. Acemi Hacker’ın ziyaret&#231;inizi zorla g&#246;t&#252;rd&#252;ğ&#252; yeni Internet sitesi, sadece i&#231;erik bakımından sakıncalı olmayabilir; ziyaret&#231;iniz a&#231;ısından ger&#231;ekten tehlikeli bir alan olabilir; g&#246;ndereceği &#231;erezlerle (cookie) ziyaret&#231;inin bilgisayarında zararlı işler yapabilir. Ziyaret&#231;i bu tuzağa sizin sitenizde bulunduğu sırada d&#252;şt&#252;ğ&#252; i&#231;in, sorumluluk, en azından manevi olarak, size ait demektir.
Zararlı kodlar genellikle bu &#246;rnekte olduğu gibi b&#252;y&#252;kt&#252;r-k&#252;&#231;&#252;kt&#252;r işaretleri, d&#252;z ve ters b&#246;l&#252; ile kesme işareti i&#231;erir. &#214;rneğin bir konuk defterinde ziyaret&#231;imizden ne gibi bilgi istersek isteyelim, yazacağı metinde “<” ve “>” işaretlerinin bulunmaması gerekir. Normal bir mesajda, ancak kod yazarken kullanılan bu işaretlerin yeri olamaz. Hatta daha hassas bir d&#252;ş&#252;nceyle, normal ve kısa bir konuk defteri mesajında tek ve &#231;ift tırnak, noktalı virg&#252;l satır başı (CR) ve yeni satır (LF) işaretleri de bulunmamalıdır. Eğer normal bir ziyaret&#231;i bu gibi işaretlerle dolu bir mesaj yazmışsa, k&#246;t&#252; niyetli kişilere karşı alacağımız &#246;nlemlerle bu iyiniyetli mesaj da yazarının verdiği bi&#231;imi kaybedecektir. Bir ka&#231; ziyaret&#231;imizin konuk defterine fiyakalı yazılar yazmasını sağlamak i&#231;in, g&#252;venlikten vaz ge&#231;memek gerektiğine g&#246;re, “Kurunun yanı sıra yaş da yanar!” demekten başka bir &#231;are d&#252;ş&#252;nmek kolay değil!)
Daha &#246;nceki b&#246;l&#252;mlerde yazdığımız kodları hatırlıyorsanız (veya kimse bakmazken o sayfaları &#231;evirir bakarsanız!), ziyaret&#231;ilerimizin Form yoluyla g&#246;nderdikleri verileri iki yolla alır ve bir değişkene yazarız: QueryString ve Request.Form. İşte size bir Internet’te ger&#231;ekten kullanılan bir konuk defterinin konuk girdilerini veritabanına işleyen b&#246;l&#252;m&#252;:
<%
Ad = Request.Form("Isim")
Mektup = Request.Form("MailAdr")
Gorus = Request.Form("Mesaj")
Defter = "INSERT INTO mesaj (Isim, Email, Mesaj) VALUES ( "&" '" & Ad &"' , "&" '" & Mektup &"' , "&" '" & Gorus &"')"
Set Veriyolu = Server.CreateObject("ADODB.Connection")
Veriyolu.Open("DSN=misdefter;")
Set RS = Veriyolu.Execute(Defter)
%>
Tasarımcı, Form’dan gelen &#252;&#231; değişkenin (Isim, MailAdr ve Mesaj) değerini, yeni &#252;&#231; değişkene atamakta ve bunları oluşturduğu SQL INSERT deyimi yoluyla “misdefter” adlı veriye yazdırmaktadır. Tasarımcının d&#252;nyayı sadece iyi insanlardan oluşan bir cennet sandığı, kendisini tanımasanız bile, bu koddan anlaşılıyor. D&#252;nyayı cennet yapmak elimizde olmakla birlikte, hen&#252;z b&#252;t&#252;n insanlar bu konuda g&#246;r&#252;şbirliği i&#231;inde olmadığına g&#246;re, ziyaret&#231;iden gelen Form değişkenlerini atadığımız yeni değişkenlerin değerlerini elden ge&#231;irmeli ve i&#231;indeki zararlı kodları ayıklamalıyız, ki sonra misafir defteriniz kevgire d&#246;nmesin!
Bu işlemi, s&#246;zgelimi yukarıdaki kodun sadece birinci değişkeni (Ad) i&#231;in yapalım. Buradaki Ad = Request.Form("Isim") satırını atacağız ve yerine şu 14 satırı koyacağız:
Ad = Trim(Request.Form("Isim"))'&#246;n&#252;ndeki sonundaki boşluklari atalım
If Len(ad) Then
'**************** BURADA ISTENMEYEN KARAKTERLERI AYIKLIYORUZ ******************
Ad = Replace(Ad, Chr(10) , "") 'satır başı
Ad = Replace(Ad, Chr(34) , "") '&#231;ift tıarnak
Ad = Replace(Ad, "'" , "") * 'tek tırnak
Ad = Replace(Ad, Chr(13) , " ") 'yeni satır
Ad = Replace(Ad, "<" , " ") * 'k&#252;&#231;&#252;kt&#252;r
Ad = Replace(Ad, ">" , " ") * 'b&#252;y&#252;kt&#252;r
Do While Instr(Ad, " ") * *'iki aralık
*ad = Replace(Ad, " " , " ")
Loop
Ad = Trim(Ad) *'&#246;n&#252;ndeki sonundaki boşlukları da attık mı tamam
End If
Bu kod, Ad değişkenini, VBScript’in kullanılmaya hazır Replace() fonksiyonundan ge&#231;irerek, i&#231;indeki istenmeyen karakterleri ya yok edecek ya da aralıkla değiştirecektir. B&#246;ylece eğer k&#246;t&#252;niyetli bir kişi, Form bilgisi olarak bize kod olarak kullanılacak bir takım metinler yollamışsa, kodun ana i&#231;eriği yerinde kalmakla birlikte, kod olarak kullanılmasını sağlayacak işaretler yok olacağı i&#231;in kod d&#252;z yazıya d&#246;nm&#252;ş olacaktır.
ADO G&#252;venliği ve Hata Mesajları
MS Internet Information Server (IIS) ve diğer Web Server programları, istemcinin siteye g&#246;nderebileceği talepleri hem kendi a&#231;ılarından, hem de işletim sistemi a&#231;ısından belirleme ve sınırlama imkanı sağlarlar. Windows NT işletim sistemi bakımından Internet ziyaret&#231;isi herhangi bir ağ kullanıcısından farksızdır ve ulaşabileceği sayfalar (dosyalar) ve bu dosyalarla yapabileceği işler, “Internet Kullanıcı Hesabı” denen kullanıcının haklarına bağlıdır. IIS’i kuran Web Y&#246;neticisi, bu hesaba istediği gibi haklar kazandırabilir veya sınırlamalar getirebilir. Burada iki noktayı birbirinden dikkatle ayırmak gerekir:
Web ziyaret&#231;isinin bir Web Sitesi’nde kullanabileceği haklar HTTP kaynakları ile sınırlıdır. İşletim sistemi ile ilgili haklar bunun dışındadır. Fakat ikisinin &#231;akıştığı nokta, &#246;zellikle veritabanına dayanan Web sitelerinde, veritabanı dosyasının g&#252;ncelleştirilmesi sırasında ortaya &#231;ıkar. HTTP’nin ziyaret&#231;iye sağlayabileceği b&#252;t&#252;n okuma-yazma hakları tanınsa bile, işletim sistemi bir veritabanı dosyasının yeniden yazılmasına izin vermeyebilir.
Bunu, &#246;nceki b&#246;l&#252;mlerde veritabanı dosyasını g&#252;ncelleştirme &#246;rneklerini yeniden &#231;alıştırarak sınayabilirsiniz. Kullandığınız veri tabanını s&#246;zgelimi Windows Gezgini’nde bulun ve sağ tıklayarak “Salt okunur” hale getirin ve ilgili ASP programını &#231;alıştırın; ODBC hata mesajı verecektir.
Bu noktada Web Tasarımcısı olarak akılda tutacağımız ilke şudur: HTTP izinleri ne olursa olsun, eğer işletim sisteminin izinleri daha kısıtlayıcısı ile, işletim sisteminin dediği olur.
Tasarımcı olarak bunun bize etkisi, genellikle Web sitemize evsahipliği yapan Server işletmecisinin veritabanı dosyalarımıza yazma-okuma izni vermesini sağlamaktır. Web sitesi evsahibi (Hosting) firması, veritabanı dosyasına DSN ayarı yaparken bu izni verecektir. Ancak DSN kaydı yaptırıldığı halde veritabanınız ziyaret&#231;ilerinize ODBC hata mesajı veriyorsa evsahibi firmanın y&#246;netimine, veritabanı dosyasının “haklarını” yeniden belirlemesini hatırlatmanız gerekebilir.
Veritabanı ile y&#246;nlendirilmiş Web sayfalarımızda en sık aldığımız hata mesajı:
[Microsoft] [ODBC Driver Manager] Data source name not found
olsa gerek. Bu mesaj, veritabanının ODBC’ye tanıtılması ile ilgili işlemde arıza olduğunu g&#246;sterir. Ya veritabanı dosyasının s&#252;r&#252;m&#252;, ODBC s&#252;r&#252;c&#252;lerinin kapsamı dışındadır, ya da ODBC s&#252;r&#252;c&#252;leri eksik kurulmuştur. Bunu, Windows’un Denetim Masası’nda ODBC Y&#246;nieticisi’ni &#231;alıştırarak ve s&#252;r&#252;c&#252;ler sekmesini se&#231;erek denetleyebilirsiniz.
Bir diğer sık alınan hata t&#252;r&#252; ise 80004005’dir. Bu hatanın bir ka&#231; t&#252;r&#252; olabilir:
Microsoft OLE-DB Provider for ODBC Driver error ‘80004005’ [Microsoft][ODBC Microsoft Access 97 Driver] The Microsoft Jet database engine cannot open the file ‘(unknown)’..
Bu hata mesajına bir ka&#231; farklı durum sebep olabilir:
1. Internet kullanıcısına veritabanının işletim sistemi d&#252;zeyinde yazma-okuma yetkisi verilmemiş olabilir.
2. Veritabanının bulunduğu dizinin işletim sistemi a&#231;ısından dosya oluşturma ve silme yetkileri yoktur.
3. Veritabanının bulunduğu dizin bir ağ sabit diskinde ise Internet kullanıcısının bu diske erişim hakkı yoktur.
4. DSN oluşturulurken veritabanı salt okunur veya Exclusive olarak işaretlenmiş olabilir.
5. O anda dosyaya Server tarafında InterDev gibi bir Web Tasarım Programı erişiyor olabilir.
6. S&#246;zkonusu Access dosyası, bulunduğu ağda yerel kullanıcıların hizmetine a&#231;ık olabilir.
Bu sorunların &#231;&#246;z&#252;m&#252; i&#231;in ODBC yapılandırma işleminin dikkatle yeniden tekrarı ve &#246;zellikle sabit disk izinlerinin g&#246;zden ge&#231;irilmesi gerekir. Bu hata mesajını evsahibi firmanın bilgisayarından alıyorsanız; Web Server y&#246;netimine yeniden başvurmanız şarttır.
Microsoft OLE-DB Provider for ODBC Driver error ‘80004005’ [Microsoft][ODBC Microsoft Access 97 Driver] Couldn’t use the file ‘(unknown)’; the file already in use
Bu hata mesajının tek sebebi veritabanı dosyasının birden fazla kullanıcı tarafından kullanılmasını &#246;nleyen kilit deyimlerinin kullanılmış olmasıdır. &#199;&#246;z&#252;m&#252;, dosya ile ilgili .Recordset deyiminin kilidi &#246;nleyecek şekilde yazılmasından ibarettir.
Microsoft OLE-DB Provider for ODBC Driver error ‘80004005’ [Microsoft][ODBC Microsoft Access 97 Driver] Data source name not found and no default driver specified
Veri tabanı ile veri-yolu bağlantısı kuracak Connection komutu, Global.asa dosyasından alınmak isteniyorsa ve IIS Global.asa dosyasını &#231;alıştıramıyorsa bu hata mesajıyla karşılaşırsınız. Global.asa dosyasında şu kodun bulunup bulunmadığını kontrol edin:
<%=”’auth_user’ ise & request.servervariables(“auth_user”)%>
<p>
<%=”’auth_type’ is & request.servervariables(“auth_type”)%>
<p>
<%=”connection string is & session(“baglanti_deyimi”%>
<p>
Burada “baglanti_deyimi ifadesi yerinde sizin Connection deyiminiz yer almalıdır. Global.asa’da bu ifadelerin bulunmasına rağmen yine de &#231;alışmıyorsa, Web Server programına, global.asa’nın i&#231;inde bulunduğu k&#246;k dizin i&#231;in &#231;alıştır (execute) izni verilmemiş olabilir. Bu kişisel Web Server’da veya yerel IIS’te oluyorsa, b&#252;t&#252;n yapacağınız şey k&#246;k dizin olan klas&#246;r&#252; sağ tıklayarak izinlerini değiştirmektir. Bu hata evsahibi firmanın sitesinde oluyorsa, Web Sitesi y&#246;netimi ile temasa ge&#231;meniz gerekir.
Microsoft OLE-DB Provider for ODBC Driver error ‘80004005’ [Microsoft][ODBC Microsoft Access 97 Driver] Data source name not ??
Web Server’ın bulunduğu bilgisayarda MDAC (Microsoft Data Access Component) dosyaları ya bozulmuş ya da yanlış kurup kaldırma y&#252;z&#252;nden bazı bileşenleri arasında s&#252;r&#252;m farkı doğmuş demektir. MDAC’ın g&#252;ncellenmesi &#231;&#246;z&#252;m sağlayabilir.
Microsoft OLE-DB Provider for ODBC Driver error ‘80004005’ [Microsoft][ODBC Microsoft Access ODBC driver Driver] General error Unable to open registry key...
Registry Editor ile burada adı verilen kayıt anahtarı (Key) i&#231;in verilen izinlerikontrol etmelisiniz. Bunun i&#231;in Regedt32.exe programını kullanabilirsiniz.
Microsoft OLE-DB Provider for ODBC Driver error ‘80004005’ [Microsoft][ODBC SQL Server Driver] [dbnmpntw] ConnectionOpen (CreateFile()).
Aynı bilgisayarda bile olsa SQL Server izinleri yeterli değilse, ODBC s&#252;r&#252;c&#252;leri veritabaına ulaşamazlar. Sorunu &#231;&#246;zmek i&#231;in SQL Server y&#246;netimiyle g&#246;r&#252;şmek ve izinleri değiştirmek gerekir.
Bu ve diğer 80004005 hata mesajları i&#231;in Microsoft’un sitesinde Q189408, Q174943, Q173742, ve Q175671 numaralı bilgi notlarına (Knowledgebase articles) başvurabilirsiniz.
ASP Hatası Arama
ASP teknolojisi, Internet’in kendisine g&#246;re nisbeten eski HTTP protokol&#252; ile işbirliği yapmak zorundadır ve bazen ASP sayfalarımızda oluşan hatalar, bizden (yazdığımız VBScript veya diğer Script kodlarından) değil, bu iki teknolojinin Server’daki uyumsuzluğundan kaynaklanıyor olabilir.
ASP teknolojisi &#252;&#231; adımda &#231;alışır:
1. Ziyaret&#231;i bir ASP sayfası talep eder
2. Server talep edilen belgenin bir ASP programı olduğunu belirler ve bunu ziyaret&#231;iye g&#246;ndermeden &#246;nce ASP.DLL aracılığıyla &#231;alıştırır.
3. Ortaya &#231;ıkacak olan HTML belgesi ziyaret&#231;iye g&#246;nderilir.
Bu bakımdan ASP hatasını ararken sorulacak birinci soru hatanın nerede olduğu olmalıdır. Hata istemci tarafında ise ASP sayfamız muhtemelen ziyaret&#231;inin Browser’ı ile uyumlu olmayan HTML kodu &#252;retiyor olabilir. Ayrıca hatanın hangi aşamada olduğunu yakalamamız gerekir.
Sık alacağımız bir ASP hatası, Server’ın vereceği “VBS Script Error:” şeklinde başlayan mesajlar olacaktır. Bu, ger&#231;ekten de sayfamızdaki VBScript kodlarında hata olduğunu g&#246;sterir. Yapılacak tek şey, iyi bir programcı gibi, biraz a&#231;ık havada gezdikten sonra kodu baştan sonra yeniden g&#246;zden ge&#231;irmek veya en iyisi başka bir programcının yardımını istemektir. Bir s&#252;re sonra insan kendi yazdığı kodlardaki hataları g&#246;remez hale gelir!
Nesne oluşturma hataları ise “Failed to create ...” diye başlar ve hemen hemen daima ASP sayfanızdaki Server.CreateObject.. diye başlayan deyimin icra edilemediğini g&#246;sterir. Bu sizin yanlış nesneye yanlış metod kullandırmaya kalkmanızdan olabileceği gibi, Web Server’ın size bazı bileşen dosyalarına (.dll ve .exe) erişim hakkı vermiyor olmasından kaynaklanabilir. &#220;cretsiz ASP desteği veren sitelerde &#231;oğu zaman bu t&#252;r komutlar i&#231;eren Script’lere izin verilmez.

 
Alıntı ile Cevapla

IRCForumlari.NET Reklamlar
sohbet odaları eglen sohbet reklamver