mysql_escape_string? hvorfor?

Tags:    databaser

$variabel = mysql_escape_string($_GET['variabel']);

hvorfor skrive det sådan istedet for sådan:
$variabel = $_GET['variabel'];
?



5 svar postet i denne tråd vises herunder
3 indlæg har modtaget i alt 3 karma
Sorter efter stemmer Sorter efter dato
mysql_escape_string sørger for at at det variabel du kører funktionen på kan sættes ind i et query uden at risikere at det indeholder specielt formateret tekst som f.eks. kunne slette alt hvad databasen indeholder.

Dette vil normalt blive taget af php's magic_quotes_gpc (hvis det er slået til) så det er sådan set bare en ekstra sikkerhed.

I øvrigt er mysql_escape_string deprecated og du skal derfor bruge mysql_real_escape_string da den anden sansynligvis vil blive fjernet på et tidspunkt.



Indlæg senest redigeret d. 09.03.2007 08:17 af Bruger #3275
$variabel = mysql_escape_string($_GET['variabel']);

hvorfor skrive det sådan istedet for sådan:
$variabel = $_GET['variabel'];
?


Det er en meget stor sikkerhedsrisiko at lade være, da det åbner for muligheden for såkaldte SQL injections.

Læs bl.a. om sikkerhed på HachThisSite.org http://www.hackthissite.org/articles/read/45 eller PHP Security Consortiums hjemmeside http://phpsec.org/projects/guide/3.html#3.2.

Dette vil normalt blive taget af php's magic_quotes_gpc ...


MySQLs escape-funktion frigør alle tegn med speciel betydning i databasen. Det er ikke kun enkelte og dobbelte anførselstegn, som er de eneste, der udgør en sikkerhedsrisiko - andre tegn udgør risiko for fejl i databasen.

I øvrigt er mysql_escape_string deprecated og du skal derfor bruge mysql_real_escape_string da den anden sansynligvis vil blive fjernet på et tidspunkt.


Jeg kan varmt anbefale at bruge den objektorienterede fremgangsmåde med MySQL http://dk2.php.net/mysqli. Der er automatisk escape-funktion på alle forespørgsler.



Indlæg senest redigeret d. 09.03.2007 08:40 af Bruger #6653
Kristian, den er allerede fjernet fra den nyeste version af php ;)



Dette vil normalt blive taget af php's magic_quotes_gpc ...


MySQLs escape-funktion frigør alle tegn med speciel betydning i databasen. Det er ikke kun enkelte og dobbelte anførselstegn, som er de eneste, der udgør en sikkerhedsrisiko - andre tegn udgør risiko for fejl i databasen.


Derudover skal det siges at alle typer magic_quotes vil blive fjernet når engang PHP6 kommer ud, og det ville derfor være dumt at skrive scripts som på nogen måde udnytter magic quotes.



[...]alle typer magic_quotes vil blive fjernet når engang PHP6 kommer ud[...]


Det er efter min mening et positivt fremskridt. Forsvinder register_globals også?



t