[SICHERHEIT] DB Inhalte!

BSA

Erfahrenes Mitglied
Hi Leute!

Ich bin gerade dabei meine Scripte etwas Sicherer zu machen.
Also was die Sicherheit der Daten die in die DB eingetragen werden betrifft.
Dazu habe ich mir ne kleine Klasse geschrieben.
Diese Klasse soll alle $_POST, $_GET und $_COOKIE Arrays auf bestimmte Dinge überprüfen. Unter anderem wird auch die Funktion mysql_real_escape angewendet.

Nur leider scheinbar nicht richtig. Wenn ich mir ein kleines Testformular Bastel, geht es. Aber in meiner Anwendung nicht. *komisch*

Die Klasse sieht wie folgt aus:

PHP:
    class mysql_log{
        function mysql_log(){
            global $db_queries;
            $db_queries++;
            //-- Wenn magic_quotes_gpc (setzt Slashes vor bestimmte Sonderzeichen) aktiviert ist, mache
            if(get_magic_quotes_gpc()) {
                $this->array_strip_slashes($_GET);
                $this->array_strip_slashes($_POST);
                $this->array_strip_slashes($_COOKIE);
            }
            $this->array_strip_tags($_GET);
            $this->array_strip_tags($_POST);
            $this->array_strip_tags($_COOKIE);

            $this->array_real_escape_string($_GET);
            $this->array_real_escape_string($_POST);
            $this->array_real_escape_string($_COOKIE);
        }
        function query($query){
            global $db_queries;
            $db_queries++;
            $time = time();
            mysql_query("INSERT INTO mysql_log (querie, seite, ip, browser, zeit) VALUES 

('$query','".$_SERVER['REQUEST_URI']."','".$_SERVER['REMOTE_ADDR']."','".$_SERVER['HTTP_USER_AGENT']."','$time')");
            return mysql_query($query);
        }
        function array_strip_slashes(&$var)
        {
            if(is_string($var)) {
                $var = stripslashes($var);
            } else {
                if(is_array($var)) {
                    foreach($var AS $key => $value) {
                        mysql_log::array_strip_slashes($var[$key]);
                    }
                }
            }
        }
        function array_strip_tags(&$var)
        {
            if(is_string($var)) {
                $var = strip_tags($var,"<span><b><i><ul><li>");
            } else {
                if(is_array($var)) {
                    foreach($var AS $key => $value) {
                        mysql_log::array_strip_tags($var[$key]);
                    }
                }
            }
        }
        function array_real_escape_string(&$var)
        {
            if(is_string($var)) {
                $var = mysql_real_escape_string($var);
            } else {
                if(is_array($var)) {
                    foreach($var AS $key => $value) {
                        mysql_log::array_real_escape_string($var[$key]);
                    }
                }
            }
        }
    }

In meiner Anwednung sieht das dann wie folgt aus:

PHP:
$mysql = new mysql_log;
$mysql->query("UPDATE bilder SET ueberschrift = '".trim($_POST['ueberschrift'])."', beschreibung = '".trim($_POST['beschreibung'])."' WHERE id = 

'".$_GET['edi']."'");

Hat jetzt zufällig jemand ne Idee woran es liegen könnte das da bei mir nichts passiert (in der Anwendung)?
 
Das hat jetzt zwar nicht so viel mit dem Thema zu tun, aber in einer Klasse solltest du keine globalen Variablen verwenden. Du solltest das lieber anders lösen.

greetz
daddz
 
Das Problem ist einfach das die Daten ganz normal in der DB gespeichert werden, also nicht zum Beispiel so:

Ich Bin ein \'Testsring\'

Sonder einfach so:

Ich Bin ein 'Testsring'

Mit der globael Variable, das wird rausgenommen, ist auch unnötig!
 
Upps, ich glaub cih hab da was verplant, kann es sein das einfach nur die Zeichen wie / ' und ähnliche im SQL String mit einem / versehen werden, und in der DB normal gespeichert werden?!
 
Zuletzt bearbeitet:
Zurück