[Owasp-turkey] SQL Injection'dan kaçmak.

Oguzhan YILMAZ aspsrc at gmail.com
Thu Sep 6 05:03:03 EDT 2007


Hm! Sanırım geniş çaplı proejler için en ideal ORM frameworkleri kullanmak.
Orta ölçekli projelerde ise ki  (ise ile ki böyle kullanılmaz herhalde :o) )
çok sql işlemi olmayan, parameterized tekniğini kullanmak.

Bende genelde gelen parametreleri validate ettikten sonra aşağıdaki gibi bir
parametrize sorguları tercih ediyorum.

private System.Data.OleDb.OleDbCommand[] _commandCollection;
 private void InitCommandCollection() {
            this._commandCollection = new System.Data.SqlClient.SqlCommand
[1];
            this._commandCollection[0] = new
System.Data.SqlClient.SqlCommand();
            this._commandCollection[0].Connection = this.Connection;
            this._commandCollection[0].CommandText = @"SELECT a,b,c FROM
HOPPA WHERE [email protected] AND [email protected]";
            this._commandCollection[0].CommandType =
System.Data.CommandType.Text;
            this._commandCollection[0].Parameters.Add(new
System.Data.SqlClient.SqlParameter("@Param1", System.Data.SqlDbType.VarChar,
1024));
            this._commandCollection[0].Parameters.Add(new
System.Data.SqlClient.SqlParameter("@Param2", System.Data.SqlDbType.VarChar,
35));
        }

En nihayetinde bundan kaçmak o kadar zor bişi değil sanırım...

2007/9/6, Ferruh Mavituna <ferruh at mavituna.com>:
>
>
> Guzel bir ornekmis, biraz da ilginc geldi. Yarisinda kullanip yarisinda
> kullanmamak :)
>
> On 06/09/07, Bedirhan Urgun < urgunb at hotmail.com> wrote:
> >
> >
> > Ferruh iyilesmis anlasilan. :)
> > Bahsettigi %0.01 ile alakali 3-4 gun once karsilastigim bir kod (bir
> > Java metodu. Yorumlarim asagida);
> >
> > /*=======================*/
> > public boolean XXXIptalSorgu() throws FileNotFoundException, IOException
> > {
> >
> >         StringBuffer sb = new StringBuffer();
> >         PreparedStatement stmt = null;
> >         ResultSet rset = null;
> >         try {
> >             connCA = utils.getCADBConnection(altkokno);
> >
> >             stmt = connCA.prepareStatement("SELECT Z_NO,ISIM,EMAIL,K_NO
> > FROM KULLANICI_KIMLIKLERI WHERE ((K_NO LIKE '%" +
> >                                            *kno* + "%') AND
> > (DURUM=?))");
> >             stmt.setInt(1, ZConstants.K_GECERLI); // DURUM GECERLI OLAN
> >             rset = stmt.executeQuery();
> >
> >             this.iptalSorguSonucu = gecerliXXXTablosu(rset);
> >
> >             return true;
> >
> >         }
> >         catch (SQLException e) {
> >             this.hataMesaji = "Hata: " + e + "<br>\n";
> >             return false;
> >         }
> >
> >         finally {
> >             try {
> >                 if (rset != null) {
> >                     rset.close();
> >                 }
> >                 if (stmt != null) {
> >                     stmt.close();
> >                 }
> >             }
> >             catch (SQLException ignored) {}
> >         }
> >     }
> > /*=======================*/
> >
> > Parameterized Query kullanilmis, ama bi parametre (*kno *) icin
> > kullanilmamis (artik unutulmus mu, yoksa "*sql* *like" *icin
> > kullanamayiz mi denmis bilmiyorum).
> >
> > Not: Tabi bunun sql exploit'inde de bi soru isaretli parametre kullanmak
> > gerekebilir (exploit dizgisine gore), yoksa "missing parameter" sql hatasi
> > alinir
> >
> > bedirhan
> >
> >  ------------------------------
> > Date: Thu, 6 Sep 2007 08:27:26 +0100
> > From: ferruh at mavituna.com
> > To: aspsrc at gmail.com
> > CC: owasp-turkey at lists.owasp.org
> > Subject: Re: [Owasp-turkey] SQL Injection'dan kaçmak.
> >
> > Merhaba,
> >
> > SQL Injection icin en iyi korunma yontemi bir nedenini anlamak ve ona
> > gore kodlamak, iki "parameterized query" ler kullanmak.
> >
> > Hemen hemen tum modern web dilleri ve DB API lari bunlari destekliyor.
> > Dolayisiyla eger her turlu veritabani baglantisini parameterized query ler
> > ile yaparsaniz ve db tarafinda stored procedure vb. yazarken gene benzer
> > cozumler kullanirsaniz SQL Injection a karsi %99.99 korunmus olacaksinizdir.
> >
> >
> > %0.01 de su an aklima gelmeyen ama belki de orada bir yerde olan tuhaf
> > bir SQL Injection sorunudur :)
> >
> > On 05/09/07, *Oguzhan YILMAZ* < aspsrc at gmail.com> wrote:
> >
> > Merhaba,
> > Madem konu SQL injection.  Bundan korunmak için geliştirmemiz gereken
> > foksiyonlar nasıl olmalıdır? (Herhangi bir script ve programlama dili
> > olarak)
> >
> > En basitinden gelen ataktaki string den  ( ' ) tırnakları Replace etmek,
> > CHR() ve sql cümlelerini algılayıp değiştirmek, yada buna benzer kural bazlı
> > çözümler yeterlimidir? yoksa daha komplike şeyler de gereklimidir?
> >
> > Gerçi konu webgüvenliği ama windows uygulamalarında yada başka bir
> > platformda config (örneğin config.xlm) dosyaları içinden sql injection
> > mümkün olabiliyor. Aynı şekilde başka bir injection ile uygulamaya saldırı
> > olabilirmi?
> >
> >
> > --
> > Oğuzhan
> > _______________________________________________
> > Owasp-turkey mailing list
> > Owasp-turkey at lists.owasp.org
> > https://lists.owasp.org/mailman/listinfo/owasp-turkey
> >
> >
> >
> >
> > --
> > Ferruh Mavituna
> > http://ferruh.mavituna.com
> >
> >
> > ------------------------------
> > Connect to the next generation of MSN Messenger  Get it now!
> > <http://imagine-msn.com/messenger/launch80/default.aspx?locale=en-us&source=wlmailtagline>
> >
>
>
>
> --
> Ferruh Mavituna
> http://ferruh.mavituna.com
>



-- 
Oğuzhan
-------------- next part --------------
An HTML attachment was scrubbed...
URL: https://lists.owasp.org/pipermail/owasp-turkey/attachments/20070906/77350e73/attachment-0001.html 


More information about the Owasp-turkey mailing list