SORU
26 EYLÜL 2008, Cuma


Tek tırnak ile tek tırnak ve çevresindeki kullanıcı giriş kaçarak SQL Enjeksiyon karşı korumak için ne yapabilirim?

Farkındayım Bu parametre tabanlı SQL sorguları olduğunu en iyi şekilde sterilize kullanıcı giriş binası, sorgu içeren kullanıcı giriş, ama merak ediyorum nesi alarak kullanıcı giriş ve kaçan herhangi bir tek tırnak ve çevresindeki bütün dize tek tırnak. İşte kod:

sSanitizedInput = "'" & Replace(sInput, "'", "''") & "'"

Herhangi bir tek-alıntı kullanıcının girer yerine çift tek tırnak, ortadan kaldırır kullanıcıların yeteneği için son dizesi, bu yüzden başka bir şey olabilir, yazın gibi noktalı virgül, yüzde işaretleri, vb, tüm kısmında dize değil aslında yürütülen bir parçası olarak komut. Biz kullanarak Microsoft SQL Server 2000 için olan sanırım tek alıntı tek dize sınırlayıcı ve tek yolu kaçmak dize sınırlayıcı, bu yüzden bir yolu yoktur çalıştırmak için hiçbir kullanıcı türleri.

Bilmiyorum bir şekilde başlatmak için bir SQL enjeksiyon saldırısına karşı bu, ama fark ettim ki eğer bu gibi kurşun geçirmez gibi görünüyor bana başka birinin olacağını düşünmemiştim zaten ve olur yaygın bir uygulama. Benim sorum şu: bu kod ile yanlış ne? Herkes bu temizleme tekniği son SQL enjeksiyon saldırı için bir yol biliyor mu? Bu tekniği kullanan örnek kullanıcı girişi çok yararlı olacaktır.

Şimdiden teşekkürler.

GÜNCELLEME:

Teşekkürler herkese cevapları; hemen hemen tüm bilgilerim geldi araştırmama göre geldi Bu sayfa, bir yerlerde, bir ilimdir zeka ve beceri insanlar kim almış zaman onların meşgul gün için bana yardım bu soru.

Henüz cevapların hiçbirini kabul etmedim nedeni hala etkili bu kod SQL enjeksiyon karşı bir saldırı başlatmak için herhangi bir yol bilmiyorum. Bir kaç kişi önerdi bu bir ters eğik çizgi olur kaçış tek tek alıntı ve bırakın diğer son dize, böylece geri kalan dize olurdu yürütülen bir parçası olarak SQL komutu, ve fark ettim ki bu yöntem işe yaradı enjekte SQL içine bir mySQL veritabanı olarak MS SQL 2000 tek yolu (ben bulur) kaçmak için bir tek sözü ile bir tek qoute; ters yapmayacak. Ve tek alıntı bu kaçan durdurmanın bir yolu olmadığı için, kullanıcı giriş geri kalanını hiçbiri bitişik dize olarak alınır, çünkü hepsi idam edilecek.

Ama gerçekten yukarıda verilmiştir yöntem işe yaramaz neden öğrenme daha çok ilgileniyorum giriş sterilize etmek için daha iyi yollar olduğunu anlıyorum. Eğer biri belirli bir şekilde bu temizleme yöntemi karşı SQL enjeksiyon saldırısı için bilen varsa görmek isterim.

CEVAP
26 EYLÜL 2008, Cuma


Birincisi, bu çok kötü bir uygulamadır. Giriş doğrulaması her zaman gereklidir, ama aynı zamanda her zaman belli olmaz.
Daha da kötüsü, kara doğrulama her zaman sorunludur, çok daha iyi kabul/değerleri ne açıkça ve kesinlikle tanımlanması. Kuşkusuz, bu her zaman mümkündür - ama her zaman yapılması gereken bir dereceye kadar değil.
Bu konuda biraz araştırma kağıtları

Nokta, herhangi bir kara liste (çok müsamahakar beyaz listeler) atlanır. Ödevim için son halkası bile teklif kaçan bypass edilebilir durumlar gösterir.

Eğer bu durumlar sizin için geçerli değilse bile, yine de kötü bir fikir değil. Ayrıca, sürece uygulaması basit, küçük, ile başa çıkmak için bakım, ve belki bir miktar yönetişim: nasıl sağlanır onun yaptığını doğru, her yerde, her zaman?

Doğru yolu bunu yapmak için:

  • Beyaz doğrulama tipi, uzunluğu, biçimi veya kabul edilen değerler
  • Eğer kara listeye istiyorsanız, devam edin. Kaçan alıntı iyidir, ama diğer Azaltıcı Etkenler bağlamında.
  • Komut ve Parametre nesneleri, preparse ve doğrulamak için kullanın
  • Parametre tabanlı sorgular sadece Ara.
  • Daha da iyisi, Saklı Yordamları kullanın.
  • Dinamik SQL kullanmaktan kaçının ve dont dize birleştirme sorguları oluşturmak için kullanın.
  • Eğer SPs kullanıyorsanız, aynı zamanda sadece gerekli SPs yürütmek için veritabanı ve access tabloları izinleri doğrudan sınırlayabilirsiniz.
  • ayrıca kolayca tüm kod temeli sadece SPs ile DB erişimi olduğunu doğrulayın

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • iBand IguJoo

    iBand IguJoo

    25 AĞUSTOS 2006
  • MrDevin521

    MrDevin521

    18 Temmuz 2010
  • TheDigiCraft

    TheDigiCraft

    25 NİSAN 2011