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);
?>