Login  Regeln Aktuelles Datum und Uhrzeit: 24.07.2008, 20:14  
Startseite
Registrieren
Profil
Suchen
Mitgliederliste
Verzeichnis
Impressum



Partner
kostenlose Homepage
Fussball
Kostenloses Forum
SMS kostenlos
Webhosting
Webmasterportal
Kostenlos
Kredit ohne Schufa
Esoterik-Forum
Selbsthilfeforum
Artikel Backlink
Datenrettung
Sicherheitsproblem MySQL -> SQL Injection
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    Webmaster Forum -> Serverseitige Websprachen
Vorheriges Thema anzeigen Nächstes Thema anzeigen 
Autor Nachricht
chaoz
User [User]
User



Anmeldung: 19.05.04
Beiträge: 11

BeitragVerfasst am: 19.05.2004, 17:51    Titel: Sicherheitsproblem MySQL -> SQL Injection Antworten mit Zitat

Hallo Smilie

ich wollte mal etwas nützliches beitragen, und auf eine besondere Gefahr hinweisen.

Es geht um das Problem, dass man Formulardaten die per Browser gesendet werden, oft "manipulieren" kann, da der programmcode nicht genügend gesichert ist. So ist es z.B. möglich, wenn man ein Login Form vor sich hat mittels der Eingabe: admin'-- sich als admin einzuloggen, ohne das Passwort zu wissen.

Wieso ?

Nehmen wir an, das LoginFormular übergibt "username" und "password".

SELECT bla FROM table WHERE username = '$username' AND password = '$password';

so ... wenn man nun in das username feld admin'-- eingibt. Sieht es folgendermaßen aus:

SELECT bla FROM table WHERE username = 'admin'--' AND password =
'$password';

Problem an der Geschichte ist, dass die beiden -- (Minus) , die restliche SQL abfrage auskommentieren, und die Abfrage nach password quasi nicht mehr existiert.

Glücklicherweise gibt es in der Php.ini die magic_quotes_gpc ... wenn man diese auf ON setzt werden alle ' escaped. Somit verhindert dies schlimmeres.
Selbst hamburg.de war schon von diesem Sicherheitsproblem betroffen.

Manuell kann man die Escape Zeichen auch mit addslashes() hinzufügen, was man auch undbedingt machen sollte, bei der Programmierung.

Also ich hoffe, ich konnte euch das Problem halbwegs näher bringen, was sicherlich nichts neues ist, aber gerade Jemand, der sich neu mit der Materie beschäftigt, sollte über solche Dinge informiert werden, weil sie oft zu kurz kommen.

Grüße,

Patrick

_________________
http://www.verena-verbindet.de - Linkhandel-Börse


Nach oben
Private Nachricht senden Website dieses Benutzers besuchen
Andreas Schroth
Bekannter [Admin]
Bekannter



Anmeldung: 08.04.04
Beiträge: 1664
Wohnort: Lauf a. d. ...

BeitragVerfasst am: 19.05.2004, 19:33    Titel: Antworten mit Zitat

Hallo,

dein Sicherheits-Hinweis ist wirklich sehr interessant.


Nach oben
Private Nachricht senden Website dieses Benutzers besuchen AIM-Name MSN Messenger
Fruetel
Erfahrener [User]
Erfahrener



Anmeldung: 09.04.04
Beiträge: 63

BeitragVerfasst am: 19.05.2004, 20:10    Titel: Antworten mit Zitat

Ja, ein wichtiger Hinweis. Solche SQL-Injection Probleme tauchen auch immer wieder bei semi-professioneller Software auf, PHP-Nuke zum Beispiel hatte in der Vergangenheit öfter Probleme mit solchen Bugs. Gerade wenn der Quellcode der Scripts veröffentlicht wird, müssen die Programmierer hier sorgfältig vorgehen.

Gruss,
Thomas

_________________
Webmaster Homepage


Nach oben
Private Nachricht senden Website dieses Benutzers besuchen
RobZe89
Helfer [User]
Helfer



Anmeldung: 09.04.04
Beiträge: 212
Wohnort: Schweiz

BeitragVerfasst am: 22.05.2004, 16:13    Titel: Antworten mit Zitat

Wirklich interessant! Gabs ja auch schon bei ProSieben.de, das PHPMyadmin ohne Passwort Schutz war Mit den Augen rollen
_________________
Wir erstellen Ihre Traum Homepage
Ideal für kleine Firmen und Einzelunternehmer


Nach oben
Private Nachricht senden Website dieses Benutzers besuchen
Genesis
Helfer [User]
Helfer



Anmeldung: 09.04.04
Beiträge: 183

BeitragVerfasst am: 22.05.2004, 17:23    Titel: Antworten mit Zitat

ja sehr interessant *merk*
hehe, man braucht nur mit google nach phpmyadmin o.ä. suchen Sehr glücklich


Nach oben
Private Nachricht senden Website dieses Benutzers besuchen MSN Messenger
HKff4
Neuer [User]
Neuer



Anmeldung: 04.03.05
Beiträge: 6

BeitragVerfasst am: 05.03.2005, 10:14    Titel: Antworten mit Zitat

Hallo beisammen,

dann mal ein Nachtrag: Injections gibt es nicht nur für SQL, das geht auch bei PHP usw.

Ein simples Beispiel, das im allseits beliebten Internetexplorer mit aktiviertem Javascript funktioniert:

In die Eingabezeile eine Eingabeformulars gebe man ein:

<img src="javascript:alert('Code Injection');">

Ein nachfolgendes Script zur Verarbeitung soll die Eingabe anzeigen, z.B. ein Gästebuch, da steht dann vielleicht:

<?php
echo $Eingabe; // wegen MagicQuotes vielleicht auch
// echo stripslashes($Eingabe);
?>

Nun, da entsteht ein rotes X, aber erst nachdem die Alertbox hochkam. Die Alertbox kann auch was anderes sein, das Nachladen eines Trojaners z.B. Und das alles nur, weil der Name des Schreiber angezeigt werden soll?

Das funktioniert einwandfrei auch im IE von WinXP mit SP2.

Fatal an der Sache: Als diese Lücke entdeckt wurde, hat so ziemlich jede namenhafte Boardsoftware diesen Fehler in den BBCodes bzw. VBTags oder wie immer man die nenne mag, nicht abgefangen.

Da hat man eingegeben: [img]javascript:alert('Code Injection');[img] was ja "hinten rum" wieder in einen HTML IMG-Tag umgesetzt wird und schon lief das wieder. Die einzige Ausnahme war damals YabbSe (inzwischen eingestellt), die haben das abgefangen.

Grundsätzlich muss also jede Usereingabe, deren Daten irgendwo hineingeschrieben werden oder die angezeigt werden, überprüfen, immer nach dem Motto: All inputs are evil until proofed otherwise. (Ist nicht von mir, hat mal ein schlauer Mensch gesagt, dessen Name mir entfallen ist.)

Ja und dann die beliebten Serverscriptsprachen, PHP:

if (!MyProof("$Eingabe")) {exit;}
if ($Eingabe=="1") {include ("action1.php);}
if ($Eingabe=="2") {include ("action2.php);}

Ok, die Eingabe wird hier in einer wie auch immer gearteten Routine geprüft, sehr löblich. Was aber, wenn ich als Angreifer hergehe und in meinem Browser aufrufe:

http://.../action1.php?Eingabe=ANGRIFF

Wird in den Includes action1.php, action2.php $Eingabe auch geprüft? Sehr oft nicht und dann ist das Tor wieder auf, sperrangelweit auf! Daraus muss den Schluß ziehen: Jeder mögliche Einspeisungspunkt von Daten durch einen Anwender muss geschützt werden, egal ob er nun gewollt ist oder durch die Programmstruktur zustande kommt.

Gruß
HKff4

_________________
one-way.de - New Service


Nach oben
Private Nachricht senden Website dieses Benutzers besuchen
Andy.C
Gast [Gast]






BeitragVerfasst am: 05.03.2005, 10:32    Titel: Antworten mit Zitat

.....

Zuletzt bearbeitet von Andy.C am 20.12.2007, 23:22, insgesamt einmal bearbeitet


Nach oben
HKff4
Neuer [User]
Neuer



Anmeldung: 04.03.05
Beiträge: 6

BeitragVerfasst am: 05.03.2005, 16:04    Titel: Antworten mit Zitat

Hi Andy,

also Nachahmer gibt es dafür schon genügend. Ich habe hier keine Lücken wirklich verraten. Die Sache mit dem Javascript durch den IMG-Tag haben die namenhaften Board Softwares alle umgehend gestopft. Nur MS im IE noch nicht.

Ich bin nicht der erste, der das veröffentlicht hat, jetzt hier. Echte Kriminelle suchen sich die Exploits der Sicherheitsdienstleister und gehen auf die Anwender los, die nicht gepatcht haben.

Aber naja: Das einschleusen von Code in eingaben, die später angezeigt werden, kann man ganz einfach verhindern:

<CODE> sei die Einagbe, die mit <?php echo $Eingabe; ?> ausgegeben wird. Die Ausführung dieses Codes ist ganz banal zu verhindern, machen wir es mal sicherer:

<?php
$Eingabe=str_replace("<","&lt;",$_POST['Eingabe']");
$Eingabe=str_replace("<","&lt;",$Eingabe");

echo $Eingabe;
?>

Ende Gelände, dann heisst mein Gästebuchschreiber eben wie ein Stück Code, so wie er das wollte.

Achtung halt, wenn man selbst BBCode programmiert beim [img], weil dort enthält die Eingabe keine spitzen Klammern "<>", die setzt man dann selbst um die Eingabe des Users herum. Da muss man Dinge wie "javascript" oder so ausfiltern.

Gruß
HKff4

_________________
one-way.de - New Service


Nach oben
Private Nachricht senden Website dieses Benutzers besuchen
Micha2
Neuer [User]
Neuer



Anmeldung: 07.05.05
Beiträge: 1

BeitragVerfasst am: 19.02.2006, 22:50    Titel: Antworten mit Zitat

hm also die lösungen finde ich nicht so gut.

vielleicht liegts daran, dass ich mit perl arbeite.
mit perl lässt sich die sql injection so verhindern:

Unsichere Variante:
prepare("Select * from ...where password = $Eingabe");
execute();

Da in Eingabe auch ein Semikolon (mit anschließendem neuen Befehl sein kann)
oder wie oben bereits beschrieben lassen sich hier Befehle einschleusen(injizieren Sehr glücklich)

sichere Variante:
prepare("Select * from ...where password = ?");
execute($Eingabe);

Die letzte Variante mit den Daten, die der User eingegeben hat im Execute teil ist deshalb sicher, da hier keine Befehle mehr ausgeführt werden.

Ein Verändern der Daten die vom User kommen ist nicht mehr nötig! Winken

Grüße


Nach oben
Private Nachricht senden
Nemesis2010
User [User]
User



Anmeldung: 05.06.06
Beiträge: 11

BeitragVerfasst am: 06.06.2006, 00:56    Titel: Antworten mit Zitat

In der letzten Zeit versuch ich mich vor SQL-Injektion folgendermasen zu schützen:

ich versuche die meisten Daten bzw. Abhängigkeiten in der Datenbank mithilfe von Zahlen zu lösen.
Dann kann ich mit:
Code:
if(!is_numeric($variable)) unset($variable);
überprüfen ob der Wert "echt" ist.

Von festen Angaben erstelle ich einen md5 Wert und nur dieser wird an die Datenbank anfrage weitergegeben. (z.B. Passwort, Benutzername, ...) Dieser enthält dann natürlich keine Sonderzeichen mehr.

Und wenn man keine MD5 werte in der DB haben will könnte man das noch anders lösen, was aber mehr Serverleistung kostet.
Man könnte doch in einer Schleife jede Zeile der Tabelle auslesen und diese dann mit den übergebenen Werten vergleichen. Wenn nach ablauf der Schleife kein Treffer vorkommt, ist die Abfrage dann FALSE.

Und noch eine, leichtere Methode die DB abfrage abzusichern ist folgende:
Code:
$query = sprintf("SELECT * FROM users WHERE user='%s' AND passwort='%s'",
            mysql_real_escape_string($user),
            mysql_real_escape_string($passwort));

Mithilfe von mysql_real_escape_string($string) wird $string maskiert, so das dieser "gefahrlos" an die DB übergeben werden kann.

War für euch was interessantes Dabei ?

_________________
Mein aktuelle Projekt


Nach oben
Private Nachricht senden Website dieses Benutzers besuchen
eforium
Bekannter [Mod]
Bekannter



Anmeldung: 20.01.06
Beiträge: 1292
Wohnort: Irgendwo i ...

BeitragVerfasst am: 27.12.2006, 22:26    Titel: Antworten mit Zitat

Auch wichtig ist bei includes darauf zu achten, dass man jeweilige Punkte oder Slashs löscht:

Code:
ulr.de/test.php?f=index


Der PHP Code:

Code:
<?php

$f = $_REQUEST['f'] . 'php';

include($f);

?>


Besser so:

Code:
<?php

$f = ereg_replace('..', '', $_REQUEST['f'])
$f = ereg_replace('/', '', $f);
$f .= '.php';

include(addslashes($f);

?>


Ansonsten kann jede Datei angeschaut werden. addslashes() fügt dann noch Slashes hinzu, wenn z.B. ein $ oder sonst etwas drin ist, also dass keine Scriptvariablen im Include (wie $_SERVER['DOCUMENT_ROOT']) vorkommen können.

Nochmal besser wäre es, die Datei mit einer switch() zu überprüfen... ISt aber blöd, weil dann immer mehrere Files geupdatet werden müssen. Am besten ist es aber, ganz auf so etwas zu verzichten.

_________________
Deihro Internet Programming - Ihre Webseite zu angenehmen Konditionen
Sie suchen eine TemplateEngine? Klicken Sie!


Nach oben
Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
xxl_unna22
Helfer [User]
Helfer



Anmeldung: 23.03.07
Beiträge: 237

BeitragVerfasst am: 02.05.2007, 23:58    Titel: Antworten mit Zitat

Fruetel hat folgendes geschrieben:
Ja, ein wichtiger Hinweis. Solche SQL-Injection Probleme tauchen auch immer wieder bei semi-professioneller Software auf, PHP-Nuke zum Beispiel hatte in der Vergangenheit öfter Probleme mit solchen Bugs. Gerade wenn der Quellcode der Scripts veröffentlicht wird, müssen die Programmierer hier sorgfältig vorgehen.

Gruss,
Thomas


naja. du bist klasse!
gpl setzt halt den zugang zum code voraus - und aus dem reinen quelltext werden wohl eh bloß die profis schlau. ne injection basiert IMMER auf fehlern beim coden - also eigentlich mehr ein anfänger problem als eines der profis - würde ich mal grob sagen.
auch ein grund warum man generell von seiten im ausland die download finger lassen sollte - denn die "einrecher" installiert man sich meist brav selber auf dem server - newbie prob - die sich halt jeden code und jedes plugin - wozu auch immer auf dem server installieren.

http://www.heise.de/security/
http://www.all-about-security.de/artikel+M5312f0a00ab.html

sowie noch einige weitere !

PHP-Nuke nun ... schaun wir mal....
http://www.google.de/search?hl=de&rlz=1B2DVFC_deDE205DE205&q=PHP-Nuke+sql+injection&btnG=Suche&meta=
Ergebnisse 1 - 10 von ungefähr 263.000 für PHP-Nuke sql injection. (0,09 Sekunden)

e107
Ergebnisse 1 - 10 von ungefähr 59.400 für e107 sql injection. (0,08 Sekunden)

typo3
Ergebnisse 1 - 10 von ungefähr 140.000 für typo3 sql injection. (0,08 Sekunden)

joomla
Ergebnisse 1 - 10 von ungefähr 442.000 für joomla sql injection. (0,19 Sekunden)

Wobei man mal auch klar sagen muss - war nur ein einziger suchbegriff - in dem zusammenhang (eigenlob) beim e107 cms liegt der letzte bekannte security bug in 2004 ! danach ham wir endlich ruhe gehabt weil die plugs die in die releases einziehen - mehr als ausgiebig getestet werden.

jeder anfänger sollte sich auch mal ernsthaft fragen - wenn mir auf der straße jemand was in die hand drückt - ob man das ungesehen in den mund steckt ?

aber warum installieren dann leute sachen - von denen sie nicht mal die ersten 2 zeilen code verstehen ? genau da liegt das problem !

_________________
CMS SUPPORT - SEO - SOLAR - SPIELWAREN - BERGSCHADEN


Nach oben
Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
800XE
Bekannter [Mod]
Bekannter



Anmeldung: 24.10.04
Beiträge: 1142
Wohnort: Speyer

BeitragVerfasst am: 03.05.2007, 02:01    Titel: Antworten mit Zitat

find ich lustig das du da einen 3 Jahre alten Post Quotest

xxl_unna22 hat folgendes geschrieben:
in dem zusammenhang (eigenlob) beim e107 cms liegt der letzte bekannte security bug in 2004 !

wenn du mal einen Job suchst,
dann bewerb dich bei M$
ich glaube, dort wärst du am richtigen Platz

Ich hoffe mal,
du willst nicht sagen, weil Google über e107 weniger findet, das es diesbezüglich besser als die Anderen ist?

was weniger bekannt
darüber weniger geschrieben
deshalb weniger gefunden

wie wäre wohl die Bilanz der obigen Suche wenn sich nächste Woche alle openSourcler e107 anschauen und ihre Erkentnisse in ihren Blogs verblogen?


ich hoffe du bist mir jetzt nicht alzu böse, und möchtest mich töten, weil ich diesen Post gepostet habe ....
.... hast du vielleicht mal einen Link für mich, wo steht warum weshalb das e107 e107 heist ... wie kamms zum Namen was soll er bedeuten .... ich denke immer an Lebensmittel(farben)Zusätze wenn ich dieses e107 lese

xxl_unna22 hat folgendes geschrieben:
in dem zusammenhang (eigenlob)

meins ist besser Lachen
www.CMS800.de
oder wird es irgendwann mal sein Lachen

_________________
Seien wir realistisch, versuchen wir das Unmögliche!
CMS800 :::::::::: Andy 800XE Zmuda :::::::::


Nach oben
Private Nachricht senden Website dieses Benutzers besuchen
maject
User [User]
User



Anmeldung: 22.03.06
Beiträge: 13

BeitragVerfasst am: 10.06.2007, 22:35    Titel: Allgemeine Sicherheit Antworten mit Zitat

Allgemein gesagt ist das Thema Sicherheit ein weites Feld. Jedoch sollte man sich als Softwareprogrammierer damit ausgiebig beschäftigen. Viele der Threads sprachen schon an, dass SQL-Injections über die Paramter POST und GET kommen. Wer diese vollständig abhorcht, ist im Vergleich zu semi-professioneller Software auf der guten Seite. Man sollte aber nicht vergessen, dass es auch eine SQL-Injection über die globale Variable $_SERVER erfolgen kann. Häufig nutzen zum Beispiel Statistiken die Variabale $_SERVER['HTTP_USER_AGENT'], die wie alle anderen Parameter/Variablen auch manipuliert sein kann. In diesem Falle durch einen vorgeschalteten Proxy oder mittels eines Browser-Plugins.

Auch zu der Passwort-Abfrage möchte ich mich einschalten:

Die nachfolgende MySql-Abfrage ist unsicher:
Code:

$query = " select `id` from `benutzer` where
                `name`='".$_POST['name']."' and
                `passwort`='".$_POST['passwort']."' Limit 0,1";


Zum Einen kann hier durch eine Kommentierung im Benutzernamen die Passwortüberprüfung hintergangen werden, zum Anderen wird auch nicht (wie viele nicht wissen) auf eine Groß und Kleinschreibung geachtet. Dies mag beim Benutzernamen vielleicht erwünscht sein, jedoch das Passwort verliert dadurch an Sicherheit.

Deshalb verwende ich seit Jahren, so oft wie es nur geht, die nachfolgende SQL-Abfrage. Die Performance, die merklich nur bei großen Portalen herabfällt nehme ich dabei in Kauf:

Code:
 where md5(benutzername) = '".md5($_POST['benutzer'])."' and md5(passwort) = '".md5($_POST['passwort'])."'


Wie man sieht ist Sicherheit nach Jahren noch ein Thema, und wird (leider) auch in Jahren noch Thema sein. Für angehende PHP-Programmierer rate ich deshalb zu sich wirklich damit mal intensiv zu beschäftigen. Ich habe die Erfahrung gemacht, dass ich mittels Bücher sehr viel an Wissen erlange. Manche mögen lieber Tutorials, andere Animationen - für jeden ist etwas dabei! Und leider habe ich auch die Erfahrung gemacht, dass man in relativ einfachen Code sehr viele sicherheitsrelevante Fehler machen kann.
Zum Schluss möchte ich noch darüber philosophieren Sehr glücklich ! Die Zeit, die ich für die Sicherheit meiner PHP-Scripte aufwende scheint im ersten Moment sehr absurd. Man bekommt auch sonst Lohn oder Dank dafür. Kunden wollen das ihr Script das tut was Sie möchten und selten über den Tellerrand hinaus - "das Kostet ja viel mehr...". Ich versuche deshalb so viele Statistiken wie möglich darüber zu haben, wie viele Angriffe gemacht wurden und natürlich ob diese Erfolgreich abgewehrt wurden. Bei mir kommt dann am Ende ein "Belohnungsgefühl" heraus - das sollte bei Hobby (bisher bei mir leider noch so...) -Programmierern nie fehlen.


Nach oben
Private Nachricht senden E-Mail senden
Upitis
Neuer [User]
Neuer



Anmeldung: 28.01.06
Beiträge: 2

BeitragVerfasst am: 11.06.2007, 18:17    Titel: Antworten mit Zitat

Um XSS(Cross-Scripting) Lücken gut abzusichern gibt es folgende Tags:
strip_tags($string) >Entfernt PHP, HTML Tags
htmlentities($string) Wandelt alle Symbole, wie z.B. <> in die in HTML verwendeten Entities um.

Baut diese Abfragen ein und euer Script ist auch gegen XSS-Sicherheitslücken gefeit.


Nach oben
Private Nachricht senden MSN Messenger
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

Gehe zu:  

Ähnliche Beiträge
Thema Autor Forum Antworten Verfasst am
Keine neuen Beiträge Mysql Error powerup Serverseitige Websprachen 6 21.07.2008, 19:07 Letzten Beitrag anzeigen
Keine neuen Beiträge php "switch" mit mysql ausf... ihaha Serverseitige Websprachen 0 16.07.2008, 17:25 Letzten Beitrag anzeigen
Keine neuen Beiträge Biete meine Dienstleistungen (PHP,MyS... uliweb Kleinanzeigen 0 24.04.2008, 08:51 Letzten Beitrag anzeigen
Keine neuen Beiträge MySQL: Cross Join / Inner Join Kartoffelchen Serverseitige Websprachen 3 16.04.2008, 13:04 Letzten Beitrag anzeigen
Keine neuen Beiträge MySQL Abfrage BiBaButzemann Serverseitige Websprachen 3 28.03.2008, 20:12 Letzten Beitrag anzeigen
Threadübersicht