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