PHP mysql_real_escape_string() functie
Definitie en gebruik
De mysql_real_escape_string() functie ontsnapt speciale tekens in de tekenreeks die in de SQL-uitvoer worden gebruikt.
De volgende tekens zijn beïnvloed:
- \x00
- \n
- \r
- \
- '
- "
- \x1a
Als het succesvol is, retourneert deze functie de geëscaped tekenreeks. Als het mislukt, retourneert het false.
Syntax
mysql_real_escape_string(string,connection)
Parameters | Beschrijving |
---|---|
string | Verplicht. Bepaal de te ontsnappen tekenreeks. |
connection | Optioneel. Bepaal de MySQL-verbinding. Als dit niet wordt opgegeven, wordt de vorige verbinding gebruikt. |
Beschrijving
Deze functie zal string van speciale tekens ontsnappen, en rekening houdend met de huidige character set van de verbinding, kan het veilig worden gebruikt voor mysql_query().
Tips en opmerkingen
Tips:Men kan deze functie gebruiken om database-aanvallen te voorkomen.
Voorbeeld
Voorbeeld 1
<?php $con = mysql_connect("localhost", "hello", "321"); if (!$con) { die('Kon niet verbinden: ' . mysql_error()); } // Code om gebruikersnaam en wachtwoord te verkrijgen // Escape gebruikersnaam en wachtwoord om ze in SQL te gebruiken $user = mysql_real_escape_string($user); $pwd = mysql_real_escape_string($pwd); $sql = "SELECT * FROM users WHERE user='" . $user . "' AND password='" . $pwd . "'" // Meer code mysql_close($con); ?>
Voorbeeld 2
Database-aanval. Dit voorbeeld demonstreert wat er gebeurt als we mysql_real_escape_string() functie niet toepassen op gebruikersnaam en wachtwoord:
<?php $con = mysql_connect("localhost", "hello", "321"); if (!$con) { die('Kon niet verbinden: ' . mysql_error()); } $sql = "SELECT * FROM users WHERE user='{$_POST['user']}' AND password='{$_POST['pwd']}'"; mysql_query($sql); // Controleert niet de gebruikersnaam en het wachtwoord // Kan elke inhoud van de gebruikersinvoer zijn, bijvoorbeeld: $_POST['user'] = 'john'; $_POST['pwd'] = "' OR ''='"; // Enkele code... mysql_close($con); ?>
dan dan SQL zoekopdracht zal zo worden:
SELECT * FROM users WHERE user='john' AND password='' OR ''=''
Dit betekent dat gebruikers geen geldig wachtwoord hoeven in te voeren om in te loggen.
Voorbeeld 3
Correcte manier om database-aanvallen te voorkomen:
<?php function check_input($value) { // Verwijder backslashes if (get_magic_quotes_gpc()) { $value = stripslashes($value); } // Als het niet een getal is, voeg dan aanhalingstekens toe if (!is_numeric($value)) { $value = "'" . mysql_real_escape_string($value) . "'"; } return $value; } $con = mysql_connect("localhost", "hello", "321"); if (!$con) { die('Kon niet verbinden: ' . mysql_error()); } // Voer een veilige 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); ?>