Duyuruyu Kapat
Facebook Gözat
Twitter Gözat

SQL Injection'dan nasıl korunabilirim?

Konu, 'Web Programlama' kısmında egencan tarafından paylaşıldı.

  1. egencan

    egencan Üye

    Kayıt:
    25 Ocak 2017
    Mesajlar:
    85
    Beğenilen Mesajlar:
    0
    Meslek:
    ÖĞRENCİ
    Şehir:
    İstanbul
    Merhaba,

    arkadaşlar ben sql injection'dan korunmak istiyorum. Forumdaki bazı sorulara baktım. Parametre kullan diyorlar. Ama parametre derkan bir kod örneği (php) verebilecek var mı?

    Lütfen yardım edin.

    Cevaplarınız için şimdiden çok teşekkür ederim.

    İyi günler dileğiyle.
     
  2. egencan

    egencan Üye

    Kayıt:
    25 Ocak 2017
    Mesajlar:
    85
    Beğenilen Mesajlar:
    0
    Meslek:
    ÖĞRENCİ
    Şehir:
    İstanbul
  3. gk

    gk Üye

    Kayıt:
    24 Aralık 2009
    Mesajlar:
    93
    Beğenilen Mesajlar:
    1
    Meslek:
    Yazılım Geliştirici
    Şehir:
    İstanbul
    Parametre ile kullanımda hiç tecrübem yok, belirttiğin fonksiyonları da bilmiyorum, ama sql injectiona karşı şöyle bir fonksiyon önerebilirim:

    Kod:
    <?php
    if (!function_exists("GetSQLValueString")) {
    function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
    {
      if (PHP_VERSION < 6) {
        $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
      }
      $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);
      switch ($theType) {
        case "text":
          $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
          break;    
        case "long":
        case "int":
          $theValue = ($theValue != "") ? intval($theValue) : "NULL";
          break;
        case "double":
          $theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
          break;
        case "date":
          $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
          break;
        case "defined":
          $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
          break;
      }
      return $theValue;
    }
    } ?>
    
    Yukarıdaki fonksiyonu kopyalayıp programına yapıştır. Kullanımı:
    Kod:
    "UPDATE kisiler SET isim = ". GetSQLValueString($_POST["isim"], "text")  .", yas = ". GetSQLValueString($_POST["yas"], "int") ." WHERE id = 1"
    
     
  4. Furkan Onka Uğur

    Furkan Onka Uğur Moderatör Yetkili Kişi

    Kayıt:
    12 Eylül 2008
    Mesajlar:
    3,689
    Beğenilen Mesajlar:
    43
    Şehir:
    Ankara
    SQL Injection Preventing Cheatsheet diye arat bakalım.

    Kısaca kurallar şu:
    1. Parametreli sorgular kullan.
    2. Kullanıcıdan veri aldığında filtrele. Daha iyisi beyaz liste kullan.
    3. Güncel php, mysql, apache kullan.

    Not: Gözünüzü seveyim mysql_ ile başlayan fonksiyonları önermeyin. Deprecatedlar. Yitip gidecekler.
     
  5. egencan

    egencan Üye

    Kayıt:
    25 Ocak 2017
    Mesajlar:
    85
    Beğenilen Mesajlar:
    0
    Meslek:
    ÖĞRENCİ
    Şehir:
    İstanbul
    Merhaba,

    parametreli sorgulara bir örnek verebilir misiniz?

    Lütfen yardım edin.

    Cevaplarınız için şimdiden çok teşekkür ederim.

    İyi günler dileğiyle.
     
  6. Furkan Onka Uğur

    Furkan Onka Uğur Moderatör Yetkili Kişi

    Kayıt:
    12 Eylül 2008
    Mesajlar:
    3,689
    Beğenilen Mesajlar:
    43
    Şehir:
    Ankara
    IBM Knowledge Center Güzel açıklamışlar.
    Diğer kaynaklar:
    PHP: PDO::prepare - Manual
    PHP Prepared Statements
    Fark şu: Sorgunda dışarıdan alınacak parametreleri işaretliyorsun ve sorguyu bir kez işletiyorsun. Böylece sql tümcesi ile veri karışmıyor ayrıca hız kazanıyor. Ayrıca bindParam ile verinin türünü de belirtebilir, bir sürü tanılaması zor hatanın önüne baştan geçebilirsin.

    PDO'nun yanında php'nin istisna mekanizmasını da kullanırsan çok daha iyi olur.
     
  7. egencan

    egencan Üye

    Kayıt:
    25 Ocak 2017
    Mesajlar:
    85
    Beğenilen Mesajlar:
    0
    Meslek:
    ÖĞRENCİ
    Şehir:
    İstanbul
    Merhaba,

    teşekkür ederim linkler için. Dediğin gibi ibm güzel açıklamış. Ben ibm'in sayfasında php ile ilgili konular olduğunu billmiyordum.

    İyi günler dilerim.