PHP Manualen
forrige |  | næste

# mysql_real_escape_string

(PHP 4 >= 4.3.0, PHP 5)

mysql_real_escape_string -- Sikrer special karakterer i en streng, til brug i en MySQL erklæring

## Beskrivelse

string mysql_real_escape_string ( string unescaped_string [, resource link_identifier] )

unescaped_string

  Strengen du vil sikre

link_identifier (valgfri)

  MySQL forbindelsen

Funktionen vil sikre specielle karakterer, i unescaped_string, den tager det nuværende karakter sæt, for forbindelsen, i betragtning, så den er sikker at bruge sammen med mysql_query(). hvis det er binært data du vil indsætte, skal du bruge denne funktion.

mysql_real_escape_string() kalder MySQLs biblioteks funktion mysql_escape_string, hvilket tilføjer en skråstreg, til følgende karakterer: NULL, \x00, \n, \r, \, ', " og \x1a.

Eksempel 1. Et mysql_real_escape_string() eksempel

`<?php // Connect $link = mysql_connect('mysql_host', 'mysql_bruger', 'mysql_kode') OR die(mysql_error()); // Query $query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'", mysql_real_escape_string($user), mysql_real_escape_string($password)); ?>`

Denne funktion, skal altis bruges (med få undtagelser), for at gøre dine data sikre, før de bliver sendt i en forespørgsel til MySQL.

> Bemærk: Hvis magic_quotes_gpc er aktiveret, bør du først køre strengen gennem stripslashes(). Brugen af denne funktion, på data der allerede er sikret, vil sikre den dobbelt.

Hvis denne funktion ikke bliver brugt, er forespørgslen, sårbar, overfor SQL Indsættelses Angreb.

Eksempel 2. Et eksempel på SQL Indsættelses angreb

`<?php
// Forespørg databasen, om der er lignende brugere
$query = "SELECT * FROM users WHERE user='{$_POST['username']}' AND password='{$_POST['password']}'";
mysql_query($query);
// Vi tjekkede ikke $_POST['password'], det kunne være hvad som helst, brugeren ønskede, f.eks.:
$_POST['username'] = 'aidan';
$_POST['password'] = "' OR ''='";
// Det betyder, at forespørgslen der bliver sendt til MySQL, er:
echo $query;
?>`

Forespørgslen til MySQL:

    SELECT * FROM users WHERE name='aidan' AND password='' OR ''=''

Det vil tillade alle, at logge ind, uden en gyldigt kode.

Eksempel 3. En "God Træning" forespørgsel

Ved brug af mysql_real_escape_string() omkring hver variabel, vil det forebygge SQL Indsættelser. Det demonstrerer brugen af "God Træning" metode, for forespørgsler til en database, der er ligeglad, med Magic Quotes instillinger.

`<?php
// Gør en variabel sikker
function quote_smart($value)
{
// Stripslashes
if (get_magic_quotes_gpc()) {
$value = stripslashes($value);
}
// Quote hvis det ikke er et heltal
if (!is_numeric($value)) {
$value = "'" . mysql_real_escape_string($value) . "'";
}
return $value;
}
// Forbind
$link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password')
OR die(mysql_error());
// Lav en sikekr forespørgsel
$query = sprintf("SELECT * FROM users WHERE user=%s AND password=%s",
quote_smart($_POST['username']),
quote_smart($_POST['password']));
mysql_query($query);
?>`

Forespørgslen vil nu eksekvere korrekt, og SQL Indsættelses angreb, vil ikke virke.

> Bemærk: mysql_real_escape_string() fjerne ikke % og _. Disse er jokertegn i MySQL, hvis de er kombineret med LIKE, GRANT, eller REVOKE.

Se også mysql_client_encoding(), addslashes(), stripslashes(), magic_quotes_gpc, og magic_quotes_runtime direktivet.

forrige | hjem | næste
mysql_query | op | mysql_result