Zurück tutorials.de > Programming > PHP

 
 
Hallo und herzlich willkommen! Tutorials.de ist eine Hilfe-Community mit dem Motto User helfen Usern. Als Gast verfügst Du über Schreibrechte in unseren Foren und Blogs. Du kannst dich aber gerne auch kostenlos registrieren und Teil unserer Gemeinschaft werden! Viel Spaß & Erfolg bei der Vermehrung deines Wissens :-)

Themen: 242.975 | Beiträge: 1.352.293 | Mitglieder: 169.418 (Stand 28.01.10) | Fragen zur Nutzung von Tutorials.de? Nutzungsregeln | Kontaktformular | Impressum

Jubiläums-Countdown 23.02 23.03 23.04 23.05 23.06 23.07 23.08 23.09


Einladung zum C++ für Einsteiger-Workshop
  AntwortAntworten (über Gastzugang)    
  AntwortAntworten (über Gastzugang)    
 
Themen-Optionen Ansicht
Alt 11.05.09, 00:20   #1 (permalink)
Mitglied Brilliant
 
Registriert seit: Mar 2008
Beiträge: 765
Renommee-Modifikator: 0
Sasser ist in Verruf geraten

Frage SQL-Injektion und Problem mit Anführungsstrichen

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:
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
  Sasser ist offline  
 
Alt 11.05.09, 08:44   #2 (permalink)
Mitglied Brokat
 
Registriert seit: Apr 2007
Beiträge: 375
Renommee-Modifikator: 7
Maniac_81 wird schon bald berühmt werden

AW: SQL-Injektion und Problem mit Anführungsstrichen

Moin,

Ich würde es ausgeschalten lassen und "mysql_real_escape_string($string)" verwenden.
  Maniac_81 ist offline  
 
Alt 11.05.09, 11:23   #3 (permalink)
do ut des
 
Benutzerbild von Felix Jacobi tutorials.de Moderator 
 
Registriert seit: Nov 2001
Ort: Wuppertal
Beiträge: 4.785
Renommee-Modifikator: 54
Felix Jacobi hat die Renommee-Anzeige deaktiviert

AW: SQL-Injektion und Problem mit Anführungsstrichen

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.
__________________
Der neue Personalausweis kommt...

KIDS Kinderbetreuungsdienst
Xing

They who can give up essential liberty to obtain a little temporary safety, deserve neither liberty nor safety.
Benjamin Franklin
  Felix Jacobi ist offline  
 
Alt 11.05.09, 15:53   #4 (permalink)
Mitglied Brilliant
 
Registriert seit: Mar 2008
Beiträge: 765
Renommee-Modifikator: 0
Sasser ist in Verruf geraten

Frage AW: SQL-Injektion und Problem mit Anführungsstrichen

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;

  Sasser ist offline  
 
Alt 11.05.09, 15:57   #5 (permalink)
Mitglied Brokat
 
Registriert seit: Apr 2007
Beiträge: 375
Renommee-Modifikator: 7
Maniac_81 wird schon bald berühmt werden

AW: SQL-Injektion und Problem mit Anführungsstrichen

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;
    } 
  Maniac_81 ist offline  
 
Alt 11.05.09, 16:42   #6 (permalink)
Mitglied Diamant
 
Registriert seit: Dec 2007
Ort: Bremen
Beiträge: 3.422
Renommee-Modifikator: 40
kuddeldaddeldu ist berühmt wie kein Zweiterkuddeldaddeldu ist berühmt wie kein Zweiterkuddeldaddeldu ist berühmt wie kein Zweiterkuddeldaddeldu ist berühmt wie kein Zweiterkuddeldaddeldu ist berühmt wie kein Zweiterkuddeldaddeldu ist berühmt wie kein Zweiterkuddeldaddeldu ist berühmt wie kein Zweiterkuddeldaddeldu ist berühmt wie kein Zweiterkuddeldaddeldu ist berühmt wie kein Zweiterkuddeldaddeldu ist berühmt wie kein Zweiterkuddeldaddeldu ist berühmt wie kein Zweiter

AW: SQL-Injektion und Problem mit Anführungsstrichen

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.
  kuddeldaddeldu ist offline  
 
Alt 11.05.09, 16:53   #7 (permalink)
Mitglied Brilliant
 
Registriert seit: Mar 2008
Beiträge: 765
Renommee-Modifikator: 0
Sasser ist in Verruf geraten

AW: SQL-Injektion und Problem mit Anführungsstrichen

Gibt es eventuell Erweiterungen, welche solche Sachen überprüfen, welche an die DB gesendet werden!? Muss es doch geben oder?
  Sasser ist offline  
 
Alt 11.05.09, 17:22   #8 (permalink)
<?= "Hello World" ?>
 
Benutzerbild von CookieBuster  
 
Registriert seit: Sep 2008
Ort: Münsingen (BW)
Beiträge: 287
Renommee-Modifikator: 8
CookieBuster ist jedem bekanntCookieBuster ist jedem bekanntCookieBuster ist jedem bekanntCookieBuster ist jedem bekannt

AW: SQL-Injektion und Problem mit Anführungsstrichen

schau dir einmal mysqli an. Das ganze ist sogar Objektorrientiert (gibts aber auch ohne OOP)
__________________
There are only 10 kind of people, those who understand binary and those who don't

Versuch mich zu schlagen!

Mach mal einer das Licht an, ich hör nix!
  CookieBuster ist offline  
 
Alt 11.05.09, 17:36   #9 (permalink)
do ut des
 
Benutzerbild von Felix Jacobi tutorials.de Moderator 
 
Registriert seit: Nov 2001
Ort: Wuppertal
Beiträge: 4.785
Renommee-Modifikator: 54
Felix Jacobi hat die Renommee-Anzeige deaktiviert

AW: SQL-Injektion und Problem mit Anführungsstrichen

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)
__________________
Der neue Personalausweis kommt...

KIDS Kinderbetreuungsdienst
Xing

They who can give up essential liberty to obtain a little temporary safety, deserve neither liberty nor safety.
Benjamin Franklin
  Felix Jacobi ist offline  
 
Alt 11.05.09, 17:40   #10 (permalink)
Mitglied Diamant
 
Registriert seit: Dec 2007
Ort: Bremen
Beiträge: 3.422
Renommee-Modifikator: 40
kuddeldaddeldu ist berühmt wie kein Zweiterkuddeldaddeldu ist berühmt wie kein Zweiterkuddeldaddeldu ist berühmt wie kein Zweiterkuddeldaddeldu ist berühmt wie kein Zweiterkuddeldaddeldu ist berühmt wie kein Zweiterkuddeldaddeldu ist berühmt wie kein Zweiterkuddeldaddeldu ist berühmt wie kein Zweiterkuddeldaddeldu ist berühmt wie kein Zweiterkuddeldaddeldu ist berühmt wie kein Zweiterkuddeldaddeldu ist berühmt wie kein Zweiterkuddeldaddeldu ist berühmt wie kein Zweiter

AW: SQL-Injektion und Problem mit Anführungsstrichen

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.
  kuddeldaddeldu ist offline  
 
Alt 13.05.09, 01:01   #11 (permalink)
Mitglied Brilliant
 
Registriert seit: Mar 2008
Beiträge: 765
Renommee-Modifikator: 0
Sasser ist in Verruf geraten

AW: SQL-Injektion und Problem mit Anführungsstrichen

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 ); 
  Sasser ist offline  
 
Alt 13.05.09, 07:05   #12 (permalink)
Mitglied Diamant
 
Registriert seit: Dec 2007
Ort: Bremen
Beiträge: 3.422
Renommee-Modifikator: 40
kuddeldaddeldu ist berühmt wie kein Zweiterkuddeldaddeldu ist berühmt wie kein Zweiterkuddeldaddeldu ist berühmt wie kein Zweiterkuddeldaddeldu ist berühmt wie kein Zweiterkuddeldaddeldu ist berühmt wie kein Zweiterkuddeldaddeldu ist berühmt wie kein Zweiterkuddeldaddeldu ist berühmt wie kein Zweiterkuddeldaddeldu ist berühmt wie kein Zweiterkuddeldaddeldu ist berühmt wie kein Zweiterkuddeldaddeldu ist berühmt wie kein Zweiterkuddeldaddeldu ist berühmt wie kein Zweiter

AW: SQL-Injektion und Problem mit Anführungsstrichen

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.
  kuddeldaddeldu ist offline  
 
Alt 14.05.09, 20:29   #13 (permalink)
Mitglied Brilliant
 
Registriert seit: Mar 2008
Beiträge: 765
Renommee-Modifikator: 0
Sasser ist in Verruf geraten

AW: SQL-Injektion und Problem mit Anführungsstrichen

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...
  Sasser ist offline  
 
Alt 14.05.09, 20:36   #14 (permalink)
Mitglied Wurstwasser
 
Benutzerbild von saftmeister  
 
Registriert seit: May 2006
Ort: Ebelsbach (Bayern)
Beiträge: 1.145
Renommee-Modifikator: 20
saftmeister hat eine strahlende Zukunftsaftmeister hat eine strahlende Zukunftsaftmeister hat eine strahlende Zukunftsaftmeister hat eine strahlende Zukunftsaftmeister hat eine strahlende Zukunftsaftmeister hat eine strahlende Zukunftsaftmeister hat eine strahlende Zukunft

AW: SQL-Injektion und Problem mit Anführungsstrichen

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
  saftmeister ist offline  
 
Alt 14.05.09, 21:09   #15 (permalink)
Mitglied Brilliant
 
Registriert seit: Mar 2008
Beiträge: 765
Renommee-Modifikator: 0
Sasser ist in Verruf geraten

AW: SQL-Injektion und Problem mit Anführungsstrichen

Wie kann man sich eigentlich ausgeben lassen,
wieviele Datenbankverbindungen zur Zeit bestehen?

Gibts da ein Script o.a.?
  Sasser ist offline  
 
 
 
Lesezeichen:


Themen-Optionen
Ansicht
Ähnliche Themen
 
Thema Autor Forum Antworten Letzter Beitrag
PHP und SQL-Injektion Sasser PHP 5 18.09.08 16:29
URL mit Anführungsstrichen Cherrywine Hosting & Webserver 4 10.03.08 20:02
SQL-Injektion - Hilfe! aargau PHP 10 25.02.08 23:44
Script-Injektion bei einsundeins loetmann Javascript & Ajax 2 08.10.07 13:29
[Flash -> PHP] Problem mit Anführungsstrichen p-flash Flash 5 22.12.06 18:21
» Tools
 
tutorials.de-Tools tutorial.de-Suchfeld tutorial.de-Widget tutorial.de-RSS-Feed tutorial.de-Banner
» Neue Links
 
Hits: 132
»
JHT's Planetary...
(Cinema 4D-Objekte)
Hits: 260
»
Tageslicht ohne GI
(Cinema 4D-Tutorials)
Hits: 147
»
Puzzle
(Cinema 4D-Tutorials)
Hits: 100
»
Lacreme
(Cinema 4D-Tutorials)
Hits: 189
»
Liquid Light
(Cinema 4D-Tutorials)
» Aktuelle Umfrage
 
Bist du mit der Geschwindigkeit der Tutorials.de-Website zufrieden?
Ja, es putzt mir glatt den Staub vom Bildschirm! - 79,68%
149 Stimmen
Nein, ich denke da muss noch nachgebessert werden... - 20,32%
38 Stimmen
Stimmen gesamt: 187
Du darfst bei dieser Umfrage nicht abstimmen.

 

Alle Zeitangaben in WEZ +1. Es ist jetzt 15:03 Uhr.


Powered by vBulletin® Version 3.8.5 (Deutsch) & vBadvanced CMPS v.3.2.0
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.5.0 RC2 ©2010, Crawlability, Inc.
Alle Rechte vorbehalten ©2000 - 2010 tutorials.de
Design by Mark, CSS by Maik & Sven Mintel
Seite generiert in 0,25506 Sekunden mit 26 queries