Parametreli SQL sorgularının, kullanıcı girdisi içeren sorguları oluştururken kullanıcı girişini sterilize etmenin en iyi yolu olduğunu anlıyorum, ancak kullanıcı girdisi alarak ve tek tırnaklardan kaçarak ve tüm dizeyi tek tırnaklarla çevreleyende neyin yanlış olduğunu merak ediyorum. İşte kod:
sSanitizedInput = "'" & Replace(sInput, "'", "''") & "'"
Kullanıcının girdiği herhangi bir tek tırnak, kullanıcının dizeyi bitirme yeteneğini ortadan kaldıran çift tek tırnakla değiştirilir, böylece noktalı virgül, yüzde işareti vb. Yazabilecekleri her şey dizenin bir parçası olur ve aslında komutun bir parçası olarak yürütülmez.
Biz tek tırnak tek dize sınırlayıcı ve dize sınırlayıcı kaçmak için tek yol olduğuna inanıyorum Microsoft SQL Server 2000 kullanıyoruz, bu yüzden kullanıcı yazdığı bir şey yürütmek için hiçbir yolu yoktur.
Buna karşı bir SQL enjeksiyon saldırısı başlatmanın herhangi bir yolunu görmüyorum, ancak bu bana göründüğü kadar kurşun geçirmez olsaydı, başka birinin zaten bunu düşüneceğini ve yaygın bir uygulama olacağını fark ediyorum.
Bu kodda yanlış olan ne? Bu sanitizasyon tekniğini geçmiş bir SQL enjeksiyon saldırısı almanın bir yolu var mı? Bu tekniği kullanan örnek kullanıcı girişi çok yardımcı olacaktır.
GÜNCELLEME:
Hala bu koda karşı etkili bir SQL enjeksiyon saldırı başlatmak için herhangi bir yol bilmiyorum. Birkaç kişi, ters eğik çizginin bir tek tırnaktan kaçacağını ve dizenin geri kalanının SQL komutunun bir parçası olarak yürütülmesini sağlamak için diğerini bırakacağını ve bu yöntemin SQL içine enjekte etmek için çalışacağını fark ettim. bir MySQL veritabanı, ancak SQL Server 2000'de tek bir alıntıdan kaçmanın tek yolu (bulabildiğim) başka bir tek alıntıdır; ters eğik çizgiler bunu yapmayacak.
Ve tek tırnaktan kaçmayı durdurmanın bir yolu yoksa, kullanıcı girdisinin geri kalanının hiçbiri yürütülmeyecektir, çünkü hepsi bir bitişik dize olarak alınacaktır.
Girdiyi sterilize etmenin daha iyi yolları olduğunu anlıyorum, ancak yukarıda verdiğim yöntemin neden işe yaramadığını öğrenmekle daha çok ilgileniyorum. Herkes bu sanitizasyon yöntemine karşı bir SQL enjeksiyon saldırısı monte etmek için herhangi bir özel yol biliyorsa ben görmek isterim.