Asp'de Güvenlik !! - R10.net
  • 28-09-2006, 07:59:15
    #1
    Aspde Güvenlik

    Flood DDOS Koruması
    Oncelikle Sayfanıza Ddos saldırısı yapanlardan yada sayfanızı durmadan yenıyenlerden kurtulmak için yapılmış ufak olsada bir önlem..

    Öncelikle
    If CInt(SESSION("koru" ))> 10 Then 'Ö10 yazan kısmı kendinzie göre değiştirebilirsiniz. Bu 10 Sayfanızın yenilenme oranıdır .. yani kişi saldırı ve sayfa yenileme sayısını secersiniz..
    suanki haliyle 10 defa saldırı yada refresh yapılırsa kişi siteden ban'lanır.

    Session.TimeOut=1
    1 yazan yer ise saldırı yapan kişinin siteden kaç dk uzaklastırılması gerektiğini belirler.. ve dakika bazındadır (Şuanda 1 dk)

    ve diğer kalan kısımlarıda kendinize göre ayarlayabilirsiniz
    Alıntı
    <%

    If SESSION("koru" )="" Then '
    SESSION("koru" )=0
    Else
    SESSION("koru" )= SESSION("koru" ) + 1
    End If

    If CInt(SESSION("koru" ))> 10 Then '
    Session.TimeOut=1
    Response.Write("<title> Flood Korumasi </title>")
    RESPONSE.Write("<center><b>Flood Korumasi Devrede !</b><br>")
    Response.Write("<b>Kisa Bir Süreligine Siteden Uzaklastirldiniz.</b>")
    Response.Write("<br><br>Nedenleri Sunlar olabilir <br><br>1. Siteye ddos Saldirsi yapmaniz <br>2.Siteyi Belirli zaman içerisinde Durmadan yenilemeniz<br>3.Siteye her hangi bi saldirida bulunmaniz.</center>")
    RESPONSE.End
    End If
    %>
    -------------

    SQL INJECTON'DAN KORUNMA

    Bir sitede bulunun ve önemli olan açıklardan birisidir..
    mesela anasayfamız default.asp olsun ve anasayfamzıdan bi sayfa cagırdıgımızı war sayalım.. bu sayfamızda gel.asp?id=457 olsun .. yapmanız geren sey cagırdıgımız sayfaya kodları eklemek yada sizin REQUEST.QUERYSTRING kodunuzla yer değiştirmeniz gerekmektedir.


    PHP- Kodu:
    <%
    ID REQUEST.QUERYSTRING("ID" )
    IF 
    Not IsNumeric(REQUEST.QUERYSTRING("ID" ) ) THEN
    response
    .write "<center>Girdiğiniz ID geçersizdir<br>Geçerli bir ID numarası girin</center>"
    response.end
    END 
    IF
    %> 
    -------------

    Uye Girişlerinde 'or' açığını kapama

    öncelikle bu kısmı sayfnın en üstüne ekleyebilir yada include edebilirsin
    PHP- Kodu:
     <% 
    function 
    guvenlik(genel 
    genel Replace (genel ,"<","",1,-1,
    genel Replace (genel ,"=","",1,-1,)
    genel Replace (genel ,"$","",1,-1,)
    genel Replace (genel ,">","",1,-1,
    genel Replace (genel ,"%","",1,-1,
    genel Replace (genel ,"'","",1,-1,
    guvenlik=genel
    end 
    function 
    %> 
    daha sonra uyelerin giriş yaptıgın kısımda yani k.adı ve şifreleri request ile çağırdıgın formlara eklemen gereken kodlar aşagıdakilerdir.. bunu eklemenin sebebi zararlı kodları temizlemektir.

    PHP- Kodu:
    <% 
    kadi guvenlik(Request.Form("kadi" ) ) 
    sifre guvenlik(Request.Form("sifre" ) ) 
    %> 
    Şimdilik Aklımda olanlar bunlar neyse Aklıma Geldikce Eklerim ..
    zaman zaman az kaldı zaman ..
  • 10-10-2006, 21:30:38
    #2
    rainmaks adlı üyeden alıntı
    Aspde Güvenlik
    Flood DDOS Koruması
    Oncelikle Sayfanıza Ddos saldırısı yapanlardan yada sayfanızı durmadan yenıyenlerden kurtulmak için yapılmış ufak olsada bir önlem..
    Öncelikle
    If CInt(SESSION("koru" ))> 10 Then '
    Ö10 yazan kısmı kendinzie göre değiştirebilirsiniz. Bu 10 Sayfanızın yenilenme oranıdır .. yani kişi saldırı ve sayfa yenileme sayısını secersiniz..
    suanki haliyle 10 defa saldırı yada refresh yapılırsa kişi siteden ban'lanır.
    Session.TimeOut=1
    1 yazan yer ise saldırı yapan kişinin siteden kaç dk uzaklastırılması gerektiğini belirler.. ve dakika bazındadır (Şuanda 1 dk)
    ve diğer kalan kısımlarıda kendinize göre ayarlayabilirsiniz
    -------------

    SQL INJECTON'DAN KORUNMA
    Bir sitede bulunun ve önemli olan açıklardan birisidir..
    mesela anasayfamız default.asp olsun ve anasayfamzıdan bi sayfa cagırdıgımızı war sayalım.. bu sayfamızda gel.asp?id=457 olsun .. yapmanız geren sey cagırdıgımız sayfaya kodları eklemek yada sizin REQUEST.QUERYSTRING kodunuzla yer değiştirmeniz gerekmektedir.
    PHP- Kodu:
    <%
    ID REQUEST.QUERYSTRING("ID" )
    IF 
    Not IsNumeric(REQUEST.QUERYSTRING("ID" ) ) THEN
    response
    .write "<center>Girdiğiniz ID geçersizdir<br>Geçerli bir ID numarası girin</center>"
    response.end
    END 
    IF
    %> 
    -------------
    Uye Girişlerinde 'or' açığını kapama
    öncelikle bu kısmı sayfnın en üstüne ekleyebilir yada include edebilirsin
    PHP- Kodu:
     <% 
    function 
    guvenlik(genel 
    genel Replace (genel ,"<","",1,-1,
    genel Replace (genel ,"=","",1,-1,)
    genel Replace (genel ,"$","",1,-1,)
    genel Replace (genel ,">","",1,-1,
    genel Replace (genel ,"%","",1,-1,
    genel Replace (genel ,"'","",1,-1,
    guvenlik=genel
    end 
    function 
    %> 
    daha sonra uyelerin giriş yaptıgın kısımda yani k.adı ve şifreleri request ile çağırdıgın formlara eklemen gereken kodlar aşagıdakilerdir.. bunu eklemenin sebebi zararlı kodları temizlemektir.
    PHP- Kodu:
    <% 
    kadi guvenlik(Request.Form("kadi" ) ) 
    sifre guvenlik(Request.Form("sifre" ) ) 
    %> 
    Şimdilik Aklımda olanlar bunlar neyse Aklıma Geldikce Eklerim ..
    çok sağol rainmaks
  • 19-12-2006, 20:00:52
    #4
    Hazır asp scriptleri kullanıyorsanız mutlaka database ismini ve yolunu degistirin bu cok büyük bir açık yaratıyor.
  • 27-12-2006, 16:38:41
    #5
    IsNumeric(REQUEST.QUERYSTRING("ID" ) )

    Bu yeterli değil.
    Burada da zararlı kodların ayıklanarak komut gönderilmesi de engellenmelidir.
  • 27-12-2006, 18:50:12
    #6
    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.
    4harf .COM domainleriniz alınır
  • 27-12-2006, 20:55:00
    #7
    saol maniakcoder Zaten bnm verdiğim Koruma şeklinin replace yapılarak banlanması sağlıyor mantıklı .. ben basit olarak yazdım geliştirilebilir die .. bugun elimdkei diğer güvenlik dokumanlarinida yayınlarım artık .. tekrar saol
    zaman zaman az kaldı zaman ..
  • 23-01-2007, 20:14:23
    #8
    yakında bende güzel bir kendi scriptlerimden bir kaç örnek sunacagım.Şu aralar baya yogunum.Paylaşımın için sağol
  • 10-04-2007, 18:14:13
    #9
    aspye başlıyancar için guzel bir calışma kardeş