• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Tags von globaler Variable entfernen.

Werbung:
Damit ich jetzt nicht extra einen neuen Thread eröffnen muss, stell ich die Frage wieder hier, da es eigentliche Thema anstößt.
Deshalb frage ich mal die Experten hier. Gibt es einen großen Unterschied zwischen diesen zwei Funktionen?

Code:
$foo = mysql_real_escape_string($foo);
$foo = filter_var($foo, FILTER_SANITIZE_STRING);

Wäre das doppel gemoppelt und oder Schwachsinn?
 
Werbung:
Damit ich jetzt nicht extra einen neuen Thread eröffnen muss, stell ich die Frage wieder hier, da es eigentliche Thema anstößt.
Deshalb frage ich mal die Experten hier. Gibt es einen großen Unterschied zwischen diesen zwei Funktionen?

Code:
$foo = mysql_real_escape_string($foo);
$foo = filter_var($foo, FILTER_SANITIZE_STRING);

Wäre das doppel gemoppelt und oder Schwachsinn?

Diese Funktionen haben unterschiedliche Einsatzgebiete und vor allem Ergebnisse.
mysql_real_escape_string nur für die veraltete mysql_* Extension.
filter_var unter anderem für die Validierung von Benutzereingaben. (In deinem Fall HTML entfernen)

Wenn man weiß für was man diese Funktionen verwendet, haben sie natürlich ihre Berechtigung (obwohl man heutzutage kein mysql_* mehr verwenden sollte).
Wenn man sie allerdings nur irgendwo im Code platziert, ohne zu wissen warum überhaupt, ist deren Nutzen natürlich fraglich.
 
Wenn man sie allerdings nur irgendwo im Code platziert, ohne zu wissen warum überhaupt, ist deren Nutzen natürlich fraglich.

Deswegen frage ich ja, da ich es nicht sinnlos irgendwo platzieren möchte. Ich verwende mysqli_*. Würde es so einen Sinn machen?

Code:
public function query($query) {
        if (func_num_args() > 1) {
            $args = func_get_args();
            array_shift($args);
            foreach ($args as &$value) {
                 $args = mysqli_real_escape_string($value);
            }
            
           $query = vsprintf($query,  $args);
           $query = filter_var($query, FILTER_SANITIZE_STRING);

           return $query;
        }
    }
 
Deswegen frage ich ja, da ich es nicht sinnlos irgendwo platzieren möchte. Ich verwende mysqli_*. Würde es so einen Sinn machen?

Code:
public function query($query) {
        if (func_num_args() > 1) {
            $args = func_get_args();
            array_shift($args);
            foreach ($args as &$value) {
                 $args = mysqli_real_escape_string($value);
            }
           
           $query = vsprintf($query,  $args);
           $query = filter_var($query, FILTER_SANITIZE_STRING);

           return $query;
        }
    }

Bei mysqli_real_escape_string fehlt doch wohl noch ein Parameter ? ;)
Ansonsten ist es Ratsam mysqli_real_escape_string erst dann aufzurufen, wenn die Manipulation des Eingabewerts abgeschlossen ist.
Außerdem lässt du, wenn ich deine Methode richtig interpretiere, den gesamten Query-String mit filter_var() vor HTML "schützen". Was soll das bringen?
Wenn, dann nur die Eingabewerte mit filter_var überarbeiten, nicht die gesamte Query.

Des weiteren sehe ich es als großes Problem, wenn in einer DB-Klasse per Default HTML entfernt wird.
Wenn du jemals HTML einlesen musst, kannst du das wegschmeißen.
 
Werbung:
Ja, da fehlt noch ein Parameter, sollte jetzt aber hier nicht relevant sein. Da ich MySQLi normalerweise objektorientiert verwende.

Also wenn damit auch HTML eingelesen wird, also besser auf htmlspecialchars() zurück greifen?
 
Ja, da fehlt noch ein Parameter, sollte jetzt aber hier nicht relevant sein. Da ich MySQLi normalerweise objektorientiert verwende.

Also wenn damit auch HTML eingelesen wird, also besser auf htmlspecialchars() zurück greifen?

Äh was? Deine Klasse sollte nur die Kommunikation zwischen MySQL und PHP erleichtern, keine Manipulation der Daten vornehmen.

Wenn du der Klasse sagst, sie soll '<p>Test</p>' in die DB eintragen, soll sie dies auch machen und nicht das was sie für richtig hält.

Die Validierung/Manipulation der eingegeben Daten, ist nicht die Aufgabe der DB-Klasse. Sie ist zwar für die Verhinderung von MySQL-Injections verantwortlich, aber nicht um XXS oder andere Code Injections zu verhindern oder ähnliches. Natürlich kann sie das theoretisch, sollte sie aber keinesfalls.
 
Okay, danke für die hilfreichen Informationen, ich werde Sie mir zu Herzen nehmen.
 
Werbung:
Es gibt allerdings eine Klasse, die du dir schreiben solltest, welche die Aufgabe übernehmen könnte deine anwendung gegen XSS zu schützen.
Diese Klasse handelt alles von $_GET, $_POST bis zu $_FILES und $_COOKIE(S?).

Ich habe hier schon öfter mal von so einer Klasse geredet und sogar glaube ich ein komplettes Template dafür gepostet. Habe aber keine Lust nachzuguken also überlasse ich es dir meine history zu durchsuchen.

Hier kurz wie der generische Funktionsheader aussehen könnte.

PHP:
public function getInput ($sSource, $sName, $mDefault, $sType) { /* ... */ }

Ein beispiel funktionsaufruf um z.b. XSS zu verhindern würde z.b. so aussehen.

PHP:
$oObject->getInput ('POST', 'title', null, 'STRING');

Oder wenn du z.b. im Admin bereich bist und willst das du HTML schreiben kannst baust du einen HTML typ ein und schreibst sowas.

PHP:
$oObject->getInput ('POST', 'bericht', null, 'HTML');

Und wenn du eine zahl haben willst kannst du sowas schreiben

PHP:
$oObject->getInput ('GET', 'id', null, 'INTEGER');

Viel vergnügen beim schreiben.
 
Zurück
Oben