<br>Valide derken, örneğin: kullanıcı telefon numarası giriyosa hakkatten telefon numarası girmişmi. istenilen desendemi girilmiş gibi...<br>Gerçi validate ederken &#39; larıda kontrol ediyor ama :) esas amacı veri bütünlüğünün sağlanması.
<br><br>Bir kaç projede hem parametrize hemde&nbsp; sql sorgularını fonksiyona dayalı validate ettiriyordum tabi bunun gereksiz olduğunu daha sonra öğrendim :o)<br><br>Ben projelerimde hiç ORM kullanmadım. ama bundan sonra kesinlikle kullanıcam.
<br><br>Saygılar herkese kolay gelsin...<br><br><div><span class="gmail_quote">2007/9/6, Ferruh Mavituna &lt;<a href="mailto:ferruh@mavituna.com">ferruh@mavituna.com</a>&gt;:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
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.<br><br>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. 
<br><br>Onun harici sadece SQL Injection icin kontrol ediliyorsa parameterized query lerde bence de boyle bir seye gerek yok.<div><span class="e" id="q_114da34eb032a80f_1"><br><br><div><span class="gmail_quote">On 06/09/07, 
<b class="gmail_sendername">Bunyamin DEMIR</b>
 &lt;<a href="mailto:bunyamindemir@gmail.com" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">bunyamindemir@gmail.com</a>&gt; wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Merhabalar,
<br><br>Parametrize mekanizmasını kullandıktan sonra sql e gelen inputları bir daha validate etmenin bir anlamı olur mu acaba?<br><br>Bana fazladan bir yük gibi geliyor.&nbsp; Tecrübe edinen oldu mu?<br><br><br>Saygılar,
<br><br><br><br><div><span class="gmail_quote">2007/9/6, Oguzhan YILMAZ &lt;<a href="mailto:aspsrc@gmail.com" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">aspsrc@gmail.com</a>&gt;:</span><div><span>

<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Hm! Sanırım geniş çaplı proejler için en ideal ORM frameworkleri kullanmak. Orta ölçekli projelerde ise ki&nbsp; (ise ile ki böyle kullanılmaz herhalde :o) ) çok sql işlemi olmayan, parameterized tekniğini kullanmak. <br><br>

Bende genelde gelen parametreleri validate ettikten sonra aşağıdaki gibi bir parametrize sorguları tercih ediyorum.
<br><br>private System.Data.OleDb.OleDbCommand[] _commandCollection;<br>&nbsp;private void InitCommandCollection() {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this._commandCollection = new System.Data.SqlClient.SqlCommand[1];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this._commandCollection[0] = new 
System.Data.SqlClient.SqlCommand();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this._commandCollection[0].Connection = this.Connection;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this._commandCollection[0].CommandText = @&quot;SELECT a,b,c FROM HOPPA WHERE hop1=@Param AND hop2=@Param2&quot;;
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this._commandCollection[0].CommandType = System.Data.CommandType.Text;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this._commandCollection[0].Parameters.Add(new System.Data.SqlClient.SqlParameter(&quot;@Param1&quot;, System.Data.SqlDbType.VarChar



, 1024));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this._commandCollection[0].Parameters.Add(new System.Data.SqlClient.SqlParameter(&quot;@Param2&quot;, System.Data.SqlDbType.VarChar, 35));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br><br>En nihayetinde bundan kaçmak o kadar zor bişi değil sanırım...
<br><br><div><span class="gmail_quote">2007/9/6, Ferruh Mavituna &lt;<a href="mailto:ferruh@mavituna.com" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">ferruh@mavituna.com</a>&gt;:</span><div><span>


<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<br>Guzel bir ornekmis, biraz da ilginc geldi. Yarisinda kullanip yarisinda kullanmamak :)<div><span><br><br><div><span class="gmail_quote">On 06/09/07, <b class="gmail_sendername">Bedirhan Urgun
</b> &lt;<a href="mailto:urgunb@hotmail.com" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">
urgunb@hotmail.com</a>&gt; wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">



<div>&nbsp;<br>
Ferruh iyilesmis anlasilan. :) <br>
Bahsettigi %0.01 ile alakali 3-4 gun once karsilastigim bir kod (bir Java metodu. Yorumlarim asagida);<br>
&nbsp;<br>
/*=======================*/<br>
public boolean XXXIptalSorgu() throws FileNotFoundException, IOException {<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; StringBuffer sb = new StringBuffer();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PreparedStatement stmt = null;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ResultSet rset = null;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; connCA = utils.getCADBConnection(altkokno);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; stmt = connCA.prepareStatement(&quot;SELECT Z_NO,ISIM,EMAIL,K_NO FROM KULLANICI_KIMLIKLERI WHERE ((K_NO LIKE &#39;%&quot; + <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
<strong>kno</strong> + &quot;%&#39;) AND (DURUM=?))&quot;);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; stmt.setInt(1, ZConstants.K_<font face="">GECERLI</font>); // DURUM GECERLI OLAN<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rset = stmt.executeQuery();<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.iptalSorguSonucu




 = gecerliXXXTablosu(rset);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return true;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch (SQLException e) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.hataMesaji = &quot;Hata: &quot; + e + &quot;&lt;br&gt;\n&quot;;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return false;
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; finally {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (rset != null) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font face="">rset.close</font>();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (stmt != null) {<br>



&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
stmt.close();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch (SQLException ignored) {}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; }<br>/*=======================*/<br><br>Parameterized Query kullanilmis, ama bi parametre (<strong>kno
</strong>) icin kullanilmamis (artik unutulmus mu, yoksa &quot;<strong>sql</strong>&nbsp;<strong>like&quot; </strong>icin kullanamayiz mi denmis bilmiyorum). <br>
&nbsp;<br>
Not: Tabi bunun sql exploit&#39;inde de bi soru isaretli parametre&nbsp;kullanmak gerekebilir (exploit dizgisine gore), yoksa &quot;missing parameter&quot; sql hatasi alinir<br><br>
bedirhan<br><br>
<blockquote>
<hr>
Date: Thu, 6 Sep 2007 08:27:26 +0100<br>From: <a href="mailto:ferruh@mavituna.com" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">ferruh@mavituna.com</a><br>To: <a href="mailto:aspsrc@gmail.com" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">




aspsrc@gmail.com</a><br>CC: <a href="mailto:owasp-turkey@lists.owasp.org" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">owasp-turkey@lists.owasp.org</a><br>Subject: Re: [Owasp-turkey] SQL Injection&#39;dan kaçmak.
<div><span><br><br>Merhaba,<br><br>SQL Injection icin en iyi korunma yontemi bir nedenini anlamak ve ona gore kodlamak, iki &quot;parameterized query&quot; ler kullanmak. <br><br>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. 
<br><br>%0.01 de su an aklima gelmeyen ama belki de orada bir yerde olan tuhaf bir SQL Injection sorunudur :)<br><br>
<div><span>On 05/09/07, <b>Oguzhan YILMAZ</b> &lt;<a href="mailto:aspsrc@gmail.com" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)"> aspsrc@gmail.com</a>&gt; wrote:</span> 
<blockquote style="padding-left: 1ex;">Merhaba,<br>Madem konu SQL injection.&nbsp; Bundan korunmak için geliştirmemiz gereken foksiyonlar nasıl olmalıdır? (Herhangi bir script ve programlama dili olarak) <br><br>En basitinden gelen ataktaki string den&nbsp; ( &#39; ) 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? 
<br><br>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? 
<br><span><br clear="all"><br>-- <br>Oğuzhan </span><br>_______________________________________________<br>Owasp-turkey mailing list<br><a href="mailto:Owasp-turkey@lists.owasp.org" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">




Owasp-turkey@lists.owasp.org </a><br><a href="https://lists.owasp.org/mailman/listinfo/owasp-turkey" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">https://lists.owasp.org/mailman/listinfo/owasp-turkey
</a><br><br></blockquote></div><br><br clear="all"><br>-- <br>Ferruh Mavituna<br><a href="http://ferruh.mavituna.com/" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">http://ferruh.mavituna.com</a>



 
</span></div></blockquote><span><br><hr>Connect to the next generation of MSN Messenger&nbsp;  <a href="http://imagine-msn.com/messenger/launch80/default.aspx?locale=en-us&amp;source=wlmailtagline" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">




Get it now! </a></span></div><span>
</span></blockquote></div><br><br clear="all"><br>-- <br>Ferruh Mavituna<br><a href="http://ferruh.mavituna.com" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">http://ferruh.mavituna.com</a>
</span></div></blockquote></span></div></div><span><br><br clear="all"><br>-- <br>Oğuzhan
</span><br>_______________________________________________<br>Owasp-turkey mailing list<br><a href="mailto:Owasp-turkey@lists.owasp.org" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">Owasp-turkey@lists.owasp.org
</a><br><a href="https://lists.owasp.org/mailman/listinfo/owasp-turkey" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">https://lists.owasp.org/mailman/listinfo/owasp-turkey</a><br><br></blockquote>


</span></div></div><span><br><br clear="all"><br>-- <br>Bunyamin Demir<br>OWASP-Turkey Chair<br><a href="http://www.webguvenligi.org" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">http://www.webguvenligi.org
</a>
</span><br>_______________________________________________<br>Owasp-turkey mailing list<br><a href="mailto:Owasp-turkey@lists.owasp.org" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">Owasp-turkey@lists.owasp.org
</a><br><a href="https://lists.owasp.org/mailman/listinfo/owasp-turkey" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">https://lists.owasp.org/mailman/listinfo/owasp-turkey</a><br><br></blockquote>

</div><br><br clear="all"><br>-- <br>Ferruh Mavituna<br><a href="http://ferruh.mavituna.com" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">http://ferruh.mavituna.com</a>
</span></div></blockquote></div><br><br clear="all"><br>-- <br>Oğuzhan