ersetzt strip_tags mysql_(real_)escape_string?

ersetzt strip_tags mysql_(real_)escape_string?

am 02.07.2005 12:28:21 von Marko Faldix

Hallo,

hier kommt gerade die Frage auf, ob zum Schutz vor mysql-Injection bereits
ein Filtern der relevanten Variablen im SQL-Statement mit der Funktion
strip_tags bereits genügt. Ich glaube nein, aber wie kann ich für
zusätzliche Anwendung von mysql_escape_string oder mysql_real_escape_string
argumentieren?

Gruß.

Re: ersetzt strip_tags mysql_(real_)escape_string?

am 02.07.2005 13:21:15 von Niels Braczek

Marko Faldix schrieb:

> hier kommt gerade die Frage auf, ob zum Schutz vor mysql-Injection bereits
> ein Filtern der relevanten Variablen im SQL-Statement mit der Funktion
> strip_tags bereits genügt. Ich glaube nein, aber wie kann ich für
> zusätzliche Anwendung von mysql_escape_string oder mysql_real_escape_string
> argumentieren?

Nicht *zusätzlich*. Und schon allein die Tatsache, dass sich dir diese
Frage stellt, zeigt, dass man mysql_real_escape_string() dafür verwenden
soll. Erstens dokumentiert es besser, dass der String für den Transport
in die Datenbank aufbereitet wird, zweitens tut die Funktion alles
Nötige, damit dieser Transport klappt (sie berücksichtigt zB. den
aktuellen Zeichensatz).

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: ersetzt strip_tags mysql_(real_)escape_string?

am 02.07.2005 14:57:14 von Uli Honal

Niels Braczek wrote:
> Marko Faldix schrieb:
>
>
>>hier kommt gerade die Frage auf, ob zum Schutz vor mysql-Injection bereits
>>ein Filtern der relevanten Variablen im SQL-Statement mit der Funktion
>>strip_tags bereits genügt. Ich glaube nein, aber wie kann ich für
>>zusätzliche Anwendung von mysql_escape_string oder mysql_real_escape_string
>>argumentieren?
>
>
> Nicht *zusätzlich*. Und schon allein die Tatsache, dass sich dir diese
> Frage stellt, zeigt, dass man mysql_real_escape_string() dafür verwenden
> soll. Erstens dokumentiert es besser, dass der String für den Transport
> in die Datenbank aufbereitet wird, zweitens tut die Funktion alles
> Nötige, damit dieser Transport klappt (sie berücksichtigt zB. den
> aktuellen Zeichensatz).
>
> MfG
> Niels
>

Das eine hat doch mit dem anderen nichts zu tun? strip_tags() entfernt
HTML-Tags [1], mysql_real_escape_string() maskiert Zeichen, die in SQL
eine spezielle Bedeutung haben [2]. Dazu gehören u.a. String-Delimiter
(einfache Anführungszeichen).

Also wenn, dann *unbedingt zusätzlich*.

(Niels, kann es sein, dass Du bei Deiner Antwort eher an addslashes()
gedacht hast?)

Grundsätzlich muss jeder unbekannte Wert, den Du in eine SQL-Query
einsetzt mit z.B. mysql_real_escape_string() behandelt werden, um
SQL-Injection zu verhindern. Ob Du vorher noch HTML-Tags filtern willst,
ist davon unabhängig, das kommt auf Deine Anwendung an.

Die Gefahr, die von HTML-Tags ausgeht (wenn Du sie dann wieder ausgibts)
ist ein anderes Thema, Stichwort Cross-Site-Scripting (XSS).

Marko, lies doch mal den PHP Security Guide [3].

cheers,

-Uli.

[1] http://php.net/strip_tags
[2] http://php.net/mysql_real_escape_string
[3] http://phpsec.org/projects/guide/

Re: ersetzt strip_tags mysql_(real_)escape_string?

am 02.07.2005 18:32:40 von Niels Braczek

Uli Honal schrieb:
> Niels Braczek wrote:
>> Marko Faldix schrieb:
>>
>>> [Filtern mit strip_tags() oder mysql_real_escape_string()]
>>
>> Nicht *zusätzlich*. Und schon allein die Tatsache, dass sich dir diese
>> Frage stellt, zeigt, dass man mysql_real_escape_string() dafür verwenden
>> soll. Erstens dokumentiert es besser, dass der String für den Transport
>> in die Datenbank aufbereitet wird, zweitens tut die Funktion alles
>> Nötige, damit dieser Transport klappt (sie berücksichtigt zB. den
>> aktuellen Zeichensatz).

> (Niels, kann es sein, dass Du bei Deiner Antwort eher an addslashes()
> gedacht hast?)

Oops... erwischt! Durch die Fragestellung "strip_tags() oder
mysql_real_escape_string()" habe ich mich verwirren lassen. Eine Frage
wie: "Autobahn oder Käse?", in die ich wohl unbewusst einen Sinn
interpretieren wollte.

Danke für's Aufpassen!
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 |
`----------------------------------------------------------- -----´