PHP mysql_real_escape_string() funktion
Definition og brug
mysql_real_escape_string() funktionen oversætter specialtegnene i strengen, der bruges i SQL-udtrykket.
Følgende tegn påvirkes:
- \x00
- \n
- \r
- \
- '
- "
- \x1a
Hvis succesfuld, returnerer funktionen den oversatte streng. Hvis fejlagtig, returneres false.
Syntaks
mysql_real_escape_string(string,connection)
Parameter | Beskrivelse |
---|---|
string | Obligatorisk. Angiver strengen, der skal oversættes. |
connection | Valgfri. Angiver MySQL-forbindelse. Hvis ikke angivet, bruges den forrige forbindelse. |
Beskrivelse
Denne funktion vil string med specialtegnene oversættes, og tager højde for den nuværende tegnsæt, så den kan bruges sikkert til mysql_query().
Vedligeholdelse og kommentarer
Vedligeholdelse:Man kan bruge denne funktion til at forhindre databaseangreb.
Eksempel
Eksempel 1
<?php $con = mysql_connect("localhost", "hello", "321"); if (!$con) { die('Could not connect: ' . mysql_error()); } // Kode til at få brugernavn og adgangskode // Escaper brugernavn og adgangskode, så de kan bruges i SQL $user = mysql_real_escape_string($user); $pwd = mysql_real_escape_string($pwd); $sql = "SELECT * FROM users WHERE user='" . $user . "' AND password='" . $pwd . "'" // Mere kode mysql_close($con); ?>
Eksempel 2
Databaseangreb. Dette eksempel viser, hvad der kan ske, hvis vi ikke anvender mysql_real_escape_string() funktionen på brugernavn og adgangskode:
<?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); // KONTrollerer ikke brugernavn og adgangskode // Kan være enhver indtastning fra brugeren, f.eks.: $_POST['user'] = 'john'; $_POST['pwd'] = "' OR ''='"; // Nogle kode... mysql_close($con); ?>
Så vil SQL-forespørgsel blive som denne:
SELECT * FROM users WHERE user='john' AND password='' OR ''=''
Dette betyder, at enhver bruger kan logge ind uden at skulle indtaste et gyldigt password.
Eksempel 3
Korrekt praksis for at forhindre databaseangreb:
<?php function check_input($value) { // Fjern skråstreg if (get_magic_quotes_gpc()) { $value = stripslashes($value); } // Hvis det ikke er et tal, tilføj citationstegn 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()); } // Udfør sikker 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); ?>