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

Ferruh Mavituna ferruh at mavituna.com
Thu Sep 6 05:44:34 EDT 2007


Cok pratik ORM cozumleri var kucuk buyuk her projeye gidecek sekilde. Bence
ORM hem guvenlik hem de yapi acisindan hemen hemen her proje icin mantikli.

Datalari kontrol konusunda benim fikrim datayi dbye almadan once
gerekliligini kabul etmek. Eger sistemde kullanici adlari 20 karakterden
kisa ve icerlerinde sadece a-z bulunabiliyorsa bunu almadan once kontrol
etmek bence iyi bir fikir. Hem guvenlik hem de sistemin guzelligi acisindan.


Onun harici sadece SQL Injection icin kontrol ediliyorsa parameterized query
lerde bence de boyle bir seye gerek yok.

On 06/09/07, Bunyamin DEMIR <bunyamindemir at gmail.com> wrote:
>
> Merhabalar,
>
> Parametrize mekanizmasını kullandıktan sonra sql e gelen inputları bir
> daha validate etmenin bir anlamı olur mu acaba?
>
> Bana fazladan bir yük gibi geliyor.  Tecrübe edinen oldu mu?
>
>
> Saygılar,
>
>
>
> 2007/9/6, Oguzhan YILMAZ <aspsrc at gmail.com>:
> >
> > 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
> > _______________________________________________
> > Owasp-turkey mailing list
> > Owasp-turkey at lists.owasp.org
> > https://lists.owasp.org/mailman/listinfo/owasp-turkey
> >
> >
>
>
> --
> Bunyamin Demir
> OWASP-Turkey Chair
> http://www.webguvenligi.org
> _______________________________________________
> Owasp-turkey mailing list
> Owasp-turkey at lists.owasp.org
> https://lists.owasp.org/mailman/listinfo/owasp-turkey
>
>


-- 
Ferruh Mavituna
http://ferruh.mavituna.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: https://lists.owasp.org/pipermail/owasp-turkey/attachments/20070906/66076c24/attachment.html 


More information about the Owasp-turkey mailing list