asp ile programlama yapanların bilmesi gereken en temel problem olan sql injection, aslında çok basit çözümü olan bir sorundur.
Öncelikle sql injection açığı nedir? sql injection sayfa.asp?id=1 gibi algoritmaları olan sayfalarınıza kastı olan kişilerin kullandıkları bir hack yöntemidir. mesela formlarda veya querystring yöntemini kullanan programlamalarda sayfa.asp?id=1 de id=1 yerine id=<script> yazarsanız sisteminiz bozulabilir. Bu yöntemi kullanan kişi yönetim panelinize bile girebilir.
normalde sayfa.asp?id=1 olarak gönderilen veri sayfa.asp sayfasında<%id=request.querystring(“id”)Set recordset = Server.CreateObject(“ADODB.Recordset”)sql=”select * from tablo where idnumarasi=”&id&””recordset.open sql,dbbaglantisi,1,3%>
gibi bir algoritma ile yürür. Ancak sayfa.asp?id=1 ‘i kendi amaçları doğrultusunda değiştiren kişiler kalıcı sorunlara neden olabilir.Bu olayı engellemenin birkaç yolu var. En basit olan yöntem isnumeric yöntemidir. Bu kod gelen verinin sayı olup olmadığını kontrol eder. böylece sayı haricinde birşey gelirse hata verdirebilir veya hiçbir işlem yapmadan sayfayı yönlendirebilirsiniz.
<%id=request.querystring(“id”)if isnumeric(id)=false thenresponse.write “hatalı istek”response.endend if%>
Diğer bir yöntem replace yöntemidir. Aşağıdaki kodlarla gelen veriyi istediğiniz doğrultuda değiştirebilir ve filtreleyebilirsiniz. Mesela kullanıcı size sayfa.asp?id=<script> şeklinde bir veri gönderdiyse siz bunu replace komutu ile değiştirebilirsiniz.
Önce replace fonksiyonunu vereyim.<%function koru(kelime)kelime=replace(kelime, “<" , "" )kelime=replace(kelime, "<script>" , "" )koru=kelimeend function%>
bu kodlarla eğer id olarak < veya <script> gelirse bu verileri boşluğa çevir komutu verdik. hemen ardından da request nesnemize bu fonksiyonu ekliyoruz.<% id=koru(request.querystring(“id”))%>
böylece sql injection sorununu çözmüş olduk. amatör programcılar arasında bolca sözü geçen ‘or’ açığı da bu yöntemle çözülür. mantık aynıdır. replace komutu ile işaretlerini sildirirseniz problem ortadan kalkar.