Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
JA
ANTWORTEN
21
ZUGRIFFE
870
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
  1. #1
    Sasser ist offline Mitglied Smaragd
    Registriert seit
    Mar 2008
    Beiträge
    1.024
    Guten Abend alle zusammen!

    Ich habe bisher das Problem gehabt, dass einfache Anführungsstriche zu Fehlern führen, wenn man diese in einem Text mit in die Datenbank überträgt.

    Nun ist mir aufgefallen, dass auf meinem Server:

    Code :
    1
    
    magic_quotes_gpc =Off

    ausgeschalten ist. Nun habe ich es eingeschalten und es gibt auch keine Fehler mehr mit den einfachen Anführungsstrichen.

    Meine Frage ist nun, sind Probleme bekannt, wo er Zeichen einfach ersetzt? Und wie sicher ist es gegen SQL-Injektionen? Ich möchte keine 100%ige Sicherheit, denn die wird man wohl nie erreichen, aber es sollte auf jeden Fall eine kleine Barriere darstellen!

    Vielen Dank für eure Hilfe
     

  2. #2
    Avatar von Maniac
    Maniac ist offline Mitglied Rubin
    Registriert seit
    Apr 2007
    Ort
    Augsburg/Gersthofen (Bayern)
    Beiträge
    1.262
    Moin,

    Ich würde es ausgeschalten lassen und "mysql_real_escape_string($string)" verwenden.
     

  3. #3
    Avatar von Flex
    Flex ist offline (aka Felix Jacobi)
    Registriert seit
    Nov 2001
    Ort
    Wuppertal
    Beiträge
    5.260
    Mit PHP 5.3 ist magic_quotes_gpc deprecated, also veraltet und wird mit PHP sogar entfernt. Also zukunftsweisend denken und Applikationen mit ausgeschalteten magic_quotes_gpc entwickeln.
     
    KIDS Kinderbetreuungsdienst
    Xing

    "When you play the game of thrones, you win or you die. There is no middle ground."
    by Cersei Lannister in "A Game Of Thrones"

  4. #4
    Sasser ist offline Mitglied Smaragd
    Registriert seit
    Mar 2008
    Beiträge
    1.024
    An "mysql_real_escape_string($string)" habe ich bereits auch gedacht, aber dazu müsste ich ca. 20.000 Zeilen Quellcode umbauen.

    Kann man dies nicht global festlegen, dass er bei jedem DB-Verbindungsaufbau dies automatisch immer maskiert?

    PHP-Code:
    function connect_db() {
            
    ###############################
            
    $DB_host "";
            
    $DB_user "";
            
    $DB_password "";
            
    $DB_name "";
            
    ###############################
        
    $db = @mysql_connect $DB_host$DB_user$DB_password );
        @
    mysql_select_db $DB_name$db ) or sleep);
        return 
    $db;

     

  5. #5
    Avatar von Maniac
    Maniac ist offline Mitglied Rubin
    Registriert seit
    Apr 2007
    Ort
    Augsburg/Gersthofen (Bayern)
    Beiträge
    1.262
    Wenn es sich nur um POST oder GET Eingaben handelt welche Du umwandeln möchtest, dann würde ich das mit einer kleinen Funktion machen und diese am Anfang einer globalen Datei welche auf jeder Seite includiert wird, aufrufen.

    PHP-Code:
    // $_POST array maskieren 
        
    function maskpost($_POST)
        {
            foreach ( 
    $_POST as $var => $val 
              { 
                
    $_POST[$var] = mysql_real_escape_string($val); 
              } 

             return 
    $_POST;
        } 
     

  6. #6
    kuddeldaddeldu ist offline Mitglied Diamant
    Registriert seit
    Dec 2007
    Ort
    Bremen
    Beiträge
    3.418
    Hi,

    Zitat Zitat von Maniac_81 Beitrag anzeigen
    Wenn es sich nur um POST oder GET Eingaben handelt welche Du umwandeln möchtest, dann würde ich das mit einer kleinen Funktion machen und diese am Anfang einer globalen Datei welche auf jeder Seite includiert wird, aufrufen.
    das ist keine gute Idee. Das müsste dann ja an anderen Stellen (Vergleiche, Ausgaben in HTML,...) wieder rückgängig gemacht werden. Daten sollte man genau dann behandeln, wenn man sie in einen bestimmten Kontext überführen will.

    Zitat Zitat von Sasser Beitrag anzeigen
    Kann man dies nicht global festlegen, dass er bei jedem DB-Verbindungsaufbau dies automatisch immer maskiert?

    PHP-Code:
    function connect_db() {
            
    ###############################
            
    $DB_host "";
            
    $DB_user "";
            
    $DB_password "";
            
    $DB_name "";
            
    ###############################
        
    $db = @mysql_connect $DB_host$DB_user$DB_password );
        @
    mysql_select_db $DB_name$db ) or sleep);
        return 
    $db;

    Beim Verbindungsaufbau ist doch noch gar nichts zum Maskieren da...

    Es mag jetzt bitter sein, das zu hören, aber wenn Du da 20000 Zeilen Quellcode hast, in denen DB-Abfragen kreuz und quer verstreut sind und weder Prepared Statements verwendet werden, noch Benutzerdaten geprüft oder maskiert werden, dann ist das wirklich schlechter Code und Du solltest Dir die Mühe machen und das Ganze neu organisieren. Wer weiß, ob da nicht noch viel mehr im Argen ist, wenn schon solch elementaren Dinge vernachlässigt wurden.

    LG
     
    Da es nötig zu werden scheint: Ich leiste hier keinen Support über PN. Stellt Rückfragen zu Euren Problemen bitte in Eurem Thread, dann können alle helfen.

  7. #7
    Sasser ist offline Mitglied Smaragd
    Registriert seit
    Mar 2008
    Beiträge
    1.024
    Gibt es eventuell Erweiterungen, welche solche Sachen überprüfen, welche an die DB gesendet werden!? Muss es doch geben oder?
     

  8. #8
    Avatar von CookieBuster
    CookieBuster ist offline <?= "Hello World" ?>
    Registriert seit
    Sep 2008
    Ort
    Münsingen (BW)
    Beiträge
    419
    schau dir einmal mysqli an. Das ganze ist sogar Objektorrientiert (gibts aber auch ohne OOP)
     
    There are only 10 types of people in the world — those who understand binary, and those who don't.

    Mach mal einer das Licht an, ich hör nix!

    Why is 6 afraid of 7? Because 7 8 9.

  9. #9
    Avatar von Flex
    Flex ist offline (aka Felix Jacobi)
    Registriert seit
    Nov 2001
    Ort
    Wuppertal
    Beiträge
    5.260
    Zitat Zitat von Sasser Beitrag anzeigen
    Gibt es eventuell Erweiterungen, welche solche Sachen überprüfen, welche an die DB gesendet werden!? Muss es doch geben oder?
    Ja, gibt es wahrscheinlich. Aber die wenigstens in PHP. Sie müssen meist selbst kompiliert werden und als PHP Extension eingebunden werden... Kenne spontan aber keine.

    Die einfachste Lösung:

    Eine vernünftige IDE nutzen, alle Stellen raussuchen, wo ein Query abgesetzt wird und die Ersetzungen vornehmen.
    Ist etwas Arbeit, aber dafür um einiges besser als die Alternativen. (wie kuddeldaddeldu ja auch schon sagte)
     
    KIDS Kinderbetreuungsdienst
    Xing

    "When you play the game of thrones, you win or you die. There is no middle ground."
    by Cersei Lannister in "A Game Of Thrones"

  10. #10
    kuddeldaddeldu ist offline Mitglied Diamant
    Registriert seit
    Dec 2007
    Ort
    Bremen
    Beiträge
    3.418
    Hi,

    Zitat Zitat von Sasser Beitrag anzeigen
    Gibt es eventuell Erweiterungen, welche solche Sachen überprüfen, welche an die DB gesendet werden!? Muss es doch geben oder?
    Es gibt einen Ansatz von Stefan Esser, SQL-Injections mit Hilfe eines kleinen Lua-Scriptes über MySQL Proxy zu erkennen. Sieht aber eher nach einem Beispiel aus und Du musst MySQL Proxy auf dem DB-Server installieren. Ich würde mich da nicht drauf verlassen und lieber mal sauberen und wartbaren Code produzieren. Die mysqli-Erweiterung, die CookieBuster Dir empfiehlt, bietet Dir alles, was Du brauchst. Deinen Code darauf umstellen wirst Du aber schon müssen.

    LG
     
    Da es nötig zu werden scheint: Ich leiste hier keinen Support über PN. Stellt Rückfragen zu Euren Problemen bitte in Eurem Thread, dann können alle helfen.

  11. #11
    Sasser ist offline Mitglied Smaragd
    Registriert seit
    Mar 2008
    Beiträge
    1.024
    Also baue ich das folgendermaßen ein:

    PHP-Code:
    $db connect_db ();
    mysql_query "UPDATE table SET `test` = " mysql_real_escape_string($test), $db );
    mysql_close $db ); 
     

  12. #12
    kuddeldaddeldu ist offline Mitglied Diamant
    Registriert seit
    Dec 2007
    Ort
    Bremen
    Beiträge
    3.418
    Hi,

    nee, haargenau so ergibt das keinen Sinn. Wenn die Spalte `test` numerisch ist, was soll dann da mysql_real_escape_string()? Dann solltest Du diesen Wert auf Gültigkeit überprüfen. Wenn die Spalte vom Typ varchar, text o.ä. ist, dann ist die Abfrage syntaktisch falsch, da Strings in MySQL in Hochkommata stehen müssen.

    Und Du machst doch wohl hoffentlich nicht für jede einzelne Abfrage einen Connect?

    LG
     
    Da es nötig zu werden scheint: Ich leiste hier keinen Support über PN. Stellt Rückfragen zu Euren Problemen bitte in Eurem Thread, dann können alle helfen.

  13. #13
    Sasser ist offline Mitglied Smaragd
    Registriert seit
    Mar 2008
    Beiträge
    1.024
    Wenn ich den Connect nicht immer wieder wiederhole, führt es bestimmte Sachen gar nicht aus Das Problem hatte ich, als ich einmal 3 Operationen ausgeführt habe, denn da hat er die letzte nicht ausgeführt.

    Ich das so schlimm, wenn man immer eine neue Verbindung aufbaut und dann gleich wieder schließt? Also ich habe davon im kompletten Projekt ca. 500...

    Wenn ich falsch liege, welche Methode würde es denn noch geben?

    Umbauen muss ich alles ja sowieso nochmal...
     

  14. #14
    Avatar von saftmeister
    saftmeister ist offline Nutze den Saft!
    tutorials.de Premium-User
    Registriert seit
    May 2006
    Ort
    There is no place like 127.0.0.1
    Beiträge
    4.163
    Benutze einfach PDO und Prepared Statements. Das ist wohl die beste Lösung für dein Problem. Allerdings viel Änderungsaufwand, der sich allerdings lohnen dürfte.
     
    Grüße
    --
    Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)

  15. #15
    Sasser ist offline Mitglied Smaragd
    Registriert seit
    Mar 2008
    Beiträge
    1.024
    Wie kann man sich eigentlich ausgeben lassen,
    wieviele Datenbankverbindungen zur Zeit bestehen?

    Gibts da ein Script o.a.?
     

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. PHP und SQL-Injektion
    Von Sasser im Forum PHP
    Antworten: 5
    Letzter Beitrag: 18.09.08, 16:29
  2. URL mit Anführungsstrichen
    Von Cherrywine im Forum Hosting & Webserver
    Antworten: 4
    Letzter Beitrag: 10.03.08, 20:02
  3. SQL-Injektion - Hilfe!
    Von aargau im Forum PHP
    Antworten: 10
    Letzter Beitrag: 25.02.08, 23:44
  4. [Flash -> PHP] Problem mit Anführungsstrichen
    Von p-flash im Forum Flash Plattform
    Antworten: 5
    Letzter Beitrag: 22.12.06, 18:21
  5. Sortieren mit Anführungsstrichen
    Von cardician im Forum Relationale Datenbanksysteme
    Antworten: 1
    Letzter Beitrag: 18.02.05, 13:14