Programlamadili.Net Yeni Nesil Programlama Portali
Makale Ara: 
Kullanıcı Adı : Şifre :
  • Makale Kategorileri
Anasayfa
ACPI [0]
Action Script [5]
Ajax [7]
ASP [12]
ASP.NET [23]
Assembly [3]
Bash [1]
C [4]
C# [9]
C++ [10]
Cobol [1]
Delphi [31]
Flash [5]
Html [9]
JAVA [36]
Java Script [12]
JSF [2]
Jsp [6]
Lua [1]
Matlab [2]
MySQL [30]
Oracle [1]
Pascal [31]
Perl [4]
Photoshop [2]
PHP [154]
Python [8]
REXX [6]
Ruby [1]
SEO [5]
Visual Basic [37]
  • Gorsel Ders Kategorileri
Asp [25]
Asp.Net [5]
Csharp [33]
Delphi [3]
Fireworks [4]
Flash [10]
Java Script [0]
Photoshop [0]
PHP [55]
Vb.Net [9]
Visual Basic [4]
  • Dil
English
Deutsch
deutsch
  • Reklam Alani
MySQL / mysql_real_escape_string komutu
mysql_real_escape_string komutu
Yazar: FERDIKUCUK
Eklenme: 10/03/08    Okunma: 217    
 
 

Terim gereği bir tanımlama yapmakta fayda var;mysql_real_escape_string,bir sql ifadesinde;sql için özel anlam ifade edebilecek terimleri escape (kaçış) etmeye yaramaktadır,bir başka deyişle backslashes(\) etmektedir.Peki neden kullanılır?bilmeyenleriniz olabilir.Tabi ki deminde söylediğim gibi,sql de özel anlam ifade eden,terimlerden en önemlisi (') tek tırnak işaretidir.sql sorgularında genelde kayıt problemlerinde ve sql injection ataklarında (adres acığından sızma yöntemi) bu tırnak işaretleri,Programcının başını ağrıtan en önemli karakterlerden bir tanesidir,En basit ve akılda kalıcı bir yöntemle örnek vermem gerekirse;

PHP Kodu:


 Kod Çizelgesi     Kod Dili: php
$veri_kaydi="insert into tablo values ('',''blahblah''.....);  



Gibi bir verikaydı hatalı bir verikaydıdır,cunku sql ifadesinde zaten kayıt işlemlerinde,sql için özel anlam ifade eden bir terimi veri kaydederken de kullanmış olmaktayız,bu karakterde söylediğimiz gibi (') tek tırnaktır,işte form yardımıyla ziyaretçiden gelen bilgileri,mysql_real_escape_string sayesinde backslashes etmek gerekmektedir,Sql injection saldırılarında bu açıktan faydalanarak sistem hackleri gerçekleşmektedir.Bildiğiniz gibi ziyaretçiden gelen $_POST['adi'] gibi bir değişken,gerçekten çok tehlikeli bir değişkendir.Bu değişkenden gelen verilerde gerekli süzmeleri yapmadığımız sürece,sistemimize canavar kaydettiğimizi bilmemiz gerekmektedir.İşte bu yüzden mysql_real_escape_string fonksiyonu bo önlemleri bize almamızda bize yardımcı olacaktır.


Şimdi birazcık daha olayı özleştirmek gerekirse;mysql_real_escape_string fonksiyonunu nasıl kullanıcaz,örnekler üzerinde göstererek anlamaya çalışalım,zira örnekler üzerinde gösterilen kodlamalar ve anlatımlar,amatör programcıların kafalarında daha kalıcı bir etki yaratacıgından eminim.Şimdi o zaman bir form aklınıza getirin.


PHP Kodu:


 
 Kod Çizelgesi     Kod Dili: html
 <form action="" method="post">   
<input type="text" name="adi"  >
   <input type="submit" name="kaydet" value="kaydet">
   </form>  



Şimdi bu basit ve masum görünen form aslında,önlemini almadıgınız sürece gercekten bir canavar kesilir ve başınıza büyük bir bela almanıza sebebiyet verir.O yüzden bu formdan şu an itibariyle korkmamız lazım.Zira kaydet butonunla gelen hiç bir bilgiyi bilmiyoruz.Ne yollandığı hakkında en ufacık bir bilgimiz bile yok.Her ne yollandıysa yollansın numeric yada text hiç farketmez,sql için özel anlam ifade edebilecek terimler varsa içinde onları temizletip,gelen post bilgiyi,güvenlik moduna alabiliriz.İşte bunun için aşağıdaki kodlamayla bu formu masum haline getireceğiz.

PHP Kodu:

 
 Kod Çizelgesi     Kod Dili: php
/* mysql bağlantısını yazıyoru */   
mysql_connect ("hostname","username","password") || die ("false1");
   mysql_select_name ("database") || die ("false2");
    
   /* gelen bilgiyi süzüyoruz */
   $adi=mysql_real_escape_string($_POST['adi']);
   $veri_kaydi="insert into tablo values ('','$adi');
   $sorgu=mysql_query($veri_kaydi);
   if(isset($sorgu) ) {
   echo 'true';
   }
   else {
   echo 'false';
   }  



Gördüğünüz gibi, $adi=mysql_real_escape_string($_POST['adi']); yazdıgımız bu değişkende bilgi süzmesi yaparak,eğer yollanan post bilgide,tehlikeli sql için anlam ifade edebilecek terimler varsa,bunlara backslashes yapıp tehlikeli modundan cıkarıyoruz,ve yorumlanır moda sokuyoruz.İşte bu yontemle ifadeyi ele alıp,gerekli önlemleri almış bulunmaktayız.Tabi cok guvenilir yani %100 güvenilir bir fonksiyon mu; hayır asla değil,cunku 100 lerce komplike durumlar söz konusu olunca,elde edilen bilgi ve önlemlerimiz,hiç bir kodun %100 saglıklı oldugunu acıklamayacaktır.Genel manada önlemlerinizi bu şekilde almış bulunuyoruz.


Aslında mysql_real_escape_string den farklı olarak,bazı kişiler,stripslashes ve addslashes fonksiyonlarını kullanarak,kayıt yaptıklarını görüyorum,yararlı olsalar bile,aslında hiç güvenilir olmayan 2 fonksiyonu kullanmış oluyorsunuz.mesela stripslashes fonksiyonunu şu şekilde kullanmak,gerçekten tek bir şart için süzme yaparsınız,ama o şartı bilen biri size hiç farkettirmeden escape yaptırırsa,sql icin özel anlam ifaden ifadelerin escape ini size kaldırmış olur.Ne demek istediğimi aşağıdaki kodla anlamaya çalışalım.

PHP Kodu:


 Kod Çizelgesi     Kod Dili: php
$_POST['adi']="\'x";
   $adi=stripslashes($_POST['adi']);  



Bu kodla kayıt yaparsanız,('x) su ifadeyi sisteminize almış olursunuz,cunku ziyaretci boyle bir bilgiyi yani \'x su ifadeyi yollayarak sizden backslashes (\) ı kaldırmanızı ister ve sizde kaldırırsınız.o yüzden stripslashes komutuyla kayıt yapılmaz.Şimdi o zaman gelin en sağlıklı kayıt biçimini manual destekli göstererek konuyu bitireyim.

PHP Kodu:


 Kod Çizelgesi     Kod Dili: php
if(get_magic_quotes_gpc()) {
   $adi=stripslashes($_POST['adi']);
   echo $adi;
   }
   else {
   $adi=$_POST['adi'];
  
   }
   $query = sprintf("INSERT INTO tablo (adi) VALUES ('%s')",
    mysql_real_escape_string($adi, $link);  



Burada daha guvenli olarak,configurasyon ayarlarından get_magic_quotes_gpc ayarlarını kontrol ettiriyoruz,eğer if şartında ki gibi ayar 0 ise; stripslashes ile backslashes (\) karakterlerini tehlikeli komuttan cıkartıyoruz eğer ayar on ise; stripslashes kullanmamıza gerek yok,cunku karakterleri zaten mysql_real_escape_string escapeliyecektir.


mysql_real_escape_string komutunla ilgili son olarak soyleyeceğim kelimeler; bu komut % and _. bu gibi karakterlere karsı etkisizdir,yani bu ifadeleri escapelemez,zira en tehlikeli olan tek tırnak ta escapeleme yapması,sql icin baz alınabilecek saldırıları yok etmesi,birinci derecede etki yapabilecek bir önlemdir.

Makale Sahibi : Ali Gürbüz
Not : Her Makalesinde Oldugu Gibi Bu Makalesinde de Kendisine tesekkur Ederim.


Taglar: Bir Yazi dosyasindan TXT tabloya veri aktarmak Kendi Admin Panelimden Phpmyadmin Yedegi Nasil Alirim Mysql baglantisi kurmak Mysql BetweenAnd Isleci Mysql Database Uzerinde Stored Procedure Kullanimi MySQL Delete Veritabanindaki Bilgiyi Silmek mysql dersleri Mysql DROP Deyimi MySQL icin Acik Kalma Suresi MySQL ile Matris Olusturmak MySQL ile Subselect Islemini Join kullanarak Yapmak Mysql INNER JOIN Islemi MySQL InsertInsert Into - Veri Eklemek Mysql Like Isleci Mysql ORDER BY Yan Tumcesi Mysql Sum Islevi MySQL Tablosunda Kolon icin Veri Tipini Degistirme Mysql UNION Islemi Mysql UPDATE Deyimi MySQL Veritabanini Yedeklemek MySQL Veritabanina Baglanma Mysql ye kaydedilen bilgilerin nasil ciktisini ali MYSQLde PHP Kullanarak Veri Silme mysql_real_escape_string komutu php MySQL Full-text Arama

Isminiz:
E-mail adresiniz:
Güvenlik Kodu:
  
 

 

Istatistikler ,
Sitemizde su anda 31 kategori, 458 makale , 148 görsel ders ve 1943 Ziyaretci bulunmaktadir...
Toplam üye sayimiz : 1118

Web Stats

Copyright © 2007 Programlamadili.net - Programlama & Tasarim: Recep Ikiz & Ferdi Küçük

| Site Haritasi |

"Ne Aradığını Bilmeyen Bulduğunun Farkına Varamaz "
ACPI Programlama dili, Action Script Programlama dili, Ajax Programlama dili, ASP Programlama dili, ASP.NET Programlama dili, Assembly Programlama dili, Bash Programlama dili, C Programlama dili, C# Programlama dili, C++ Programlama dili, Cobol Programlama dili, Delphi Programlama dili, Flash Programlama dili, Html Programlama dili, JAVA Programlama dili, Java Script Programlama dili, JSF Programlama dili, Jsp Programlama dili, Lua Programlama dili, Matlab Programlama dili, MySQL Programlama dili, Oracle Programlama dili, Pascal Programlama dili, Perl Programlama dili, Photoshop Programlama dili, PHP Programlama dili, Python Programlama dili, REXX Programlama dili, Ruby Programlama dili, SEO Programlama dili, Visual Basic Programlama dili,
Reklam alanı