Bir sorgu gönderirken ne kaçmak gerekir?

oy
18

Eğer bir SQL sorgusu çalıştırdığınızda, Dizelerinizi temizlemek zorunda veya kullanıcıların web sitenizde kötü niyetli SQL yürütebilirsiniz.

Genellikle sadece bir işlev escape_string (vesaire) vardır:

  • Kaçar (değiştirir \çift çıkar () ile \\).
  • (Tek tırnak değiştirir 'kaçan tek bir teklifle) ( \').

Bu yeterli mi? Benim kodda bir delik var mı? Benim için hızlı ve güvenilir bir şekilde yapabilirsiniz bir kütüphane var?

Ben Perl, Java ve PHP zarif çözümler görmek istiyorum.

Oluştur 05/08/2008 saat 19:45
kaynak kullanıcı
Diğer dillerde...                            


11 cevaplar

oy
7

Maksimum güvenlik, performans ve doğruluğu için hazırlanmış ifadeler kullanıyoruz. İşte PHP dahil olmak üzere farklı dilde örnekler sürü bunun nasıl açıklanmıştır:

https://stackoverflow.com/questions/1973/what-is-the-best-way-to-avoid-sql-injection-attacks

Cevap 05/08/2008 saat 20:38
kaynak kullanıcı

oy
2

Ben de bir yorum (çift çizgi) kaçacağını

--
Cevap 05/08/2008 saat 19:46
kaynak kullanıcı

oy
1

PHP kullanmak için harika bir şeydir PDO . Bu sizin SQL (ve genel olarak SQL şeyler her) sabitleme ile uğraşan dışarı varsayımları çok zaman alır. Bu SQL Enjeksiyon saldırılarını engelleyen yolunda uzun bir yol gitmek hazır deyimleri destekler.

PDO üzerinde büyük bir astar kitapta dahildir Davey Shafik vb 2 Ed PHP Anthology 101 Temel İpuçları, Püf Noktaları ve Hacks . Bir esinti öğrenme yapar ve bir referans olarak mükemmel. Hatta artık gerçek SQL Query dışında bir düşünmek gerekmez.

Cevap 05/08/2008 saat 20:28
kaynak kullanıcı

oy
0

MySQL sorgusu, bu mysql_real_escape_string tarafından kaçmış değil olduğu gibi "_" karakterlerini kaçmak için emin olun ayrıca, GİBİ kullanırken.

Başvuru için, kontrol buraya

Cevap 14/10/2008 saat 05:57
kaynak kullanıcı

oy
0

Hazırlanan ifadeler kullanın.

Cevap 16/09/2008 saat 22:14
kaynak kullanıcı

oy
0

MySQL C API vardır kendi mysql_escape_string(). Bunu kullanarak veya daha iyi olacağını eşdeğerdir.

Cevap 14/08/2008 saat 18:59
kaynak kullanıcı

oy
0

Hazırlanan / Parametreli sorgular kullanın!

Cevap 05/08/2008 saat 20:55
kaynak kullanıcı

oy
0

PHP, ben bunu kullanıyorum ve bu konuda her yorumu takdir edersiniz:

function quote_smart($valeur) 
{ 
    if (get_magic_quotes_gpc()) 
        $valeur = stripslashes($valeur); 

    if (!is_numeric($valeur)) 
        $valeur = mysql_real_escape_string($valeur); 

    return $valeur; 
}


$IdS = quote_smart($_POST['theID']); 
$sql = " 
SELECT * FROM Students 
WHERE IdStudent={$IdS}; 
";

bir saha olabilir NULL eğer bir daha doğrulama İhtiyaçları:

$picture = NULL;
$theidyouwant = 7;
$Name = 'WOOD';


if(is_null($picture)) 
    $p = 'NULL'; 
else
    $p = "'".quote_smart($picture)."'"; 

$IdS = quote_smart($theidyouwant);

$requete = "SELECT * FROM Students
    WHERE IdStudent={$IdS} AND
    PictureStudent={$p} AND
    NameStudent='{$Name}';
    ";

Yani zevk oluyor! (Post doğru # 95: & çizgi göndermek ve umuyoruz;)

Cevap 05/08/2008 saat 20:21
kaynak kullanıcı

oy
0

Sen yer tutucular hazırlanmış deyimleri kullanarak daha iyi. PHP kullanıyorsunuz, .NET ... ne olursa olsun, daha fazla güvenlik sağlayacak tablolarını, ama bir örnek sağlayabilir.

Cevap 05/08/2008 saat 19:48
kaynak kullanıcı

oy
0

Hangi dil kullanıyorsunuz? Hemen hemen hepsi yerleşik gibi kullanmak daha iyi olurdu SQL kaçış fonksiyonları görünüyor.

Örneğin, PHP sahiptir mysql_real_escape_string ve addslashes .

Cevap 05/08/2008 saat 19:46
kaynak kullanıcı

oy
-1

MySQL, parametreli sorguları destekler eğer öyleyse, bu yolu gitmek için çaba gerektiğinden emin değilim. Bu, kullanıcıların giriş zararlı bir şey yapamaz sağlayacaktır.

(;) Aksi takdirde söz olanlara ilaveten bazı "kötü" karakter noktalı virgülle olacağını ve yorumlar (- ve / * * /).

Cevap 05/08/2008 saat 19:49
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more