PHP mysql_real_escape_string auf alle POSt und GET

txc

New Member
Hallo,

spricht eigentlich was dagegen mysql_real_escape_string direkt auf alle POST und get variablen auszuführen weil wenn ich bei jeder POST Variable noch mysql_real_escape_string ausführe wird der Quellcode unübersichtlicher und es nachträglich noch überall einzufügen bedeutet einen großen Aufwand.
Spricht also was dagegen folgendes direkt am Start auszuführen?


foreach ($_POST as $key => $value) {
$_POST[$key] = mysql_real_escape_string($value);
}
foreach ($_GET as $key => $value) {
$_GET[$key] = mysql_real_escape_string($value);
}
 
Prinzipiell macht es ein wenig mehr DB Last. Wenn du höher skalierst könnte es durchaus ein "Bottleneck" werden.

Das kommt natürlich auch das Einsatzgebiet der Anwendung an.

Wie filterst du denn sonst noch ids und text?

Hat hier eigentlich einer einen definitiven Link zu guten Infos?

Lande nur auf komischen Seiten *g*
 
Derzeit filtere ich noch nichts (gut das Script ist ja noch in der Entwicklung).
Wenn ich bei jeden Select Befehl das nochmal ausführe bedeutet dies bei der Verwendung mehrere Selects natürlich dann aber noch mehr Last da ja ide Variable eigentlich nur einmal "umgewandelt" werden muss.
 
Wenn das Skript gerade in der Entwicklung ist, bietet es sich an, es gleich richtig zu machen. Soll heißen: PDO, PHP Filter Extension und im Fall der SQL-Queries Prepared Statements nutzen.
 
@Roger Wilco: danke für die INFOS

Soll heißen: PDO, PHP Filter Extension und im Fall der SQL-Queries Prepared Statements nutzen.
PDO: Würde ich gerne aber die PHP Extension ist derzeit noch nicht bei jedem Webspace Anbieter aktiviert. Da ich schon einiges realisiert wurde nehme ich mir dies zu einem späteren Zeitpunkt vor.

PHP Filter Extension: Ich sehe hier noch direkt keinen Vorteil dieses zu verwenden. Da wenn ich prüfen möchte ob ein Wert ein int
ist verwende ich einfach is_int. Wo ist der Vorteil?


Prepared Statements: Ist dies nicht eine Teil von PDO?

Mit den Prepared Statements habe ich doch dann auch nicht mehr das SQL INJECTION Problem da die Variablen ja im Nachhinein erst durch die Klasse eingefügt werden? Ist an sich eine sehr schöne Sache und dadurch das bei mir grundsätzlich alle SQL Abfragen in Klassen sind werde ich dies auch umsetzen.

Derzeit verwende ich noch
SELECT user_id,password username FROM user WHERE username = '".$_POST['username']"'";

Aber grundsätzlich sollte mysql_real_escape_string auf alle POSt und GET ausreichen?
 
Last edited by a moderator:
PDO: Würde ich gerne aber die PHP Extension ist derzeit noch nicht bei jedem Webspace Anbieter aktiviert. Da ich schon einiges realisiert wurde nehme ich mir dies zu einem späteren Zeitpunkt vor.

Darüber würde ich mir recht wenig gedanken machen. PDO ist seit php5 das standard datenbank interface und sollte bei jedem guten Hoster aktiviert sein.
Wenn nicht, sind die User sellber schuld sich so einem Hoster anzuvertrauen.
 
PHP Filter Extension: Ich sehe hier noch direkt keinen Vorteil dieses zu verwenden. Da wenn ich prüfen möchte ob ein Wert ein int
ist verwende ich einfach is_int. Wo ist der Vorteil?
Man munkelt, dass manche Webanwendungen auch komplexere Prüfungen durchführen. ;)

Desweiteren kann das filter-Framework Eingaben auch bereinigen und nicht nur prüfen.

Schau dir einfach mal die Beispiele aus der Dokumentation an: http://php.net/manual/filter.examples.php

Prepared Statements: Ist dies nicht eine Teil von PDO?
Nein. Das ist ein Feature des jeweiligen Datenbanksystems.

Aber grundsätzlich sollte mysql_real_escape_string auf alle POSt und GET ausreichen?
Naja, ich würde mich nicht unbedingt darauf verlassen. Mit den Prepared Statements ist dem Datenbanksystem zumindest klar, dass die Parameter nur ein Datenwert sind und kein beliebiger Teil des SQL-Queries.

Mal ganz davon abgesehen, dass Prepared Statements auch einen gewissen Performanzvorteil bringen können.
 
Back
Top