ERLEDIGT
JA
JA
ANTWORTEN
21
21
ZUGRIFFE
870
870
EMPFEHLEN
-
11.05.09 00:20 #1
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
-
11.05.09 08:44 #2
Moin,
Ich würde es ausgeschalten lassen und "mysql_real_escape_string($string)" verwenden.
-
11.05.09 11:23 #3
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"
-
11.05.09 15:53 #4
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( 1 );
return $db;
}
-
11.05.09 15:57 #5
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;
}
-
11.05.09 16:42 #6
Mitglied Diamant
- Registriert seit
- Dec 2007
- Ort
- Bremen
- Beiträge
- 3.418
Hi,
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.
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.
LGDa 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.05.09 16:53 #7
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?
-
11.05.09 17:22 #8
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.
-
11.05.09 17:36 #9
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"
-
11.05.09 17:40 #10
Mitglied Diamant
- Registriert seit
- Dec 2007
- Ort
- Bremen
- Beiträge
- 3.418
Hi,
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.
LGDa 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.05.09 01:01 #11
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 );
-
13.05.09 07:05 #12
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?
LGDa 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.05.09 20:29 #13
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.05.09 20:36 #14
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 ;-)
-
14.05.09 21:09 #15
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.?
Ähnliche Themen
-
PHP und SQL-Injektion
Von Sasser im Forum PHPAntworten: 5Letzter Beitrag: 18.09.08, 16:29 -
URL mit Anführungsstrichen
Von Cherrywine im Forum Hosting & WebserverAntworten: 4Letzter Beitrag: 10.03.08, 20:02 -
SQL-Injektion - Hilfe!
Von aargau im Forum PHPAntworten: 10Letzter Beitrag: 25.02.08, 23:44 -
[Flash -> PHP] Problem mit Anführungsstrichen
Von p-flash im Forum Flash PlattformAntworten: 5Letzter Beitrag: 22.12.06, 18:21 -
Sortieren mit Anführungsstrichen
Von cardician im Forum Relationale DatenbanksystemeAntworten: 1Letzter Beitrag: 18.02.05, 13:14




Zitieren


Login