tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
11
ZUGRIFFE
412
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    slaughter89 slaughter89 ist offline Mitglied Bronze
    Registriert seit
    May 2007
    Beiträge
    48
    Hi, ich habe eine Frage:

    Ist das hier sicher?

    PHP-Code:
    $name my_stripslashes($_GET['name']);
    $email my_stripslashes($_GET['email']);

    function 
    my_stripslashes($var) {
        if(
    get_magic_quotes_gpc()) {
            
    // wenn magic_quotes_gpc auf 1 steht

            // mach was um die Slashes wieder wegzumachen.
         
    $var stripslashes($var);
        }
    return 
    $var;
    }

    $result mysql_query("INSERT INTO ".DB_PREFIX."posts (name, email) VALUES('mysql_real_escape_string($name)', 'mysql_real_escape_string($email)')"); 
    Oder sollte man noch htmlspecialchars() verwenden?
     

  2. #2
    l0c4lh05t l0c4lh05t ist offline Mitglied Gold
    Registriert seit
    Nov 2006
    Beiträge
    200
    Guck dir mal die mysql_real_escape_string() Funktion an.
     


  3. #3
    pipip pipip ist offline Mitglied
    Registriert seit
    May 2007
    Beiträge
    21
    ich würde es so machen:
    PHP-Code:
        function ParseInsert($var) {
            if(
    get_magic_quotes_gpc()) {
                return 
    addslashes(htmlentities(stripslashes($var)));
            } else {
                return 
    addslashes(htmlentities($var));
            }
        } 
    Geändert von pipip (03.01.08 um 14:39 Uhr)
     

  4. #4
    Avatar von DataFox
    DataFox DataFox ist offline Mitglied Brokat
    Registriert seit
    Nov 2007
    Beiträge
    267
    Hi

    Meiner Meinung nach reicht einfach prinzipiell auf jede variable addslashes(), und beim auslesen ein stripslashes(), oder nicht?

    Code :
    1
    
    $result = mysql_query("INSERT INTO ".DB_PREFIX."posts (name, email) VALUES('".addslashes($name)."', '".addslashes($email)."')");

    Gruß
    Laura
    Geändert von DataFox (03.01.08 um 13:36 Uhr)
     

  5. #5
    sufijen sufijen ist offline Mitglied Gold
    Registriert seit
    May 2007
    Beiträge
    236
    Kommt drauf an wie man es weiterverarbeitet!

    Wenn du zum beispiel addslashes() machst und danach stripslashes() ist es zwar für die DB gefiltert, es hat sich jedoch nicht am String geändert. D.h. der "Böse Code" (vielleicht XSS) wird in seiner eingabe form ausgegeben
    Geändert von sufijen (03.01.08 um 13:58 Uhr)
     

  6. #6
    pipip pipip ist offline Mitglied
    Registriert seit
    May 2007
    Beiträge
    21
    DataFox:
    nein, so leicht ist addslashes() leider nicht, da es von magic_quotes_gpc() abhängt:
    Die PHP-Direktive magic_quotes_gpc hat standardmäßig den Wert on, so dass grundsätzlich die Funktion addslashes() auf alle GET-, POST- und COOKIE-Daten angewendet wird. Verwenden Sie daher die Funktion addslashes() nicht, wenn Strings bereits durch magic_quotes_gpc escaped wurden, ansonsten erhalten Sie doppeltes Escaping. Um herauszufinden, ob der Parameter aktiviert ist, verwenden Sie am Einfachsten die Funktion get_magic_quotes_gpc().
    http://www.php.net/manual/de/function.addslashes.php

    /edit
    die fkt htmlentities wandelt zudem die alle zeichen in html-codes um... (so wie sufijen geschrieben hat)
    Geändert von pipip (03.01.08 um 13:59 Uhr)
     

  7. #7
    Avatar von Danielku15
    Danielku15 Danielku15 ist offline Mitglied Platin
    Registriert seit
    Feb 2004
    Ort
    Österreich
    Beiträge
    731
    Blog-Einträge
    3
    Ich hab da einen Code rumfliegen den ich verwende. Ich bin bisher ganz gut damit ausgekommen:
    PHP-Code:
    <?php
    /**
     * Bereitet einen String für eine Mysql-Abfrage vor.
     * @param string $Param Die Variable welche aufbearbeitet werden soll.
     * @param resource $resource Die Verbindung zur Datenbank.
     * @return Der aufbearbeitete String.
     */
    function mysql_prepare_string($Param$resource)
    {
        
    // String holen
        
    $string $Param;
        
        
        
    // Je nach aktivierten Modulen Quotes und Slashes entfernen
        
    if(get_magic_quotes_gpc()) 
        {
            if(
    ini_get('magic_quotes_sybase')) 
            {
                
    $string =  str_replace("''""'"$string);
            } 
            else 
            {
                
    $string stripslashes($string);
            }
        } 
        
    // Mysql-Escape Funktion ausführen
        
    return mysql_real_escape_string($string$resource);    
    }



    /**
     * Erstellt einen sicheren Mysql-Query
     * @param string $query Der Formatquery (Syntax wie bei sprintf)
     * @param array $vars Ein Array Mit den Variablen welche eingesetzt werden sollen.
     * @param resouce $resource Die Verbindung zur Datenbank. 
     */
    function mysql_secure_query($query$vars$resource)
    {
        
    // Alle Variablen vorbereiten
        
    foreach($vars as $var)
        {
            
    $var mysql_prepare_string($var$resource);
        }
        
        
    // Query Parsen.
        
    return vsprintf($query$vars);    
    }


    /////////////
    // Beispiel
    /////////////
    // Verbinden etc.
    $query mysql_secure_query('SELECT * FROM `%s` WHERE `NUserID`="%s";', array('UsUser'$_GET['UID']), $resource);
    // ...

    ?>
     

  8. #8
    DanBue Tutorials.de Gastzugang
    Es sollte noch strip_tags() verwendet werden, damit der User keinen HTML-Code mit einbauen kann.

    >Um es zusammenzufassen:

    PHP-Code:
    function prepareUpload($var)
    {
        if(
    get_magic_quotes_gpc()) 
            
    $var =  stripslashes($var);
        return 
    addslashes(htmlentities(strip_tags(trim($var))));


    Geändert von DanBue (03.01.08 um 14:38 Uhr) Grund: Fehler in der Syntax
     

  9. #9
    pipip pipip ist offline Mitglied
    Registriert seit
    May 2007
    Beiträge
    21
    strip_tags() würde ich hier nicht empfehlen da "bei unvollständigen oder unkorrekten Tags mehr Text/Daten gelöscht werden als erwartet." (http://de2.php.net/manual/de/function.strip-tags.php)

    aus diesem grund verwende ich htmlentities, das hat den gleichen nutzen, da wie beschrieben alle zeichen in html-code umgewandelt werden...
     

  10. #10
    slaughter89 slaughter89 ist offline Mitglied Bronze
    Registriert seit
    May 2007
    Beiträge
    48
    Ok, habe das ganze jetzt etwas umgebaut und noch htmlentities() hinzugefügt, weil ich das ganze wieder ausgeben will.

    So sollte es nun doch sicher sein, oder?

    PHP-Code:

    function b2w_stripslashes($var) {
        if(
    get_magic_quotes_gpc()) {
            
    $var stripslashes($var);
        }
    return 
    $var;
    }

    function 
    b2w_secure($var) {
        if (!
    is_numeric($var)) {
            
    $var "'".mysql_real_escape_string($var)."'";
        }
    return 
    htmlentities($var);
    }

    $blabla b2w_stripslashes($_GET['blabla']);

    $result mysql_query("INSERT INTO ".DB_PREFIX."posts (text) VALUES (".b2w_secure($blabla)."); 
     

  11. #11
    pipip pipip ist offline Mitglied
    Registriert seit
    May 2007
    Beiträge
    21
    ziemlich umständlich, aber sieht richtig aus. sonst nimm doch einfach die von mir oben gepostete funktion

    für (integer) zahlen würde ich intval($zahl) nehmen...
     

  12. #12
    slaughter89 slaughter89 ist offline Mitglied Bronze
    Registriert seit
    May 2007
    Beiträge
    48
    Es sieht nur so umständlich aus, weil ich zwischen b2w_stripslashes() und b2w_secure() noch etwas mit dem Eintrag machen will

    Falls man da aber noch etwas verbessern kann oder "sicherer" machen kann, dann bitte poszen!
     

Ähnliche Themen

  1. Ist md5 sicher?
    Von queicherius im Forum Coders Talk
    Antworten: 13
    Letzter Beitrag: 06.06.09, 23:11
  2. Ist das sicher?
    Von Malaxo im Forum PHP
    Antworten: 2
    Letzter Beitrag: 09.10.08, 09:19
  3. Ist das sicher?
    Von Lektor21 im Forum PHP
    Antworten: 13
    Letzter Beitrag: 26.09.07, 03:10
  4. Wie Sicher?
    Von Bubble10 im Forum Buchführung, Recht, Steuer & Co.
    Antworten: 3
    Letzter Beitrag: 17.06.07, 00:38
  5. Wie sicher ist MD5?
    Von preko im Forum PHP
    Antworten: 11
    Letzter Beitrag: 26.10.04, 20:16