Zoque.Forum
Dirsek Teması:
Geri Dön Zoque.Forum » Webmaster Kaynaklari » Sunucu Tabanlı Programlama (Server Side) » Veritabanları » sql injection engellemek


Veritabanları MySQL , MSSQL, SQL, Access, Oracle

Yanıt
 
LinkBack Seçenekler
Old 06.01.2007   #1 (permalink)
 
Üyelik Tarihi: 05.01.2007
Yer: adana
Mesaj: 24
sql injection engellemek


merhaba herkese...

phpde geliştirmeye çalışıyorum kendimi ancak gün içinde sürekli kafama birşeyler takılıyor , bugün de kafama takılan şeyin bir isminin olduğunu ve hatta çok canlar yaktığını öğrendim. evet SQL injection i araştırdım biraz ancak üzerinde çalıştığım sistemimin siz de göreceksiniz ki SQL injectiona müsait olduğunu farkettim
ancak ne yaptıysam kendi sistemimi hack!leyemedim.
login olma kısmı şu şekilde...
Kod:
$tablo = "select * from uyeler where kuladi='$login' and sifre='$password'";
Şifre alanına abcd' or '1'='1 girerek denedim ancak sisteme giremedim. SQL injeciton olayına kendimce çözüm bulabilmem için kendim bu olayı kavramam lazım ama onu başaramadım.

SQL injeciton için stored procedure ve mysql_real_escape_string() den bahsediliyor ancak bunu login formuma nasıl uygulayacağım konusunda bir fikrim yok.

Fikir belirtirseniz sevinirim.
desired şu an çevrimdışı  
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Spurl'e kaydet! http://reddit.com/submit?url=%url%&title=%title%Wong'e kaydet!Yahoo'ya kaydet!Google'a kaydet!MSN'e kaydet!Facebook'e kaydet!
Mesajdan alıntı yaparak yeni bir cevap ekleyin
Old 06.01.2007   #2 (permalink)
 
Üyelik Tarihi: 05.01.2007
Yer: Istanbul
Mesaj: 9
Görsel: 4
Re: sql injection engellemek

merhaba, istemediğin karakterleri array içine atip, sonra da sitendeki tüm $_GET ve $_POST larin içinde bunlari kontrol ederek durdurabilirsin.

örnek teşkil etmesi için:
Kod:
$gelme = array ('select', 'insert', 'delete', 'update', 'drop table', 'union', 'null', 'SELECT', 'INSERT', 'DELETE', 'UPDATE', 'DROP TABLE', 'UNION', 'NULL');
	for ($i = 0; $i < sizeof ($_GET); ++$i)
	{
		for ($j = 0; $j < sizeof ($gelme); ++$j)
		{
			if (preg_match ('/' . $gelme[$j] . '/', $_GET[key ($_GET)]))
			{
				$temp = key ($_GET);
				$_GET[$temp] = '';
				exit("SAKINNNN !!!  ");
				continue;
			}
		}
__________________
Absolutely No Water!
www.minifolder.net
asilens şu an çevrimdışı  
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Spurl'e kaydet! http://reddit.com/submit?url=%url%&title=%title%Wong'e kaydet!Yahoo'ya kaydet!Google'a kaydet!MSN'e kaydet!Facebook'e kaydet!
Mesajdan alıntı yaparak yeni bir cevap ekleyin
Old 06.01.2007   #3 (permalink)
ba kubah
 
Mesaj: n/a
Re: sql injection engellemek

peki soyle yapsak olmaz mi,

foreach($_POST as $i=>$x)
{
if(!ereg_match('\w',$x))
die('sadece a-Z 0-9 ve _ karakterleri post edilebilir');
}
 
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Spurl'e kaydet! http://reddit.com/submit?url=%url%&title=%title%Wong'e kaydet!Yahoo'ya kaydet!Google'a kaydet!MSN'e kaydet!Facebook'e kaydet!
Mesajdan alıntı yaparak yeni bir cevap ekleyin
Old 06.01.2007   #4 (permalink)
 
Üyelik Tarihi: 05.01.2007
Yer: Istanbul
Mesaj: 9
Görsel: 4
Re: sql injection engellemek

Alıntı:
ba kubah tarafından gönderilen mesaj: Mesajı Görüntüle
peki soyle yapsak olmaz mi,

foreach($_POST as $i=>$x)
{
if(!ereg_match('\w',$x))
die('sadece a-Z 0-9 ve _ karakterleri post edilebilir');
}
olur ancak diyelim ki üyelik formun var ve ad soyad alanına türkçe karakter girmek isteyecek... türkçe karaktere de izin vermez böyle
__________________
Absolutely No Water!
www.minifolder.net
asilens şu an çevrimdışı  
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Spurl'e kaydet! http://reddit.com/submit?url=%url%&title=%title%Wong'e kaydet!Yahoo'ya kaydet!Google'a kaydet!MSN'e kaydet!Facebook'e kaydet!
Mesajdan alıntı yaparak yeni bir cevap ekleyin
Old 06.01.2007   #5 (permalink)
 
Üyelik Tarihi: 05.01.2007
Yer: adana
Mesaj: 24
Re: sql injection engellemek

asilens,
ancak bu şekilde şifresi selecto olan birisi giriş yapamıyor. böyle bir dezavantaj var.
gerçi şifre alanı md5 ile karşılaştırılarak yapılırsa sorun olmaz ancak textbox ın kullanıdığı çok alan var hepsi için de md5 karşılaştırması yapamayız sanırım.

Kafam takılan bir yer daha var. bazı sitelerde text alanı girilen kısımlara HTML kodu girildiği zaman okuma sırasında kodlar aynen yazıyor ancak çalışmıyor tabi ki..
strip_tags () komutu bildiğim kadarıyla HTML tagleri ortadan kaldırabiliyor. ancak benim istediğim şey hiç bir kodun (ne PHP ne de HTML) çalışmaması ama kabul etmesi , sadece benim ayarladığım bbcodeların işlevli olması..
inşallah açıklayıcı olmuşumdur.
desired şu an çevrimdışı  
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Spurl'e kaydet! http://reddit.com/submit?url=%url%&title=%title%Wong'e kaydet!Yahoo'ya kaydet!Google'a kaydet!MSN'e kaydet!Facebook'e kaydet!
Mesajdan alıntı yaparak yeni bir cevap ekleyin
Old 06.01.2007   #6 (permalink)
 
Üyelik Tarihi: 05.01.2007
Yer: Istanbul
Mesaj: 9
Görsel: 4
Re: sql injection engellemek

Alıntı:
desired tarafından gönderilen mesaj: Mesajı Görüntüle
asilens,
ancak bu şekilde şifresi selecto olan birisi giriş yapamıyor. böyle bir dezavantaj var.
gerçi şifre alanı md5 ile karşılaştırılarak yapılırsa sorun olmaz ancak textbox ın kullanıdığı çok alan var hepsi için de md5 karşılaştırması yapamayız sanırım.

Kafam takılan bir yer daha var. bazı sitelerde text alanı girilen kısımlara HTML kodu girildiği zaman okuma sırasında kodlar aynen yazıyor ancak çalışmıyor tabi ki..
strip_tags () komutu bildiğim kadarıyla HTML tagleri ortadan kaldırabiliyor. ancak benim istediğim şey hiç bir kodun (ne PHP ne de HTML) çalışmaması ama kabul etmesi , sadece benim ayarladığım bbcodeların işlevli olması..
inşallah açıklayıcı olmuşumdur.
evet sifresini select yada delete olarak verenler de cikabilecektir ancak onlari farkli bir sifre secmeye de yonlendirebilirsin.. yani md5 yapmadan da baktin suc isleyebilecek bir sey geldi, sagina veya soluna tek haneli bi deger verip sifrenizi bu sekilde kullanabilir yada baska bir sey secebilirsiniz gibi bir yonlendirme yapilabilir tabi bu yollar sacma ama guvenlik herseydir.. bu arada ben bir ara HTML taglari ('<' '>') [ ] seklinde replace ederdim.. fena durmazdi ekranda : )..
__________________
Absolutely No Water!
www.minifolder.net
asilens şu an çevrimdışı  
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Spurl'e kaydet! http://reddit.com/submit?url=%url%&title=%title%Wong'e kaydet!Yahoo'ya kaydet!Google'a kaydet!MSN'e kaydet!Facebook'e kaydet!
Mesajdan alıntı yaparak yeni bir cevap ekleyin
Old 07.01.2007   #7 (permalink)
 
s5prin's Avatar
 
Üyelik Tarihi: 16.12.2006
Yer: istanbul
Yaş: 26
Mesaj: 470
Re: sql injection engellemek

http://forum.zoque.net/sunucu-tabanl...sil-ulasirlar/
PHP fonksiyon kütüphanesi
__________________
imzaya sponsor
s5prin şu an çevrimdışı  
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Spurl'e kaydet! http://reddit.com/submit?url=%url%&title=%title%Wong'e kaydet!Yahoo'ya kaydet!Google'a kaydet!MSN'e kaydet!Facebook'e kaydet!
Mesajdan alıntı yaparak yeni bir cevap ekleyin
Old 08.01.2007   #8 (permalink)
rip
 
Üyelik Tarihi: 02.06.2001
Yer: Ankara
Yaş: 23
Mesaj: 60
Re: sql injection engellemek

Kod:
$gelme = array ('select', 'insert', 'delete', 'update', 'drop table', 'union', 'null', 'SELECT', 'INSERT', 'DELETE', 'UPDATE', 'DROP TABLE', 'UNION', 'NULL');
	for ($i = 0; $i < sizeof ($_GET); ++$i)
	{
		for ($j = 0; $j < sizeof ($gelme); ++$j)
		{
			if (preg_match ('/' . $gelme[$j] . '/', $_GET[key ($_GET)]))
			{
				$temp = key ($_GET);
				$_GET[$temp] = '';
				exit("SAKINNNN !!!  ");
				continue;
			}
		}
peki buna benzer birşey ASP'de nasıl olabilir?
__________________
..rip
//tribal
rip şu an çevrimdışı  
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Spurl'e kaydet! http://reddit.com/submit?url=%url%&title=%title%Wong'e kaydet!Yahoo'ya kaydet!Google'a kaydet!MSN'e kaydet!Facebook'e kaydet!
Mesajdan alıntı yaparak yeni bir cevap ekleyin
Old 08.01.2007   #9 (permalink)
 
Üyelik Tarihi: 07.01.2007
Yer: Adana
Yaş: 21
Mesaj: 103
Re: sql injection engellemek

Alıntı:
rip tarafından gönderilen mesaj: Mesajı Görüntüle
Kod:
$gelme = array ('select', 'insert', 'delete', 'update', 'drop table', 'union', 'null', 'SELECT', 'INSERT', 'DELETE', 'UPDATE', 'DROP TABLE', 'UNION', 'NULL');
	for ($i = 0; $i < sizeof ($_GET); ++$i)
	{
		for ($j = 0; $j < sizeof ($gelme); ++$j)
		{
			if (preg_match ('/' . $gelme[$j] . '/', $_GET[key ($_GET)]))
			{
				$temp = key ($_GET);
				$_GET[$temp] = '';
				exit("SAKINNNN !!!  ");
				continue;
			}
		}
peki buna benzer birşey ASP'de nasıl olabilir?
ASP de genellikle SQL Enjeksiyon yönetimini engellemek için post edilen verinin içerisi replace kodu ile kontrol edilir ve engellenmesi gereken zararlı karakterler engellenir. Örneğin;

Alıntı:
Teknoemin tarafından gönderilen mesaj:

<%
function temizle(gelen)
gelen = replace(gelen,"'","")
gelen = replace(gelen,"<","")
gelen = replace(gelen,">","")
gelen = replace(gelen,"+","")
gelen = replace(gelen,"&","")
gelen = replace(gelen,"%","")
gelen = replace(gelen,"=","")
temizle = gelen
end function
%>
<%
function temizle2(gelen)
gelen = replace(gelen,"'","")
gelen = replace(gelen,"<","")
gelen = replace(gelen,">","")
gelen = replace(gelen,"+","")
gelen = replace(gelen,"&","")
gelen = replace(gelen,"%","")
gelen = replace(gelen,"=","")
gelen = replace(gelen," ","")
temizle2 = gelen
end function
%>
<%
function temizle3(gelen)
gelen = replace(gelen,"'","")
gelen = replace(gelen,"<","")
gelen = replace(gelen,">","")
gelen = replace(gelen,"+","")
gelen = replace(gelen,"&","")
gelen = replace(gelen,"%","")
gelen = replace(gelen,"=","")
temizle3 = gelen
end function
%>
teknoemin şu an çevrimdışı  
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Spurl'e kaydet! http://reddit.com/submit?url=%url%&title=%title%Wong'e kaydet!Yahoo'ya kaydet!Google'a kaydet!MSN'e kaydet!Facebook'e kaydet!
Mesajdan alıntı yaparak yeni bir cevap ekleyin
Old 10.01.2007   #10 (permalink)
 
soul's Avatar
 
Üyelik Tarihi: 13.07.2000
Yer: LND
Mesaj: 4,279
Re: sql injection engellemek

Aslinda usttekilerin hicbiri cok iyi bir koruma degil.

Whitelisting yani girilebilecekleri kisitlama en mantikli hareket ancak ' genelde gecerli bir karakter bakiniz O'Reillt, O'Neil her ne kadar bu sekilde turk ismi olmasa da konu o degil. Mesela bir forum sistemi yaziyorsunuz (') karakterini silecekmisiniz ya da kabul mu edeceksiniz ?

Bu kod ise hic bir guvenlik saglamiyor,


Alıntı:
$gelme = array ('select', 'insert', 'delete', 'update', 'drop table', 'union', 'null', 'SELECT', 'INSERT', 'DELETE', 'UPDATE', 'DROP TABLE', 'UNION', 'NULL');
Ek olarak kisi kelimenin icerisinde NULL dediginde onu da kabul etmeyecegiz (tabii ki gene forum tarzi bir yazilim icin konusuyorum)

Diliniz PHP db" niz MySQL ise mysql_real_escape() eger ki ASP ya da herhangi bir dil ve SQL server kullaniyorsuaniz da ' karakterini '' yani iki tane tek tirnaklar replace edeceksiniz.

Ek olarak tabii ki kabul edilen karakterler ile girisi sinirlamak her zaman en iyi metod ama karakterleri sinirladikrtan sonra bile db ye gonderirken mysql_escape() gecirilmeli.

Klasik olarak tlanilan bir noktada eger integer bekliyorsaniz degeri kontrol edin ve sadece integersa kabul edin.
__________________
FERRUH.MAVİTUNA - İnanmıyorum, yeni site!
soul şu an çevrimdışı  
Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!Spurl'e kaydet! http://reddit.com/submit?url=%url%&title=%title%Wong'e kaydet!Yahoo'ya kaydet!Google'a kaydet!MSN'e kaydet!Facebook'e kaydet!
Mesajdan alıntı yaparak yeni bir cevap ekleyin
Sponsorlu Bağlantılar
Zoque.Forum
Reklam
Yanıt

Etiketler

engellemek , injection , sql



 
Zoque'a hoşgeldiniz!
Zoque 27.02.1999 tarihinde yayın hayatına başlamış, paylaşıma dayalı bir oluşumdur. Tasarım, teknoloji, web, kültür ve sanat ana başlıkları altında bilgi paylaşımı ve benzer değerlere sahip katılımcıların birbirleriyle iletişime girmelerine imkan sağlar. "Az ama Öz" sloganından yola çıkarak, kaliteli ve nitelikli katılımı temel alır.

Saygın ve ciddi bir ortamda yardımlaşmak, haberleşmek, kendi bildiklerini diğer katılımcılarla paylaşmak isteyen, oluşumumuza düzenli katılımda bulunacağı inancını taşıyan konuklarımızı üye olmaya davet ediyoruz. [ » ]


Üye Girişi:

UslanmaM baktabul.com TEKplatform TEKplatform

En popüler ilk 100 etiket
Tag Cloud
acil adsl ajax almak arama araniyor ariyorum ariyoruz asp bilen bilgi bilgisayar blog calisma canon css div domain dosya eleman film firefox flash font form forum fotograf freelance google gore grafik grafiker hakkinda hangi hata hatasi hosting html ilgili ilk image internet istanbul istiyorum java javascript karakter kayit kisisel kullanimi link logo mac mail menu muzik mysql nasil neden nedir online oyun photoshop php problemi program programi reklam resim satilik sayfa script server ses sistemi site sitesi son soru sorun sorunsali sorunu sql swf tasarim tasarimci tasarimcisi tasarimi turk turkce veri video web windows wordpress xml yardim yazi yeni zoque
Zoque RSS Aboneliği
Son eklenen konuları e-posta ile haber verelim mi?

Forum Yazılımı: vBulletin® Version 3.7.3 Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

Arayüz/Skin "Güneş" © www.zoque.com / net. Copyright © 1999 - 2008
Forum Saati GMT +2. Şu anda saat: 12:30.