Zoque.Forum
Dirsek Teması:
Geri Dön Zoque.Forum » Webmaster Kaynaklari » Sunucu Tabanlı Programlama (Server Side) » PHP » Hazır Sistemde SQL Injection


Yanıt
 
LinkBack Seçenekler
Old 11.10.2007   #1 (permalink)
albay
 
albay's Avatar
 
Üyelik Tarihi: 09.05.2007
Yer: İzmir
Yaş: 17
Mesaj: 115
Hazır Sistemde SQL Injection

Merhaba.

Ben çok işimi görecek bir script edindim. İçinde yüzlerce sorgu var ve bir çok parçadan oluşuyor.Tek tek editlemem mümkün değil. Değişkenler hiç dokunulmadan veritabanına işleniyor ve veri çekiliyor. Güvenlik sorununu engellemenin bir yolu var mı? Yada include ile çalışan güvenlik dosyaları ne kadar etkilidir?
__________________
SHE-KER Networks
albay ş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 11.10.2007   #2 (permalink)
soul
 
soul's Avatar
 
Üyelik Tarihi: 13.07.2000
Yer: LND
Mesaj: 4,275
Re: Hazır Sistemde SQL Injection

Belki ustun koru sekilde bir noktaya kadar idare edilebilir ama her yeri tek tek editlemeketen baska bir care olmadigini soyleyebilirim.

Tum SQL ler belli fonksiyonlar uzerinden gitmiyor mu? YOksa heryerde tamamen ayri ayri kendi capinda mi yazilmis.
__________________
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
Old 14.10.2007   #3 (permalink)
albay
 
albay's Avatar
 
Üyelik Tarihi: 09.05.2007
Yer: İzmir
Yaş: 17
Mesaj: 115
Re: Hazır Sistemde SQL Injection

SQL ile direk ekileşiyor. Ekteki dosyayı ben Hotscript ten indirdim ve ekledim MySQL bağlantı dosyasına geçici önlem olarak.kodları ekliyorum.Ceviz'de sormuştum bu kodlar işe yarar mı diye. yarar ama büyük küçük harf farkı ile yapılabilir denmişti ama strlower fonksiyonu ile gelenler kontrol ediliyor.

PHP Code:
<?PHP
 
/* Security Library By Jeff Blanchette (JBlanch) of Http://JBlanch.us */
 
   /* Function SecurityError
       Prints out an error message formatted in SecurityLib style.  Used internally
    */
     
function SecurityError($errmsg,$exit true){
       echo 
"<b>PHP Güvenlik Duvarı:</b> <u>"$errmsg ."</u><br>\n";
        if(
$exit) exit;
     }  



   
/* Function GetVar
          Useage -
            This function is used for web applications that grab data from either the REQUEST, POST, or GET method. 
            Most developers don't protect the data that they grab from these places, leading to SQL injections, malacious data,
            XSS hacks, and many other things.  Along from annyoing errors from certian PHP.ini file setups.
            
            The function validates the data by taking out malcious characters using htmlspecialchars() and also makes sure
            the variable is set to NULL or "" before returning.  
 
            But it also can return another default value if specified, such as this example for getting a MySQL ORDER BY statement.

            $ord = GetVar("ord","GET","DESC");
            
            Therefore if the value isn't found in the GET string, it's set to DESC automatically when returned.
 
            It's a practice PHP developers need to start using, and this function makes it easy to do!

              name: Tells the function the name of the variable which to get from the source
              source: Defines where PHP should grab the data from.  (REQUEST, POST, or GET)
              default: Tells the function what the value should be if the source data isn't found.  Default is ""
              protect: If true, will pass the data through the PHP function htmlspecialchars(). Default TRUE.
              
        */



  
function GetVar($name,$source,$default "",$protect true){
   
$var "";
   
$souce strtoupper($source);
    switch(
$source){
     default:
       
$var = isset($_REQUEST[$name]) ? ($protect htmlspecialchars($_REQUEST[$name]) : $_REQUEST[$name]) : $default;
     break;
     case 
"GET":
       
$var = isset($_GET[$name]) ? ($protect htmlspecialchars($_GET[$name]) : $_GET[$name]) : $default;
     break;

     case 
"POST":
       
$var = isset($_POST[$name]) ? ($protect htmlspecialchars($_POST[$name]) : $_POST[$name]) : $default;
     break;
    }
   return 
$var;
  }

  
/* Database Functions
    
      Database functions are slightly specific to which database you can use, they are
      on a set of keywords used generally in MySQL databases querys to determine how
      'secure' they are.
  */
 
  /* Database Keyword Security 
   
       This is the section which the dbQuery uses to find malcious words.
       DO NOT ALTER THIS SECTION UNLESS YOU KNOW WHAT YOU ARE DOING.
  
        Useage:
          To add a new keyword, use the function dbAddKeyword(keyword).  It will place the word
          into the array.
  */
  
  
$SDB_KEYWORDS = array();

  function 
dbAddKeyword($keyword){
   global 
$SDB_KEYWORDS;
    
$keyword htmlspecialchars($keyword);
       
$SDB_KEYWORDS[] = $keyword;
  }

   
dbAddKeyword("MySQL.user");      dbAddKeyword("SET PASSWORD FOR");
   
dbAddKeyword("FLUSH");           dbAddKeyword("PRIVILEGES");
   
dbAddKeyword("GRANT");           dbAddKeyword("USEAGE");
   
dbAddKeyword("USER()");          dbAddKeyword("DATABASE()");
   
dbAddKeyword("SHOW DATABASES");  dbAddKeyword("SHOW TABLES");
   
dbAddKeyword("GRANT");           dbAddKeyword("CREATE");
   
dbAddKeyword("DESCRIBE");           dbAddKeyword("LOAD");
   
dbAddKeyword("INFINE");           dbAddKeyword("LINES");
   
dbAddKeyword("LOCAL");           dbAddKeyword("DROP");
   
dbAddKeyword("UNLOCK");

  function 
dbQuery($query,$dbId ""){
   global 
$SDB_KEYWORDS;
   if(
trim($query) == ""){
    
SecurityError("Blank Query",false);
    return 
false;
   }
    
$error false;
   foreach(
$SDB_KEYWORDS as $keyword){
    if(
preg_match("/$keyword/i",$query)){
     
$error true;
    } 
   }
   if(
$error == true){
    
SecurityError("Query contains words not suitable for query.");
    exit; 
// backup
   
}else{ 
    return 
$query;
   }
   return 
false;
  }
?>
__________________
SHE-KER Networks
albay ş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 14.10.2007   #4 (permalink)
soul
 
soul's Avatar
 
Üyelik Tarihi: 13.07.2000
Yer: LND
Mesaj: 4,275
Re: Hazır Sistemde SQL Injection

Alıntı:
albay tarafından gönderilen mesaj: Mesajı Görüntüle
SQL ile direk ekileşiyor. Ekteki dosyayı ben Hotscript ten indirdim ve ekledim MySQL bağlantı dosyasına geçici önlem olarak.kodları ekliyorum.Ceviz'de sormuştum bu kodlar işe yarar mı diye. yarar ama büyük küçük harf farkı ile yapılabilir denmişti ama strlower fonksiyonu ile gelenler kontrol ediliyor.
Bu kodlar bazi ataklari potansiyel olarak durdurabilir ama genel olarak durdurmayacaktir. Herseyin otesinde bu cok zayif bir filtreleme, UNION bile filtrelenmemis ikincisi daha onceden de belirttiigim gibi bu tip hicbir filtre gercek bir guvenlik vermeyecektir.

Eger ille de bu tip bir sey yapacagim diyorsan sunu onerebilirim : http://php-ids.org/

Ama bu sekilde bir sistemi kesinlikle onermiyorum.
__________________
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
Old 14.10.2007   #5 (permalink)
albay
 
albay's Avatar
 
Üyelik Tarihi: 09.05.2007
Yer: İzmir
Yaş: 17
Mesaj: 115
Re: Hazır Sistemde SQL Injection

teşekkür ederim.. o zaman ben tüm üyelerin kullandığı dosyaları SQL saldırılarına karşı gerekli fonksiyonlara alayım.. İlginiz için teşekkürler.

bu arada sanırım sizin sitenizde bu konuda ayrıntılı bilgi vardı...
__________________
SHE-KER Networks
albay ş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 15.10.2007   #6 (permalink)
soul
 
soul's Avatar
 
Üyelik Tarihi: 13.07.2000
Yer: LND
Mesaj: 4,275
Re: Hazır Sistemde SQL Injection

Evet sitemde bayagi bir bilgi var

Sitede ferruh.mavituna.com - sagdaki bolumde SQL Injection References ve SQL Injection Dersleri - Videoları isimli iki bolumun altinda toplam 8-10 kadar makale var.
__________________
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
Old 15.10.2007   #7 (permalink)
albay
 
albay's Avatar
 
Üyelik Tarihi: 09.05.2007
Yer: İzmir
Yaş: 17
Mesaj: 115
Re: Hazır Sistemde SQL Injection

son olarak başka birşey sormak istiyorum. şuan üstünde çalıştığım script kendi sitemin bir dizininde. kendi kendime yazdığım bir MySQL sorgusuna enjekte çalışması yaptım fakat olmadı ve serverda get_magic_quotes_gpc() 1 olarak dönüyor. Sanırım bu tür durumlarda addslashes() fonksiyonu kullanılmıyor değil mi? yada kullanırsam ne kaybederim, kullanmazsam ne kaybederim?( get_magic_quotes_gpc() ile addslashes())

ilginize teşekkürler..
__________________
SHE-KER Networks
albay ş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 15.10.2007   #8 (permalink)
soul
 
soul's Avatar
 
Üyelik Tarihi: 13.07.2000
Yer: LND
Mesaj: 4,275
Re: Hazır Sistemde SQL Injection

Integer beklenen bir data varsa direk int kontrolu yap, gecmezse direk hata ver.

Diger string datalar icinse
magic_quotes acik ise once onu geri cevir - strip_slashes() ile yapabilirsin.

Ondan sonrada integer mysql_real_escape() kullan.

Eger magic kapali ise direk mysql_real_escape() kullan.


veritabaninin MySQL oldugunu varsayiyorum.
__________________
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
Old 15.10.2007   #9 (permalink)
albay
 
albay's Avatar
 
Üyelik Tarihi: 09.05.2007
Yer: İzmir
Yaş: 17
Mesaj: 115
Re: Hazır Sistemde SQL Injection

int. kontrolünü anladım o mantıklı ama
get_magic_quotes_gpc() 1 olarak dönünce addslashes ihtiyacı kalmıyor. buraya kadar herşey tamam. stripslashes() koyup " \ " lar kalkacak. Yani değişkendeki veri hiç işlenmemiş ve get_magic_quotes_gpc() 0 dönmüş gibi olacak. ama ondan sonra mysql_real_escape_string uygularsak addslashes() ile aynı şekli almış olmayacak mı?

kusura bakmayın çok soru sordum ama mühim olan sorgu sırasında '," gibi özel karakterlerin etkisizleştirilmesi değil mi? o zman DROP ifadesi gibi işlemlerde etkisiz kalmaz mı?
__________________
SHE-KER Networks
albay ş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 15.10.2007   #10 (permalink)
soul
 
soul's Avatar
 
Üyelik Tarihi: 13.07.2000
Yer: LND
Mesaj: 4,275
Re: Hazır Sistemde SQL Injection

mysql_real_escape() addslashes() dan biraz daha gelismis. ikisi arasindaki farkliklari okursan internette cesitli yerlerde geciyor.

addslashes() genelde isi goruyor ama kisaca mysql_real_escape() daha saglikli. Ozellikle isin icine farkli encoding vs. gidirdignde.

Bu arada komiktir ama not olarak zaten MySQL - PHP de SQL Injection DROP falan yapmak mumkun degil zaten.
__________________
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
Yanıt

Etiketler
injection , php , 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