aşağıdakileri dökümanlarım arasında buldum benim değildir sdadece paylaşayım dedim

-------------------------------
----------------------------
-------------------------------
----------------------------
-------------------------------




Bu yazımda ASP de güvenlik önlemlerini anlatacam.

SQL Enjection Koruma

ASP kodlarında en çok tehlikeye neden olan ve SQL INJECTION olarak tabir edilen güvenlik sorununu aşağıda vermiş olduğum örnek kod yardımıyla çok basit bir şekilde çözebilirsiniz.

Örnek olarak link.asp adlı bir sayfanızın olduğunu düşünelim. Link.asp sayfasının içinden Link_Guncelle.asp?ID=1 şeklinde bir gidiş olsun.Eğer siz aşağıdaki kodu link_guncelle.asp'deki request.querystring kısmınıza koymazsanız. Kötü niyetli kişiler ' karakteri ile SQL cümlenizi istedikleri yönde kullanabilirler.

Sizin koymuş olduğunuz kod şu şekilde ise; ID = REQUEST.QUERYSTRING("ID") bu kodu aşağıda verdiğim şekilde değiştirin:

Kod Alanı:


ID = REQUEST.QUERYSTRING("ID")
IF Not IsNumeric(REQUEST.QUERYSTRING("ID")) THEN
response.write "Lütfen Geçerli bir ID numarası girin."
response.end
END IF





veya ID = REQUEST.QUERYSTRING("ID") uygulanan ',<,> gibi zararlı karakterleri koruyup güvenli bir sistem de yapabilirisiniz.(Bu yöntem daha güvenlidir)Aşağıda yeşil renkte verdiğim kodları sayfanın en başına ekleyin ve Ban.asp diye IP banlayan bir sayfa oluşturun.

Kod Alanı:


<%
'////////////////////
'// Ayıkla
'////////////////////
function suz(veri)
veri = Replace (veri ,"'","[BAN]",1,-1,1)
veri = Replace (veri ,"=","[BAN]",1,-1,1)
veri = Replace (veri ,"&","[BAN]",1,-1,1)
veri = Replace (veri ,"%","[BAN]",1,-1,1)
veri = Replace (veri ,"!","[BAN]",1,-1,1)
veri = Replace (veri ,"#","[BAN]",1,-1,1)
veri = Replace (veri ,"<","[BAN]",1,-1,1)
veri = Replace (veri ,">","[BAN]",1,-1,1)
veri = Replace (veri ,"*","[BAN]",1,-1,1)
veri = Replace (veri ,"/","[BAN]",1,-1,1)
veri = Replace (veri ,"\","[BAN]",1,-1,1)
veri = Replace (veri ,"And","[BAN]",1,-1,1)
veri = Replace (veri ,"'","[BAN]",1,-1,1)
veri = Replace (veri ,"Chr(34)","[BAN]",1,-1,1)
veri = Replace (veri ,"Chr(39)","[BAN]",1,-1,1)
IF InStr(1,veri,"[BAN]",1) Then
Response.Redirect "Ban.asp"
End IF
suz=veri
end function
%>





Sizin koymuş olduğunuz kod şu şekilde ise; ID = REQUEST.QUERYSTRING("ID") bu kodu aşağıda verdiğim şekilde değiştirin:

Kod Alanı:


ID = suz(REQUEST.QUERYSTRING("ID"))





Burda saldırgan Link_Guncelle.asp?ID=1'update gibi bir kod yazarsa sistem bunu boş değere çevirecek,ve [BAN] değeri okutacaktır.Eğer satırda
[BAN] değeri varsa sistem otomatik olarak Ban.asp sayfasına yönlenecektir.Burda da IP banlanacaktır.Saldırgan istediğini yapamamış ve zor duruma düşecektir.

Proxy İle Giriş Yasaklama

Saldırganlar IP leri banlansa bile proxy kullanarak sitelere girebilirler ve saldırılarını süldürebilirler.Fakat siz proxy girişini yasaklarsanız saldırgan proxy ile sisteme giriş yapamaz.Aşağıda verdiğim kodu sayfanın başına yapıştırın.

Kod Alanı:


<%
orjip = Request.serverVariables("REMOTE_ADDR")
proxip = Request.ServerVariables("HTTP_VIA")

IF Not orjip = proxip Then
response.redirect "ban.asp"
Response.END
END IF
%>





Burada saldırgan proxy kullanırsa sistem onu anlayacak ve daha önceden oluşturmuş olduğunuz ban.asp sayfasına yönlendirecek.ban.asp sayfasında da saldırganın IP adresi banlanacak.Bu durumda saldırgan yavaş yavaş pes etmeye başlayacaktır.

Bot Koruma

Bot koruma; DDOS,Flood,Nuke programlarından sisteme girişi engelleyen kodlardır.Bu sistem tamamen benim tarafımdan yazılmıştır.Sistemin çalışma mantığı, siteye bağlanan programların agent değerlerini alır ve kendi listesindekilerle karşılaştırır.Eğer değerler uyuşuyorsa ban.asp sayfasına yönlenir ve IP banlanır.Kodu sayfanın başına yapıştırın.

Kod Alanı:


<%

'Coded By VolTigoRe SeCuRiTY SySTeM

Dim suz(21)
'// PROGRAMLAR
suz(0) = "Wget"
suz(1) = "EmailSiphon"
suz(2) = "WebZip"
suz(3) = "MSProxy/2.0"
suz(4) = "EmailWolf"
suz(5) = "webbandit"
suz(6) = "MS FrontPage"
'//DENYO LAUNCH KORUMA SATIRLARI
suz(7) = "Nightmare"
suz(8) = "Denyo"
suz(9) = "HolyOne"
suz(10) = "Tahribat"
suz(11) = "Launch"
suz(12) = "Denyo Launch"
'//ANTIRUS,DDOS,SYNDOS,NUKE KORUMA SATIRLARI
suz(13) = "Antirus"
suz(14) = "AventGrup"
suz(15) = "Robot"
suz(16) = "DDos"
suz(17) = "Flood"
suz(18) = "SYNDos"
suz(19) = "VTJBomber"
suz(20) = "Vai-Te Ja"
suz(21) = "Packet Storm"



' Degiskenleri bildir
Dim user_agent, host, document, referrer, cezaver



' Kullanicinin bilgilerini getir
user_agent = Request.ServerVariables("HTTP_USER_AGENT")
host = Request.ServerVariables("REMOTE_ADDR")
document = Request.ServerVariables("SERVER_NAME")
referrer = Request.ServerVariables("HTTP_REFERER")



' Kullanici bilgilerini kontrol et
cezaver = 0
If InStr(user_agent, suz(0)) > -1 Then cezaver = 1
If InStr(user_agent, suz(1)) > -1 Then cezaver = 1
If InStr(user_agent, suz(2)) > -1 Then cezaver = 1
If InStr(user_agent, suz(3)) > -1 Then cezaver = 1
If InStr(user_agent, suz(4)) > -1 Then cezaver = 1
If InStr(user_agent, suz(5)) > -1 Then cezaver = 1
If InStr(user_agent, suz(6)) > -1 Then cezaver = 1
If InStr(user_agent, suz(7)) > -1 Then cezaver = 1
If InStr(user_agent, suz(8)) > -1 Then cezaver = 1
If InStr(user_agent, suz(9)) > -1 Then cezaver = 1
If InStr(user_agent, suz(10)) > -1 Then cezaver = 1
If InStr(user_agent, suz(11)) > -1 Then cezaver = 1
If InStr(user_agent, suz(12)) > -1 Then cezaver = 1
If InStr(user_agent, suz(13)) > -1 Then cezaver = 1
If InStr(user_agent, suz(14)) > -1 Then cezaver = 1
If InStr(user_agent, suz(15)) > -1 Then cezaver = 1
If InStr(user_agent, suz(16)) > -1 Then cezaver = 1
If InStr(user_agent, suz(17)) > -1 Then cezaver = 1
If InStr(user_agent, suz(18)) > -1 Then cezaver = 1
If InStr(user_agent, suz(19)) > -1 Then cezaver = 1
If InStr(user_agent, suz(20)) > -1 Then cezaver = 1
If InStr(user_agent, suz(21)) > -1 Then cezaver = 1


If cezaver = 1 Then
' Sayfayi yönlendir...
Response.Redirect "ban.asp"

End If %>

-------------------------------
----------------------------
-------------------------------
----------------------------
-------------------------------


Eğer sitenizde yorum yapma veya herhangi birşey eklettirme, yaptırma gibi isler yapıyorsanız bunlar için bazı kontroller yapmak gerekir.

Mesela ziyaretçinin yorum'unda yazdığı html kod'unu pasif hale getirmeniz lazım.

form = TRIM(Server.HTMLEncode(request.form("form")))

Bu kodda TRIM ile formun basındaki ve sonundakı boslukları kaldırır."HTMLEncode" ise zararlı HTML kodlari ayıklar.

2. yol ise

Eger kullanıcı yorum yerine meta refresh kodu koyarsa sayfaniz belirli bir saniye de yönlendirme ile baska sayfaya gönderilir.Bunun benzeri ASP ile de yapilmaktadir.Response.redirect ile yapılabillir.Bunları önlemek içinde

<%
form = replace(form, "<", "& lt;")
form = replace(form, ">", "& qt;")
%>

Kodlarını kullanrak açma, kapama kodlarını pasif hale getirirsiniz.
Bunların dışında Replace komutumuzla argo kelimelere sansür koyabilirsiniz.

Not : Eger Html Encode ile ile formu alirsaniz türkçe karakterler gözükmeyecektir.Bu durumda form'u HTML Encode ile almaniz yeterli olacaktir.2. yol da olur.

Ben size ikinci yolu öneriyorum.Neden derseniz örnek vereyim.Mesela formdan aldiginiz "" smiley(gülücük)'i herhangi bir resimle replace ettirmek isterseniz 2. yolu kullanmalısınız.

Baska bir açıkta üyelik sistemleri gibi form ile giriş yapılan uygulamalarda ' OR ' kelimesinin giriş yapmasıdır.Eğer kullanıcı adını yazar ve şifreye bu yazılırsa ve tedbiri alınmamışsa o zaman kullanıcı şifreyi bilmeksizin o kullanıcıyla giriş yapabilir.Bu tehlikeyi önlemek içinde

<% form = replace(form, "'", "") %>

Böylece ' yazılması birşey idafe etmez.

Buna SQL INJECTıON da dahildir.

Siz bir querystring'i işlettiğiniz sayfada aldığınız querystring'i kontrol etmezseniz ve kişi '; drop table tablo gibi bir komut yazarsa SQL komutumuz olmadığı halde bu kodu işletir ve o tablo'nun içindeki verilerin tamamını uçurur.
Bunu gene üstteki replace ile engelleyebilirsiniz.

Tavsiyem eğer ID numarası olarak alıyorsanız şu kontrolden geçirmeniz gerekir.

<% IF NOT ISNumeric(form) THEN response.end %>

gibi bir kod kullanmanız yeterli olacaktır.Böylece ID numarası yerine yazı yazıldığı zaman işlemi durdurursunuz ve SQL Injection'ı engellemiş olursunuz.

Bunların hepsi için yazılan şu fonksyonu kullanabilirsiniz.Bu fonksiyon ile bütün Injection açıklarınıda kapatabilirsiniz.Böylece queystring'de bir probleminiz kalmaz.Bu fonksiyon'u sayfanızın en başına koyun.

<%
function security(data)
data = Replace (data ,"`","",1,-1,1)
data = Replace (data ,"=","",1,-1,1)
data = Replace (data ,"&","",1,-1,1)
data = Replace (data ,"%","",1,-1,1)
data = Replace (data ,"!","",1,-1,1)
data = Replace (data ,"#","",1,-1,1)
data = Replace (data ,"<","",1,-1,1)
data = Replace (data ,">","",1,-1,1)
data = Replace (data ,"*","",1,-1,1)
data = Replace (data ,"/","",1,-1,1)
data = Replace (data ,"\","",1,-1,1)
data = Replace (data ,"And","",1,-1,1)
data = Replace (data ,"'","",1,-1,1)
data = Replace (data ,"Chr(34)","",1,-1,1)
data = Replace (data ,"Chr(39)","",1,-1,1)
security=data
end function
%>

Fonksiyonumuz bu.
Querystring'leri alırkende

<% bilgi = security(request.querystring("bilgi")) %>

gibi alırsanız bu fonksiyonun kontrol'ünden geçirerek ve açıkları elemine ederek almış olursunuz.