tutorials.de-Buchverschenkaktion 08/2010
+ Auf Thema antworten
Seite 1 von 2 1 2 Letzte
  1. #1
    Sasser Sasser ist gerade online Mitglied Brillant Sasser hat eine blütenweiße Weste
    Registriert seit
    Mar 2008
    Beiträge
    862
    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. PHP 5 / MySQL 5 Seminar (22 Stunden Video-Training)

    Preis: früher: 39,95€ - jetzt nur: 7,99€
    Innerhalb Deutschlands versandkostenfrei!

    PHP 5 / MySQL 5 Lernkurs – 22 Stunden Video-Training auf DVD
    - PHP-, MySQL- und PHPMyAdmin-Grundlagen
    - Datenbankprogrammierung, objektorientierte Programmierung
    - Geeignet für Windows XP und Windows Vista


    Hier geht es zum Angebot

    Über 1.000 weitere IT-Bücher zum Sonderpreis lieferbar!


  3. #2
    Maniac_81 Maniac_81 ist offline Mitglied Brokat Maniac_81 wird schon bald berühmt werden
    Registriert seit
    Apr 2007
    Beiträge
    397
    Moin,

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

  4. #3
    Benutzerbild von Felix Jacobi
    Felix Jacobi Felix Jacobi ist offline do ut des Felix Jacobi hat die Renommee-Anzeige deaktiviert
    tutorials.de Moderator
    Registriert seit
    Nov 2001
    Ort
    Wuppertal
    Beiträge
    4.965
    Blog-Einträge
    65
    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

    They who can give up essential liberty to obtain a little temporary safety, deserve neither liberty nor safety.
    Benjamin Franklin

  5. #4
    Sasser Sasser ist gerade online Mitglied Brillant Sasser hat eine blütenweiße Weste
    Registriert seit
    Mar 2008
    Beiträge
    862
    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;


  6. #5
    Maniac_81 Maniac_81 ist offline Mitglied Brokat Maniac_81 wird schon bald berühmt werden
    Registriert seit
    Apr 2007
    Beiträge
    397
    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;
        } 

  7. #6
    kuddeldaddeldu kuddeldaddeldu ist offline Mitglied Diamant kuddeldaddeldu ist berühmt wie kein Zweiter kuddeldaddeldu ist berühmt wie kein Zweiter kuddeldaddeldu ist berühmt wie kein Zweiter kuddeldaddeldu ist berühmt wie kein Zweiter kuddeldaddeldu ist berühmt wie kein Zweiter kuddeldaddeldu ist berühmt wie kein Zweiter kuddeldaddeldu ist berühmt wie kein Zweiter kuddeldaddeldu ist berühmt wie kein Zweiter kuddeldaddeldu ist berühmt wie kein Zweiter kuddeldaddeldu ist berühmt wie kein Zweiter kuddeldaddeldu ist berühmt wie kein Zweiter
    Registriert seit
    Dec 2007
    Ort
    Bremen
    Beiträge
    3.420
    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.

  8. #7
    Sasser Sasser ist gerade online Mitglied Brillant Sasser hat eine blütenweiße Weste
    Registriert seit
    Mar 2008
    Beiträge
    862
    Gibt es eventuell Erweiterungen, welche solche Sachen überprüfen, welche an die DB gesendet werden!? Muss es doch geben oder?

  9. #8
    Benutzerbild von CookieBuster
    CookieBuster CookieBuster ist offline <?= "Hello World" ?> CookieBuster kann auf vieles stolz sein CookieBuster kann auf vieles stolz sein CookieBuster kann auf vieles stolz sein CookieBuster kann auf vieles stolz sein CookieBuster kann auf vieles stolz sein CookieBuster kann auf vieles stolz sein
    Registriert seit
    Sep 2008
    Ort
    Münsingen (BW)
    Beiträge
    408
    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.

  10. #9
    Benutzerbild von Felix Jacobi
    Felix Jacobi Felix Jacobi ist offline do ut des Felix Jacobi hat die Renommee-Anzeige deaktiviert
    tutorials.de Moderator
    Registriert seit
    Nov 2001
    Ort
    Wuppertal
    Beiträge
    4.965
    Blog-Einträge
    65
    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

    They who can give up essential liberty to obtain a little temporary safety, deserve neither liberty nor safety.
    Benjamin Franklin

  11. #10
    kuddeldaddeldu kuddeldaddeldu ist offline Mitglied Diamant kuddeldaddeldu ist berühmt wie kein Zweiter kuddeldaddeldu ist berühmt wie kein Zweiter kuddeldaddeldu ist berühmt wie kein Zweiter kuddeldaddeldu ist berühmt wie kein Zweiter kuddeldaddeldu ist berühmt wie kein Zweiter kuddeldaddeldu ist berühmt wie kein Zweiter kuddeldaddeldu ist berühmt wie kein Zweiter kuddeldaddeldu ist berühmt wie kein Zweiter kuddeldaddeldu ist berühmt wie kein Zweiter kuddeldaddeldu ist berühmt wie kein Zweiter kuddeldaddeldu ist berühmt wie kein Zweiter
    Registriert seit
    Dec 2007
    Ort
    Bremen
    Beiträge
    3.420
    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.

  12. #11
    Sasser Sasser ist gerade online Mitglied Brillant Sasser hat eine blütenweiße Weste
    Registriert seit
    Mar 2008
    Beiträge
    862
    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 ); 

  13. #12
    kuddeldaddeldu kuddeldaddeldu ist offline Mitglied Diamant kuddeldaddeldu ist berühmt wie kein Zweiter kuddeldaddeldu ist berühmt wie kein Zweiter kuddeldaddeldu ist berühmt wie kein Zweiter kuddeldaddeldu ist berühmt wie kein Zweiter kuddeldaddeldu ist berühmt wie kein Zweiter kuddeldaddeldu ist berühmt wie kein Zweiter kuddeldaddeldu ist berühmt wie kein Zweiter kuddeldaddeldu ist berühmt wie kein Zweiter kuddeldaddeldu ist berühmt wie kein Zweiter kuddeldaddeldu ist berühmt wie kein Zweiter kuddeldaddeldu ist berühmt wie kein Zweiter
    Registriert seit
    Dec 2007
    Ort
    Bremen
    Beiträge
    3.420
    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.

  14. #13
    Sasser Sasser ist gerade online Mitglied Brillant Sasser hat eine blütenweiße Weste
    Registriert seit
    Mar 2008
    Beiträge
    862
    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...

  15. #14
    Benutzerbild von saftmeister
    saftmeister saftmeister ist offline Mitglied Wurstwasser saftmeister genießt hohes Ansehen saftmeister genießt hohes Ansehen saftmeister genießt hohes Ansehen saftmeister genießt hohes Ansehen saftmeister genießt hohes Ansehen saftmeister genießt hohes Ansehen saftmeister genießt hohes Ansehen saftmeister genießt hohes Ansehen saftmeister genießt hohes Ansehen saftmeister genießt hohes Ansehen saftmeister genießt hohes Ansehen
    Registriert seit
    May 2006
    Ort
    Ebelsbach (Bayern)
    Beiträge
    1.437
    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
    --
    "Möge der Saft mit euch sein" - Yoghurt aus Spaceballs

    Tutorial: Programm-Flaschenhälse in PHP mit xdebug finden

  16. #15
    Sasser Sasser ist gerade online Mitglied Brillant Sasser hat eine blütenweiße Weste
    Registriert seit
    Mar 2008
    Beiträge
    862
    Wie kann man sich eigentlich ausgeben lassen,
    wieviele Datenbankverbindungen zur Zeit bestehen?

    Gibts da ein Script o.a.?

Ä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. Script-Injektion bei einsundeins
    Von loetmann im Forum Javascript & Ajax
    Antworten: 2
    Letzter Beitrag: 08.10.07, 13:29
  5. [Flash -> PHP] Problem mit Anführungsstrichen
    Von p-flash im Forum Flash Plattform
    Antworten: 5
    Letzter Beitrag: 22.12.06, 18:21

Lesezeichen

Lesezeichen