mysql_escape_string() und addslashes
mysql_escape_string() und addslashes
am 14.09.2005 03:22:29 von Tim Gersken
Moin!
Hab da mal eine grundlegende Frage zu MySQL in Verbindung mit PHP.
Wenn ich Formulardaten in eine Tabelle einfüge, muss ich bei Textfeld-
und Textarea-Werten nun addslashes(), mysql_escape_string() oder beides
machen? Wenn beides, in welcher Reihenfolge. Oder gibt es gar noch
andere Funktionen, welche ich zur Sicherheit anwenden soll?
MfG
TiGer
Re: mysql_escape_string() und addslashes
am 14.09.2005 03:28:10 von Niels Braczek
Tim Gersken schrieb:
> Hab da mal eine grundlegende Frage zu MySQL in Verbindung mit PHP.
> Wenn ich Formulardaten in eine Tabelle einfüge, muss ich bei Textfeld-
> und Textarea-Werten nun addslashes(), mysql_escape_string() oder beides
> machen? Wenn beides, in welcher Reihenfolge. Oder gibt es gar noch
> andere Funktionen, welche ich zur Sicherheit anwenden soll?
Die richtige Funktion dafür ist mysql_real_escape_string(). Die tut
alles, was nötig ist.
MfG
Niels
--
| http://www.kolleg.de · Das Portal der Kollegs in Deutschland |
| http://www.bsds.de · BSDS Braczek Software- und DatenSysteme |
| Webdesign · Webhosting · E-Commerce · Mambo Content Management |
`----------------------------------------------------------- -----´
Re: mysql_escape_string() und addslashes
am 14.09.2005 03:58:48 von Tim Gersken
Niels Braczek schrieb:
> Die richtige Funktion dafür ist mysql_real_escape_string(). Die tut
> alles, was nötig ist.
Und wie wende ich diese richtig an?
$conn_id = mysql_connect($host,$id,$pw);
mysql_select_db($database,$conn_id);
mysql_query("INSERT INTO foo (bla) VALUES
mysql_real_escape_string($conn_id, 'bar')");
So?
Re: mysql escape string() und addslashes
am 14.09.2005 04:27:01 von Carsten Wiedmann
Tim Gersken schrieb:
> Niels Braczek schrieb:
>
> > Die richtige Funktion dafür ist mysql_real_escape_string(). Die
> > tut alles, was nötig ist.
>
> Und wie wende ich diese richtig an?
Da frägt man sich, zuwas es im PHP-Manual zu jeder Funktion Beispiele
gibt?
BTW:
Wenn das Query schon ausgeführt wurde, gibt es nichts mehr zu escapen
(um das Query zu "entschärfen").
Gruß
Carsten
Re: mysql escape string() und addslashes
am 14.09.2005 04:34:56 von Tim Gersken
Carsten Wiedmann schrieb:
> BTW:
> Wenn das Query schon ausgeführt wurde, gibt es nichts mehr zu escapen
> (um das Query zu "entschärfen").
Wer wendet es denn nach dem Query an??
Und reicht mysql_real_escape_string() wirklich?
% und _ werden schließlich nicht maskiert.
Was aber, wenn mein Text genau diese enthält?
Re: mysql escape string() und addslashes
am 14.09.2005 04:53:25 von Carsten Wiedmann
Tim Gersken schrieb:
> > Wenn das Query schon ausgeführt wurde, gibt es nichts mehr zu
> > escapen (um das Query zu "entschärfen").
>
> Wer wendet es denn nach dem Query an??
Ups, hätte ich den Code beim Zitieren nicht weglassen dürfen:
> Tim Gersken schrieb:
>
> > $conn_id = mysql_connect($host,$id,$pw);
> > mysql_select_db($database,$conn_id);
Jetzt erst das Query:
> > mysql_query("INSERT INTO foo (bla) VALUES
Und dann das escapen:
> > mysql_real_escape_string($conn_id, 'bar')");
> Und reicht mysql_real_escape_string() wirklich?
> % und _ werden schließlich nicht maskiert.
> Was aber, wenn mein Text genau diese enthält?
Das wäre, wenn überhaupt, nur ein Problem, wenn das bei einem
Stringvergleich mit Hilfe von einem Mustervergleich (pattern matching)
benutzt wird. Ansonsten sind das einfach nur diese Zeichen.
Würdest du diese Zeichen in einem einfachen String benutzen und dann so
escapen, hättest du hinterher 2 Zeichen...
In welchem Kontext du das benutzt, kann mysql_real_escape_string() aber
nicht wissen.
Gruß
Carsten
Re: mysql escape string() und addslashes
am 14.09.2005 05:01:47 von Tim Gersken
Carsten Wiedmann schrieb:
> Tim Gersken schrieb:
>
>
>>>Wenn das Query schon ausgeführt wurde, gibt es nichts mehr zu
>>>escapen (um das Query zu "entschärfen").
>>
>>Wer wendet es denn nach dem Query an??
>
>
> Ups, hätte ich den Code beim Zitieren nicht weglassen dürfen:
>
>>Tim Gersken schrieb:
>>
>>
>>>$conn_id = mysql_connect($host,$id,$pw);
>>>mysql_select_db($database,$conn_id);
>
> Jetzt erst das Query:
>
>>>mysql_query("INSERT INTO foo (bla) VALUES
>
> Und dann das escapen:
>
>>>mysql_real_escape_string($conn_id, 'bar')");
>
Da hat ein Zeilenumbruch stattgefunden.
Das war mal eine Zeile.
Re: mysql escape string() und addslashes
am 14.09.2005 05:11:49 von Carsten Wiedmann
Tim Gersken schrieb:
> Carsten Wiedmann schrieb:
> >>>mysql_query("INSERT INTO foo (bla) VALUES
> >>>mysql_real_escape_string($conn_id, 'bar')");
>
> Da hat ein Zeilenumbruch stattgefunden.
> Das war mal eine Zeile.
Ich glaub es ist doch schon etwas spät (oder früh?). Sorry, hast recht.
Beim genauem Anschauen und wo das Semikolon (+Klammern) sind hast du
recht.
Allerdings, ein String wird in SQL gequoted und die Reihenfolfe der
Parameter ist falsch. Also besser 2 Zeilen:
| $query = mysql_real_escape_string('bar', $conn_id);
| $result = mysql_query("
| INSERT INTO `foo` (`bla`)
| VALUES ('$query')
| ");
Gruß
Carsten
Re: mysql_escape_string() und addslashes
am 14.09.2005 05:39:09 von Hartmut Holzgraefe
Tim Gersken wrote:
> mysql_query("INSERT INTO foo (bla) VALUES mysql_real_escape_string($con=
n_id, 'bar')");
>=20
> So?
innerhalb von "..." führt PHP natürlich keine
Funktionen aus sondern übernimmt den Text einfach 'as is', die Param=
eter-Reihenfolge
ist
string mysql_real_escape_string ( string unescaped_string [, resource =
link_identifier] )
also wenn dann ('bar', $conn_id) und nicht ($conn_id, 'bar'), und es mach=
t nur sinn
diese mit anzugeben wenn man das bei mysql_query() auch tut, also entwede=
r:
mysql_query("INSERT INTO foo (bla) VALUES (".mysql_real_escape_string(=
'bar').")");
oder:
mysql_query("INSERT INTO foo (bla) VALUES (".mysql_real_escape_string(=
'bar', $conn_id).")", $conn_id);
--=20
Hartmut Holzgraefe, Senior Support Engineer .
MySQL AB, www.mysql.com