PHP mysql_real_escape_string() fonksiyonu
Tanım ve Kullanım
mysql_real_escape_string() fonksiyonu, SQL ifadesinde kullanılan dizesindeki özel karakterleri escape eder.
Etkilenen karakterler şunlardır:
- \x00
- \n
- \r
- \
- '
- "
- \x1a
Başarılı olursa, bu fonksiyon escape edilmiş dizesi döner. Başarısız olursa, false döner.
Sözdizimi
mysql_real_escape_string(string,bağlantı)
Parametreler | Açıklama |
---|---|
string | Gerekli. Escape edilecek dizesi belirler. |
bağlantı | Opsiyonel. MySQL bağlantısını belirler. Belirlenmezse, bir önceki bağlantı kullanılır. |
Açıklama
Bu fonksiyon string dindeki özel karakterlerin escape edilmesi ve bağlantının mevcut karakter setine dikkat edilmesi, bu nedenle güvenli bir şekilde kullanılabilir mysql_query().
İpuçları ve açıklamalar
İpucu:Bu fonksiyonu kullanarak veritabanı saldırılarını önleyebilirsiniz.
Örnek
Örnek 1
<?php $con = mysql_connect("localhost", "hello", "321"); if (!$con) { die('Bağlantı kurulumu başarısız: ' . mysql_error()); } // Kullanıcı adı ve parola alımı kodu // Kullanıcı adı ve parolayı SQL'de kullanmak için escape etme $user = mysql_real_escape_string($user); $pwd = mysql_real_escape_string($pwd); $sql = "SELECT * FROM users WHERE user='" . $user . "' AND password='" . $pwd . "'" // Daha fazla kod mysql_close($con); ?>
Örnek 2
Veritabanı saldırısı. Bu örnek, kullanıcı adı ve parolaya mysql_real_escape_string() fonksiyonunu uygulamazsak ne olacağını gösterir:
<?php $con = mysql_connect("localhost", "hello", "321"); if (!$con) { die('Bağlantı kurulumu başarısız: ' . mysql_error()); } $sql = "SELECT * FROM users WHERE user='{$_POST['user']}' AND password='{$_POST['pwd']}'"; mysql_query($sql); // Kullanıcı adı ve parola kontrol edilmez // Kullanıcı girdisi olabilecek herhangi bir içerik olabilir, örneğin: $_POST['user'] = 'john'; $_POST['pwd'] = '" OR ''='"; // Bazı kodlar... mysql_close($con); ?>
O zaman SQL sorgusu şu şekilde olacaktır:
SELECT * FROM users WHERE user='john' AND password='' OR ''=''
Bu, herhangi bir kullanıcıya geçerli bir parola girmeksizin giriş yapabileceği anlamına gelir.
Örnek 3
Veritabanı saldırısını önlemek için doğru yöntem:
<?php function check_input($value) { // Çapraz çizgileri kaldırın if (get_magic_quotes_gpc()) { $value = stripslashes($value); } // Sayı değilse çift tırnak ekleyin if (!is_numeric($value)) { $value = "'" . mysql_real_escape_string($value) . "'"; } return $value; } $con = mysql_connect("localhost", "hello", "321"); if (!$con) { die('Bağlantı kurulumu başarısız: ' . mysql_error()); } // Güvenli SQL $user = check_input($_POST['user']); $pwd = check_input($_POST['pwd']); $sql = "SELECT * FROM users WHERE user=$user AND password=$pwd"; mysql_query($sql); mysql_close($con); ?>