SQL Fehlerausgabe = Sicherheitslücke!?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • SQL Fehlerausgabe = Sicherheitslücke!?

    Jetzt hat gerade eine fremde PHP-Seite diesen Code ausgegeben:

    Could not obtain matched posts list

    DEBUG MODE

    SQL Error : 1053 Server shutdown in progress

    SELECT m.post_id FROM z2phpbb_search_wordlist w, z2phpbb_search_wordmatch m WHERE w.word_text LIKE 'mp3' AND m.word_id = w.word_id AND w.word_common <> 1

    Line : 512
    File : search.php
    Ist das nicht bischen sicherheitsgefährdend, wenn hier der komplette Query ausgegeben wird?

    Da hat man es als Angreifer ja relativ leicht oder?

  • #2
    und wieso? erkläre mal! Außerdem phpbb verwendet immer die gleichen DB-Struktur, da muss man noch nicht mal die Query sehen

    Kommentar


    • #3
      Sollte die Website zu dumm sein mit addslashes/mysql_real_escape_string richtig umzugehen und du findest raus, dass der Query deshalb fehl schlägt, weil ein ' drin ist, dann kann man daraus definitiv was basteln ... ansonsten eher nicht.

      Allerdings ist auf der Produktion so eine Ausgabe auch nicht gerade was feines, wenn möglich sollte man das schon lassen ^^,

      Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

      bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
      Wie man Fragen richtig stellt

      Kommentar


      • #4
        Denke schon, dass das für die Sicherheit nicht sonderlich förderlich ist. Auch wenn bei OpenSource sowieso jeder nach Angriffspunkten suchen kann, ist es sicher nicht gut, noch die Tabellenstruktur & Query offen zu legen. Ganz abgesehen von dem ästhetischen Gesichtspunkt in der Produktion.

        Lösung:

        PHP-Code:
        #ERROR HANDLING
        // umdefinieren der Konstanten - nur in PHP 4
        define("FATAL"E_USER_ERROR);
        define("ERROR"E_USER_WARNING);
        define("WARNING"E_USER_NOTICE);

        // die Stufe für dieses Skript einstellen
        error_reporting(FATAL ERROR WARNING);

        function 
        user_error_handler($severity$msg$filename$linenum
        {
           
        $query "INSERT INTO error_log
                         (severity, message, filename, linenum, timestamp, querystring)
                         VALUES('%s','%s','%s','%s', %d, '%s')"
        ;
           switch(
        $severity) {
           case 
        WARNING:
                   
        mysql_query(sprintf($query'NOTICE'$msg$filename$linenumtime(), $_SERVER['QUERY_STRING']));    
              break;
           case 
        ERROR:
              
        mysql_query(sprintf($query'WARNING'$msg$filename$linenumtime(), $_SERVER['QUERY_STRING']));
              break;
           case 
        FATAL:
              
        mysql_query(sprintf($query'FATAL'$msg$filename$linenumtime(), $_SERVER['QUERY_STRING']));
              print(
        "FATAL error.");
              break;
           default:
              
        mysql_query(sprintf($query'UNKNOWN'$msg$filename$linenumtime(), $_SERVER['QUERY_STRING']));
              break;
           }
        }

        set_error_handler("user_error_handler"); 
        So landen solche Fehler schön in einer Log-Tabelle und können später analysiert werden. Natürlich sollte man den Schnippsel oben noch mit einer Funktion ergänzen, die die Query sauber macht und natürlich braucht es noch eine Ergänzung, um den genauen MySQL Fehler abzufangen.

        Kommentar

        Lädt...
        X