SQL Injection"Dan Korunma
-
Gelen verilerdeki zararlı kodları temizleyerek SQL Injection'dan korunma
- <%
- Function Temizle(strVeri)
- '|======================================
- '| SQL Injection'dan Korunma Fonksiyonu
- '| mydesign a.k.a doronty37
- '| http://www.mydesign.gen.tr
- '| mydesign@mydesign.gen.tr
- '|======================================
- '// Eğer Değişken Boşsa Fonksiyondan Çıkılıyor
- If strVeri = "" Then Exit Function
- '// Zararlı Kodlar Burada Ayıklanıyor
- strVeri = Replace(strVeri, "<", "<")
- strVeri = Replace(strVeri, ">", ">")
- strVeri = Replace(strVeri, "[", "[")
- strVeri = Replace(strVeri, "]", "]")
- strVeri = Replace(strVeri, """", "", 1, -1, 1)
- strVeri = Replace(strVeri, "=", "=", 1, -1, 1)
- strVeri = Replace(strVeri, "'", "''", 1, -1, 1)
- strVeri = Replace(strVeri, "select", "select", 1, -1, 1)
- strVeri = Replace(strVeri, "join", "join", 1, -1, 1)
- strVeri = Replace(strVeri, "union", "union", 1, -1, 1)
- strVeri = Replace(strVeri, "where", "where", 1, -1, 1)
- strVeri = Replace(strVeri, "insert", "insert", 1, -1, 1)
- strVeri = Replace(strVeri, "delete", "delete", 1, -1, 1)
- strVeri = Replace(strVeri, "update", "update", 1, -1, 1)
- strVeri = Replace(strVeri, "like", "like", 1, -1, 1)
- strVeri = Replace(strVeri, "drop", "drop", 1, -1, 1)
- strVeri = Replace(strVeri, "create", "create", 1, -1, 1)
- strVeri = Replace(strVeri, "modify", "modify", 1, -1, 1)
- strVeri = Replace(strVeri, "rename", "rename", 1, -1, 1)
- strVeri = Replace(strVeri, "alter", "alter", 1, -1, 1)
- strVeri = Replace(strVeri, "cast", "cast", 1, -1, 1)
- Temizle = strVeri
- End Function
- %>
- Kullanımı:
- <% strParola = Temizle(Trim(Request.Form("parola"))) %>
-
nre yani bu kadar kısa kodu yazıoz attack lardan korunuyoruz öylemi ?
-
-------------------------------------------------------------------------------------------------
#
Konu : Xss ve SQL Injection Ataklarından Korunma
Tarih : 22/04/2007
Saat : 03:34
Yazar : Ibrahim BALIÇ
#
-------------------------------------------------------------------------------------------------
İçerik :
1.Giriş
2.Xss ve Sql'e Bakış
3.Korunma
4.Çıkış
=================================================================================================
[1.Giriş]
'''''''''
-------------------------------------------------------------------------------------------------
Sql Injection Ve Xss Ataklarını Bir Önceki Derslerimizde Anlatmıştım...Şimdiki Konuda Bun
lardan Nasıl Korunacağımıza Göz Atacağız. Bu Konuyu Okumadan Önce
Sql Injection Nedir?
Xss Nedir?
Konularını Okumanızı, Örnekleri Incelemenizi Mutlak Tavsiye Ederim. Girişi Fazla Uzatmadan Şimdi
Konumuza Dönelim...
[2.Xss Ve Sql'e Bakış]
-------------------------------------------------------------------------------------------------
Her Iki Atak Türününde Uygulanması, Dışarıdan Eklenen Kodlar Ile Olduğunu Önceki Konuları
mızda Belirttik.Ve Uygulamalı Olarak Inceledik. Şimdi Buradan Yola Cikarak Nasil Korunacağımıza
Bakacağız.
SQL Injection İçin : ' Karakteri.
Xss Icın : < ; : ( ) Karakterleri.
Bu Karakterler Sql'de ve html'de İşlevi Olan Karakterlerdir. Biz Bu Atak Türlerine Engel Olabilm
ek İçin Bu Karakterleri Tüm Gelen Veriler İçerisinde Kontrol Etmeliyiz. Ve Daha Sonra Script İçe
risinde Kullanmalıyız.
Bu Karakterleri Gelen Datalar İçerisinde Var Olup Olmadiklarini Kontrol Edip , Daha Sonraa İşlem
Yaptırırsak Korunmuş Oluruz.
[3.Korunma]
-------------------------------------------------------------------------------------------------
Genel Olarak Asp ve Php Dillerinden Yola Cikarak Bu Atakları Blocklama Yollarını Acıklaya
cağım.Burada Ek Olarak "Tsm Atak Block" Modulunude Örnekle Tanımış Olup,Kullanımı Hakkında Bilgi
sahibi Olacaksınız...
Genel Bir Asp Dosyası İçerinde Yapılacak Kontrol.
Burada Tümünde:
adi, soyadi Değişkenlerinin olduğunu varsayiyorum.
Asp:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
=================================================================================================
<%
adi = Request.QueryString("adi")
soyadi = Request.QueryString("soyadi")
adi = replace(adi,"'","")
adi = replace(adi,"(","")
adi = replace(adi,")","")
adi = replace(adi,";","")
adi = replace(adi,":","")
adi = replace(adi,"<","")
soyadi = replace(soyadi,"'","")
soyadi = replace(soyadi,"(","")
soyadi = replace(soyadi,")","")
soyadi = replace(soyadi,";","")
soyadi = replace(soyadi,":","")
soyadi = replace(soyadi,"<","")
reponse.write adi & "<br>" & soyadi
?>
=================================================================================================
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Şeklindeki Bir Asp Dosyasına, Adi Olarak Yollanacak Değer Alttaki Gibi Olursa:
test.asp?adi=ibrahim<script>alert('test');</script>
Çıktısı Şu Şekli Alacaktır.
--------------------------------
ibrahimscript>alerttest/script>
---------------------------------
yani Burada Yaptiğimiz replace(değiştirme) İşleminde Görmüş Olduğunuz Gibi ',<,;,:,(,) Karakterl
erini boş olarak değiştirdi.Eğer Böyle Bir İşlem Yapmiş Olmasaydik ( değiştirme ) Çıktı Şu Şekil
de Olacaktı.
--------------------------------
ibrahim<script>alert('test');</script>
---------------------------------
Buda Script Tarafından script tagindan Yorumlanarak, Size Uyarı Mesaji Verecekti. Yani Burada Uy
arı Yerine, Xss ve Sniffer Derslerimizde Gördüğümüz Gibi Dilediğimiz Scripti Caliştirmak Müm kün
Olurdu...
Şimdi Php İle BUnları Nasil Yapacağımıza Bakalım...
PHP
#################################################################################################
=================================================================================================
<?PHP
$adi = $_GET["adi"];
$soyadi = $_GET["soyadi"];
$adi = str_replace("'","",$adi);
$adi = str_replace("(","",$adi);
$adi = str_replace(")","",$adi);
$adi = str_replace(";","",$adi);
$adi = str_replace(":","",$adi);
$adi = str_replace("<","",$adi);
$soyadi = str_replace("'","",$soyadi);
$soyadi = str_replace("(","",$soyadi);
$soyadi = str_replace(")","",$soyadi);
$soyadi = str_replace(";","",$soyadi);
$soyadi = str_replace(":","",$soyadi);
$soyadi = str_replace("<","",$soyadi);
echo $adi."<br>".$soyadi;
?>
=================================================================================================
#################################################################################################
Şeklindeki Bir PHP Dosyasına, Adi Olarak Yollanacak Değer Alttaki Gibi Olursa:
test.php?adi=ibrahim<script>alert('test');</script>
Çıktısı Şu Şekli Alacaktır.
--------------------------------
ibrahimscript>alerttest/script>
---------------------------------
yani Burada Yaptiğimiz str_replace(string değiştirme) İşleminde Görmüş Olduğunuz Gibi ',<,;,:,(,)
Karakterlerini boş olarak değiştirdi.Eğer Böyle Bir İşlem Yapmiş Olmasaydik ( değiştirme ) Çıktı
Şu Şekilde Olacaktı.
--------------------------------
ibrahim<script>alert('test');</script>
---------------------------------
Buda Script Tarafından script tagindan Yorumlanarak, Size Uyarı Mesaji Verecekti. Yani Burada Uy
arı Yerine , Xss ve Sniffer Derslerimizde Gördüğümüz Gibi Dilediğimiz Scripti Caliştirmak Mümkün
Olurdu...
Şimdi Php Dosyalarımız İçin Ek Olarak Bir Bilgi Vermek Gerekirse, Sunucu Üzerindeki Konfürigrasy
onda php.ini içerisinde
magic_quotes_sybase = On
ve
magic_quotes_runtime = on
Şeklinde Ise, ' Karakteri Zaten Etkisiz Kalacaktır. Php "\" Kapaniş Karakteri Her ' Karakterini
Kendisiyle Birlikte Replace Edecektir. Fakat Bu Xss İçin Bi Engel Değildir.Ve Genel Anlamda Ser
ver Sahibi Bazı Scriptlerin Hatasız Calişması İçin Acmış Olabilir.
Biz Her İhtimale Karşılık Olarak Bu Kontrolleri Yaptirmalıyız.Bu Her Değişken İçin Çok Uzun Sür
ebilir. veya Çok Kod Demektir.Biz Sizler İçin Bir Modul Hazırladık, Bunu Kullanmış Olduğunuz Se
rver'a register Ettirip Ücretsiz Olarak Kullanabilirsiniz.
Register Edilmiş Server Üzerinde "TSM Atak Block" Nasıl Kullanılır Şimdi Buna Göz Atalım...
ASP
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
=================================================================================================
<%
adi = Request.QueryString("adi")
soyadi = Request.QueryString("soyadi")
set Kontrol = CreateObject("TsmAtak.Block")
reponse.write Kontrol.GelenKontrol(adi) & "<br>" & Kontrol.GelenKontrol(soyadi)
%>
=================================================================================================
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Modulumuzu Script İçinde Tanimlayip, Tüm İcerideki Değişkenleri Modul İçinde Filtre Ederek
Tüm Gelen Verileri Kontrol Ettirebilirsiniz.Bu Hem Az Kod Hemde Daha İyi Bir Güvenlik Demektir.
Yukarıdaki İlk Örneğimizdeki Kod Satır Sayısı İle Modul Filtredeki Kod Satır Sayısı Arasındaki Fa
rkı Görmüş Olmalısını...
Şimdi birde Php İçin Örneğimize Bakalım.
#################################################################################################
=================================================================================================
<?php
$adi = $_GET["adi"];
$soyadi = $_GET["soyadi"];
$kontrol = new COM("TSMAtak.Block");
echo $kontrol->GelenKontrol($adi)."<br>".$kontrol->GelenKontrol($soyadi);
?>
=================================================================================================
#################################################################################################
=================================================================================================
######## BİTİŞ ########
Konu Hakkindaki Örnekler ve Modul Alttaki Adrese Göz Atabilirsiniz:
http://www.turksecuritymaster.com/security/Turkish/dersler/uygulamalar/genel/SqliveXssKorunmaYollari
-------------------------------------------------------------------------------------------------
Bu Ders Ibrahim BALIÇ Tarafından www.turksecuritymaster.com Kullanıcıları İçin Yazılmıştır.
Gerekli Modul TSM Güvenlik Programlama Grubu Tarafından Geliştirilmiştir.
========================
Ibrahim BALIÇ
TSM Security Programmer.
======================== -
Attacklardan korumuyor aslında.
sadece işaretleri değiştiriyor. Boylece injection yapılamıyor.
-
ArmadA bunu yazdı:
-----------------------------
nre yani bu kadar kısa kodu yazıoz attack lardan korunuyoruz öylemi ?
-----------------------------
En azından yeni türüyen lamerlerden En gellenmiş olur.. ))) -
tmm hacı anladım bende dün şu yukarıdaki uzun yazıyı bi yerde görmüştüm aldıydım lazım olur die sen konu açmışın madem bende yapıştırıverdim :D
-
Kaynak site arkadaşlar kodlarda belki eksiklik ola bilir..
-
Yuh be abi php ile bu kadar kasmanın ne alemi var :D
<?php
$degisken = htmlspecialchars($degisken); // Html taglarını dönüştürür...
$degisken = addslashes($degisken); // özel karakterlere slash ekler.
?>
Aha bu kadar :D
-
2. yöntemle sadece tagları sildirmiş
bi encode yaptın mı yine yalama olcak?
kaldı ki
1. yöntemde de sanki öyleymiş gibi algıladım
mallık bende olabilir bok atmiim :))
-
aslında bizdede var öle kısa bir kod
<%Server.HtmlEncode("<script>")%> , <%Server.UrlEncode("<script>")%> gibi
ArmadA
yazı için saol okumakta fayda var -
amele_2 bunu yazdı:
-----------------------------2. yöntemle sadece tagları sildirmiş
bi encode yaptın mı yine yalama olcak?
kaldı ki
1. yöntemde de sanki öyleymiş gibi algıladım
mallık bende olabilir bok atmiim :))
-----------------------------senin düşündüğünü düşünen adam zaten bununla pek uğraşmaz hacı:D
