Asp Link Güvenliği
-
http://www.bilmemne.com/dene/deneyebildiginkadar/template2.asp?a=05&b=03
şeklinde bir link ekliyorum veritabanına ve çekerken bunu link değişkenine aktarıyorum ve sonra buna link veriyorum
<a target="_blank" href=" <%=link %> ">bilmemne.com</a> şeklinde fakat bu güvenlik açığı oluştururmu sistemde acaba ? herhangi bir yolla ?a=05&b=03 değişkenler normal sayfaya zarar verebilirmi ? veya link kayıt ve listeme olayı bu şekildemi yapmam sağlıklıdır sağlıklı değilse nasıl bir yöntem önerirsiniz ? -
Sorun teşkil etmez. Ama şöyle birşey var, diyelimki a=1 ve b=1 iken yöneticinin birşeyini veriyorsa o zaman tehlikeye girer.
Aldığın adres satırı değişkenlerini filtrele.
-
yok o türden bir değişken almıyorum sayfaya.
-
Sorun olmaz. Değişkenlerle işlem yapmıyorsan birşey olmaz.
-
ontedi bunu yazdı:
-----------------------------
Sorun olmaz. Değişkenlerle işlem yapmıyorsan birşey olmaz.
-----------------------------
eyv sagolasın hocam ilgilendiğin için peki ben bunu direk serverurl encode ile yapsam daha güvenli olur sanırım değilmi _ -
en güzeli şudur
senaryo şu olsun sen url ile belli bir kişiyi bi sunucuya gondereceksin. kişinin numarası 3 olsun gonderileceği server numarasıda 5 olsun. Bu 3 ve 5 rakamının veritabanında karlıkıkları var. veritabanındaki kişi tablosunda 3 nolu kişi orhan olsun server tablosunda da5 nolu server 10.0.0.5 olsun.
gonder.asp?kisi=3&server=5
bu şekilde linki oluşturursan sql injection için kişi ve server parametresinin rakam olduğunu kontrol etmen lazım. adam yinede 3 ve 5 gelecek yere rastgele şeyler yazıp deneme yanılma yapabilir. Şindi bu sistemi nasıl koruruz.
1- oncelikle kıçımızdan yeterince uzun bir string uydurmamız lazım. Bu stringe uygulama anahtarı diyelim
2- uygulama anahtarı ile parametreleri bir hash algoritması ile birleştireceğiz. md5 olur sha olur size kalmış ben md5 olarak ornek vereyim.
uygulama anahtarı şu olsun 2604d71d318aa15d3a34dadd981be561
şimdi bizim urlyi şoyle vereceğiz.
gonder.asp?kisi=<%=kisi%>&server=<%=server%>&kontrol=<%=KontrolKoduOlustur(kisi,server)%>
KontrolKoduOlustur(kisi,server) fonksiyonu şunu yapsın
bizim anahtar+kisi+server parametrelerini uc uca eklesin sonra md5 ini alsın yani şoyle.
MD5[2604d71d318aa15d3a34dadd981be56135] = b11a3aed8584ac67d06883d97200c5d3
yeni urlmiz şu şekilde olmuş olacak gonder.asp?kisi=3&server=5&kontrol=b11a3aed8584ac67d06883d97200c5d3
gonder.asp sayfasında uygulama anahtarını kisi ve server parametrelerini bildiğimiz için bu kontrol kodunu tekrar oluşturur kontrol ederiz.
eğer adam url ile oynamış ise yani kisi ve server rakamlarını değiştirmiş ise kontrol kodu tutmayacağı için adamın url ile oynadığını tespit etmiş oluruz.
-
peki abi şöyle yapsam nasıl oluyor diyelimki linkin id si 10
linke_kaykil.asp?link=15 bunu gonder.asp ye yönlendirip
link=15 i alıp veritabanındaki 15. linki çekip linke_git değişkenine aktarıp direk response.redirect (linke_git) şeklinde yapsam daha kolay olmazmı ? bu sorun oluştururmu ? session vs. olmayacak linke_kaykil.asp sayfasında sadece yönlendirecek ve ben linke_git uzunluğunu vs sql enjeksiyonu vs. kontrol edeceğim.
-
buzul o kadar kasmana gerek yok
fonksiyonla kontrol et eğer sql injection içeriyorsa banlafonksiyon
Function obsecurity(id)
If Not isNumeric(id) Then
arrSqL = Array("Select", "DROP", ";", "--", "INSERT", "DELETE", "xp_", "UNION", "SHUT", "'")
arrEnd = Array("Select", "Drop", ";", "--", "Insert", "Delete", "xp_", "Union", "Shut&", "")
For iSQL = 0 to uBound(arrSqL)
iIlkLen = Len(id)
id = Replace(id, arrSqL(iSQL), arrEnd(iSQL),1,-1,1)
If iIlkLen - Len(id) > 0 Then
set ob_security = server.createobject("ADODB.Recordset")
obsql = "SELECT * FROM " & obtblfix & "Ban"
ob_security.open obsql,obdb, 1, 3
ob_security.AddNew
ob_security("ip") = Request.ServerVariables("REMOTE_ADDR")
ob_security("message") = "sql injection :/"
ob_security.update : ob_security.close()
Response.Redirect "/ban.asp"
End If
Next
End If
obsecurity = id
End Functionid=request.querystring("id")
id=obsecurity(id)kolay gelsin
