Bir dize mysql için backslashed olup olmadığını kontrol etmek için Fonksiyon

2 Cevap php

Ben bu regex ile nasıl yapabilirim bir dize db girmeden önce kaçtı olup olmadığını kontrol etmek için hiçbir fonksiyonu olmadığı?

$string = 'some" string';
if(!preg_match('//',$string))
{
   $string = mysqli_real_escape_string($string);
}

php manuel:

mysqli_real_escape_string ters eğik çizgi karakterleri \ r, \, ', ", ve Kontrol-Z, nul (ASCII 0) kodlanmış, \ n.

2 Cevap

Bunu yapmak için çalışmayın.

Bir dize kaçan olup olmadığını kesin olarak bilmek için bir yol ile gelip çalışırsanız, birileri sadece gelir ve algılama yöntemi aptal bir dize yapabilirsiniz.

Emin bölü kaçtı emin olmak için bir test olarak "\" kullanılır Örneğin, ben sadece size muayene geçer ama yine korkunç yanlış "'; DROP DATABASE dbname(); --\\" gibi bir dize, verebilir.

Eğer herhangi bir nedenle, dizeleri temiz olduğundan emin olmak için tek yol saklanan prosedürler ve / veya uygun parametre işleme kullanmak yapamıyorsanız her güvenilmeyen kaynak için her dize temizlemektir.

Bir dize kaçan olup olmadığını söylemek için hiçbir mantıklı yolu yoktur, çünkü bir dize kaçan olup olmadığını kontrol etmek için hiçbir işlevi yoktur.

It\'s nice

O kaçtı mı? Nasıl biliyor musunuz? Kaçmış bir kesme veya çıkmamış bir ters eğik çizgi ve kesme işareti mi?

Kaçan bir süreç değil, bir dize bir özelliğidir. Her zaman belirli bir bağlam için bir dize kaçtım olmadığını bilmek gerekir. Bunu yapmak için en iyi yolu, başka bir bağlamda için bırakın zamana kadar çiğ ve çıkmamış dizeleri tutmaktır. Aslında bir SQL string içine birleştirerek konum kadar Yani mysql_real_escape_string demiyorlar. htmlspecialchars HTML çıkışına yankılanan konum ana kadar deme.