| G.P. |
Geschrieben am: Do 11.10.2007, 14:46
|
|
AyomRank 6 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Gruppe: Member (aktiv) Beiträge: 801 Mitglied seit: 21.10.2004 |
Wie man leicht den Titel entnehmen kann geht es um die Abwehr von SQL Injektion.
Ich weiss leider nicht wie man am besten Variablen aus Texteingabefeldern am besten validiert, da sie ja eigentlich jeden Inhalt haben. Momentan markiere ich eigentlich nur die Sonderzeichen mit folgenden Befehl, aber das reicht sicher noch nicht aus. Hat jemand eine guten Hinweis? htmlentities($_POST['message'],ENT_QUOTES); MfG GP -------------------- |
![]() |
| sd12 |
#2 Geschrieben am: Do 11.10.2007, 15:00 (+00:14)
|
||
![]() AyomRank 9 Gruppe: Moderatoren Beiträge: 3581 Mitglied seit: 3.03.2004 |
erstelle eine Datei security.php darin fügst Du folgenden Code ein:
Diese security.php muss nun auf JEDER Seite includet werden. include"security.php"; -------------------- ************************
Treiber f[r das Kezboard ist [berfl[ssig. |
||
![]() |
| G.P. |
#3 Geschrieben am: Do 11.10.2007, 15:12 (+00:11)
|
|
AyomRank 6 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Gruppe: Member (aktiv) Beiträge: 801 Mitglied seit: 21.10.2004 |
Danke fuer die Datei.
Aber ein reines Includen reicht da nicht aus, oder? Muss ich die zu ueberpruefenden Werte jetzt an die function uebergeben? MfG GP -------------------- |
![]() |
| sd12 |
#4 Geschrieben am: Do 11.10.2007, 15:33 (+00:21)
|
![]() AyomRank 9 Gruppe: Moderatoren Beiträge: 3581 Mitglied seit: 3.03.2004 |
Doch, das includen als erste Zeile Code sollte ausreichen.
Ich arbeite nicht mit funktionen, desshalb kann ich es nicht garantieren. Aber mach einfach schnell einen Test. -------------------- ************************
Treiber f[r das Kezboard ist [berfl[ssig. |
![]() |
| G.P. |
#5 Geschrieben am: Do 11.10.2007, 15:42 (+00:09)
|
|
AyomRank 6 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Gruppe: Member (aktiv) Beiträge: 801 Mitglied seit: 21.10.2004 |
Ich ahbe es mal ausgestestet und die Funktion muss mit der zu ueberpruefenden Variablen aufgerufen werden.
Auch ist mir aufgefallen, das unter verwendung von "htmlentities" das ganze Script unnoetig wird. Wenn ich das richtig sehe, schuetzt das Script nur vor "Fehlerhaften" HTML und Javascript Anweisungen. Unter der Verwendung von "htmlentities" sind diese aber gar nicht moeglich, da alle Tags maskiert werden. MfG GP -------------------- |
![]() |
| hatschi1810 |
#6 Geschrieben am: Do 11.10.2007, 15:48 (+00:05)
|
![]() AyomRank 6 Gruppe: Experten Entwicklung (Mod) Beiträge: 638 Mitglied seit: 20.01.2004 |
Meiner Meinung nach würde ich mich gegen MySql-Injections nicht auf RemoveXSS, das wohl eher auf Cross Site Scripting abzielt, verlassen.
Beispiel: require_once('db.inc.php'); $order = isset($_GET['o']) ? $_GET['o'] : 'userid'; $order = (mysql_real_escape_string(RemoveXSS($order))); RunQuery("SELECT userid, username FROM sql_injection_test ORDER BY $order"); Aufruf mit o=IF ( (SELECT userid FROM sql_injection_test WHERE username=0x57696e6e6965 AND password=0x31323334), userid, username) geht ohne Probleme auch zusammen mit mysql_real_escape_string durch! Das Statement sieht dann so aus: „SELECT userid, username FROM sql_injection_test ORDER BY IF ( (SELECT userid FROM sql_injection_test WHERE username=0x57696e6e6965 AND password=0x506f6f68), userid, username)” Es gibt dazu einen super Artikel und ein „Testkit“ unter: http://webappsec.org/projects/articles/091007.shtml |
![]() |
| jAuer Jürgen Auer - freiberufl. Programmierer |
#7 Geschrieben am: Do 11.10.2007, 16:13 (+00:25)
|
|
AyomRank 9 Gruppe: Experten Entwicklung Beiträge: 2432 Mitglied seit: 4.02.2006 |
Sql-Injektionen beruhen darauf, daß der Sql-Code on the fly zusammengebaut und daß durch Benutzereingaben zusätzliche Logik, also Elemente außerhalb von Parameterwerten, eingefügt werden.
Das Problem läßt sich vollständig vermeiden, wenn man auf das Zusammenbauen on the fly verzichtet und alle Zugriffe über gespeicherte Prozeduren abwickelt, denen Parameter übergeben werden. Damit wird der Code, die Logik, kompiliert und die Parameterwerte erst anschließend ergänzt. Die Logik läßt sich nun nicht mehr verändern. Alles andere ist angesichts von Beispielen ähnlich zu denen, die @hatschi1810 gepostet hat, nur ein Kampf gegen Windmühlenflügel. -------------------- Web-Anwendung 3.0: Ein Online-Kalender für Termine vieler Filialen.
server-daten - die Single-Data-Solution: Web-Datenbanken als Online - CRM - Lösung. Ihre Geschäftsprozesse entscheiden, was Ihre Online-Datenbank macht. Sie konzentrieren sich auf Ihr Kerngeschäft - Ihre Datenbank funktioniert. |
![]() |
| hatschi1810 |
#8 Geschrieben am: Do 11.10.2007, 16:22 (+00:08)
|
![]() AyomRank 6 Gruppe: Experten Entwicklung (Mod) Beiträge: 638 Mitglied seit: 20.01.2004 |
Wie Jürgen schreibt sind prepared statements sicher die beste Lösung, leider hinken da die meisten PHP-Anwendungen doch erheblich nach.
Mit meinem Beispiel wollte ich auch nur zeigen das sowohl mysql_real_escape_string als auch selbstgebastelte/kopierte Lösungen leider nicht 100% sicher sind. |
![]() |
| jAuer Jürgen Auer - freiberufl. Programmierer |
#9 Geschrieben am: Do 11.10.2007, 16:59 (+00:37)
|
|
AyomRank 9 Gruppe: Experten Entwicklung Beiträge: 2432 Mitglied seit: 4.02.2006 |
Die Konsequenz heißt für mich einfach, daß entsprechende Programmierumgebungen (mySql-Version, die keine Stored Procedures unterstützt oder bewußte Nichtnutzung des entsprechendes Features der Datenbank durch die Entwickler) für ernstzunehmende Online-Anwendungen nicht geeignet bzw. nicht zulässig sind / sein dürfen.
Von PHP habe ich zu wenig Ahnung. Aber gibt es denn in PHP nicht eine Möglichkeit, sP aufzurufen und Parameter zu übergeben? Die Erstellung der sP macht zwar ziemlich viel Arbeit, aber damit ist das Problem der Sql-Injektionen lösbar. Voraussetzung ist natürlich ein passendes Backend - Postgres oder eine der neueren mySql-Versionen. -------------------- Web-Anwendung 3.0: Ein Online-Kalender für Termine vieler Filialen.
server-daten - die Single-Data-Solution: Web-Datenbanken als Online - CRM - Lösung. Ihre Geschäftsprozesse entscheiden, was Ihre Online-Datenbank macht. Sie konzentrieren sich auf Ihr Kerngeschäft - Ihre Datenbank funktioniert. |
![]() |
| Sven K |
#10 Geschrieben am: Do 11.10.2007, 19:44 (+02:44)
|
|
AyomRank 4 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Gruppe: Member (aktiv) Beiträge: 144 Mitglied seit: 27.10.2006 |
mysql_real_escape_string bei der eingabe und htmlentities bei der ausgabe reichen vollkommen aus.
-------------------- |
![]() |
| PH |
#11 Geschrieben am: Do 11.10.2007, 20:03 (+00:19)
|
|
AyomRank 7 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Gruppe: Member (aktiv) Beiträge: 1260 Mitglied seit: 29.08.2004 |
eine andere Möglichkeit ist mod_security
|
![]() |
Thema wird von 0 Benutzer(n) gelesen (0 Gäste und 0 anonyme Benutzer)
0 Mitglieder:
« Banner werden in der Homepage nicht angezeigt | Programmierung Allgemein | Umstellung von php3 auf php4 »
Trackback-Url: http://www.ayom.com/track/t/21056
![]() |
![]() ![]() ![]() |
Anzeige - [Hier werben / Mediadaten]


















