• 13-02-2010, 22:47:27
    #1
    Üyeliği durduruldu
    Selam Arkadaşlar
    Güvenlik Hakkında Bir Makale Paylaşmak İstedim.
    Alıntıdır

    Alıntı
    Selam Arkadaşlar,
    Yayın hayatımıza geçiş yapmakla birlikte güvenlik yazılarımıza başlıyoruz.
    anlatacağım konu PHP'de SQL injection Güvenliğini Sağlamak.
    Bunun Pek Çok Yolu Vardır, Ancak Ben Size En Güvenli Yolu anlatacağım.

    İlk Önce SQL İnjection Ne Kadar Tehlikelidir, Neler Yapılabilir Anlatalım.
    SQL İnjectionda Gelen Sorgu Verisinin Filtrelenmediği Taktirde, Oluşan Kod Açığında
    Kullanılan SQL Kodlarını Yazarak Sizin Tablo Ve Kolonlarınızdaki Bilgiler Çekilebiliyor.

    Genellikle Bu Türk Açıklar "ID" Verilerinin Filtrelenmemesinde Daha Çok Rol Oynar,
    SQL Açığında ;


    $id=$_GET["id"]; // id İle Veri Çekilir.

    $sorgu = mysql_query("SELECT * FROM user where ID='$id'"); // Ve Direk Sorguya yansıtılır.

    Burada ;

    Gelen id Verisi 1 İse Örneğin

    id=1'a Yaptığımızda ;

    $sorgu = mysql_query("SELECT * FROM user where ID='1'a'"); Olacaktır, Ve Sorguda Hata
    Oluşacaktır.Buda Bu Sorguda İstediğimiz Sorguyu Çalıştırabileceğimiz anlamına gelebilir.
    id=1 order by 100 gibi.

    Bu Tür Sorgular oldukça tehlikelidir, gerek kişisel bilgileriniz gerek şifreleriniz çekilebilir.

    Sizi Pek Fazla Sıkmak İstemiyorum Arkadaşlar,
    Aslında bu Büyük Açığın Bir Webmaster Hatası olduğunu ve engellenmesinin bu kadar basit olduğunu
    şimdi göreceğiz.

    bir önceki filtresiz sorgumuzda $id verisini hiçbir şekilde filtrelemeden geçirmeden
    sorguda kullanmıştık.şimdi ise "mysql_real_escape_string" fonksiyonu ile engelliyeceğiz.

    $id=$_GET["id"]; // id İle Veri Çekilir.
    $id = mysql_real_escape_string($id); // id "mysql_real_escape_string" ile filtrelemeden geçirilir.

    burada id değişkenının son hali kullanılır.
    sorguda ise ','a Gibi Hata Alma Karakterlerimiz işlemeyeceği için Sorguda Hiç Bir Şekilde Kod Çalıştırılamıyacaktır.

    Sorguda Kod Çalıştırılamayıncada, Sistemden Olağanüstü Veri Çekilemiyecektir.

    SubSecurity.Org - Jester

    www.subsecurity.org
  • 14-02-2010, 01:17:32
    #2
    paylaşım için saol.

    integer olan alanlar için intval kullanılabilir.

    $id = $_GET['id'];
    $id = intval($id);
    ya da direk

    $id = intval($_GET['id']);
  • 14-02-2010, 01:20:22
    #3
    teşekkürler güzel açıklama olmuş.
  • 14-02-2010, 01:25:32
    #4
    Üyeliği durduruldu
    webkarizma adlı üyeden alıntı: mesajı görüntüle
    teşekkürler güzel açıklama olmuş.
    Evet Genellikle yeni Başlayanlraın kafasını karıştırmayacak bir şekilde olduğu için paylaştım hocam
  • 14-02-2010, 01:36:25
    #5
    Üyeliği durduruldu
    biraz yetersiz olmuş en basitinden sql de -- kullanilarak sql ifade kesilebilir yada # gibi
  • 14-02-2010, 01:43:29
    #6
    Üyeliği durduruldu
    sdemirkeser adlı üyeden alıntı: mesajı görüntüle
    biraz yetersiz olmuş en basitinden sql de -- kullanilarak sql ifade kesilebilir yada # gibi
    Hocam Basit ancak yeniler için kavranmasında zorlama yaşanmayacağını düşünüyorum, ordan gir oraya çık felan ama bu şekilde çok basit bir giriş ile akıllarında bir kavram oluşmuştur muhakkak.
  • 14-02-2010, 03:48:52
    #7
    THR
    Üyeliği durduruldu
    süleyman hocam upload la ilgili bir video yayınlayacaktınız yayınladı mı o ben mi kaçırdım?
  • 14-02-2010, 11:39:28
    #8
    Üyeliği durduruldu
    if(!is_numeric($id) || $id=="") bu ifadede yararlı olur.
  • 14-02-2010, 11:46:14
    #9
    Kimlik doğrulama veya yönetimden onay bekliyor.
    ColdHeart adlı üyeden alıntı: mesajı görüntüle
    if(!is_numeric($id) || $id=="") bu ifadede yararlı olur.
    bende bu yöntemi ve intval(); i kullanıyorum genelde.

    Sağolun Hocam makale için. Öğrenme de sınır yok