PHP mysql_real_escape_string() συνάρτηση

Ορισμός και χρήση

Η συνάρτηση mysql_real_escape_string() μετατρέπει τους ειδικούς χαρακτήρες στις字符串 που χρησιμοποιούνται στις SQL ερωτήσεις.

Οι εξής χαρακτήρες επηρεάζονται:

  • \x00
  • \n
  • \r
  • \
  • '
  • "
  • \x1a

If successful, the function returns the escaped string. If failed, it returns false.

Syntax

mysql_real_escape_string(string,connection)
Parameters Description
string Required. Ορίζει τη字符串 που πρέπει να μετατραπεί.
connection Οptional. Ορίζει τη σύνδεση MySQL. Αν δεν οριστεί, χρησιμοποιείται η προηγούμενη σύνδεση.

Περιγραφή

Αυτή η συνάρτηση θα string με τη μετατροπή των ειδικών χαρακτήρων και με λήψη της τρέχουσας χαρακτήρας συλλογής της σύνδεσης, οπότε μπορεί να χρησιμοποιηθεί με ασφάλεια για mysql_query().

Συμβουλές και σημειώσεις

Συμβουλή:Μπορείτε να χρησιμοποιήσετε αυτή τη συνάρτηση για να προλάβετε επιθέσεις βάσης δεδομένων.

Παράδειγμα

Παράδειγμα 1

<?php
$con = mysql_connect("localhost", "hello", "321");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }
// Κώδικας για την απόκτηση ονόματος χρήστη και κωδικού πρόσβασης
// Μετατροπή του ονόματος χρήστη και του κωδικού πρόσβασης, ώστε να χρησιμοποιηθούν στη SQL
$user = mysql_real_escape_string($user);
$pwd = mysql_real_escape_string($pwd);
$sql = "SELECT * FROM users WHERE
user='" . $user . "' AND password='" . $pwd . "'"
// Πολλοπλασιασμός κώδικα
mysql_close($con);
?>

Παράδειγμα 2

Επιθέσεις βάσης δεδομένων. Αυτό το παράδειγμα δείχνει τι θα συμβεί αν δεν εφαρμόσουμε τη συνάρτηση mysql_real_escape_string() στους χρήστη και τον κωδικό πρόσβασης:

<?php
$con = mysql_connect("localhost", "hello", "321");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }
$sql = "SELECT * FROM users
WHERE user='{$_POST['user']}'
AND password='{$_POST['pwd']}'"
mysql_query($sql);
// Δεν ελέγχεται το όνομα χρήστη και ο κωδικός πρόσβασης
// Μπορεί να είναι οποιοδήποτε περιεχόμενο εισαγωγής χρήστη, όπως:
$_POST['user'] = 'john';
$_POST['pwd'] = '" OR ''='";
// Κάποιο κώδικας...
mysql_close($con);
?>

τότε η ερώτηση SQL θα γίνει ως εξής:

SELECT * FROM users
WHERE user='john' AND password='' OR ''=''

Αυτό σημαίνει ότι οποιοσδήποτε χρήστης μπορεί να συνδεθεί χωρίς να εισάγει νόμιμο κωδικό πρόσβασης.

Παράδειγμα 3

Καλή πρακτική για την πρόληψη επιθέσεων βάσης δεδομένων:

<?php
function check_input($value)
{
// Αφαίρεση των μονοπατιών
if (get_magic_quotes_gpc())
  {
  $value = stripslashes($value);
  }
// Αν δεν είναι αριθμός, προσθέστε εισαγωγικά
if (!is_numeric($value))
  {
  $value = "'" . mysql_real_escape_string($value) . "'";
  }
return $value;
}
$con = mysql_connect("localhost", "hello", "321");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }
// Ασφαλής 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);
?>