![]() |
| | Themen-Optionen |
| | Nach oben #1 |
| Blubb... öfz Registriert seit: 16.03.2006 Ort: Berlin
Beiträge: 419
|
Hi, ich überlege mir gerade, wie ich mittels einer Methode eine SQL-Injection verhindern kann. Also nicht eine Methode, die ich bei jedem einzutragenden Wert nutze, sondern die einen kompletten Query incl eventueller Subqueries, Joints und Unions "scannt" und eben den Standard PHP-Code: Ich würde das mit pattern angehen - allerdings wollte ich erstmal eure Meinung hören, ob das von der Performance her überhaupt zu empfehlen wäre. Ich bin unschlüssig, da ich denke, dass dann pro Query eben ne menge Arbeit auf den Interpreter zukommt.
__________________ Vive la France! Welcome to Sarkoworld... |
| | |
| | Nach oben #3 |
| Bastian Fenske Registriert seit: 04.01.2006 Ort: Kassel
Beiträge: 826
|
Hi. Erstmal ist deine "Standard"-Methode Käse, denn die eine Operation wird (zumindest so ähnlich) gemacht, um eingehende Werte wieder in den Zustand zu versetzen, in dem sie eigentlich erwatet würden und die zweite betrifft dann das Escaping für eine MySQL-Query. Gehört also mal garnicht zusammen. Weiter ist das so nicht umsetzbar, wie du dir das vorstellst (wenn ich dich richtig verstehe). Das Ding ist doch, dass deine Queries eine bestimmte Struktur haben, in die Werte eingepflanzt werden. Damit die Werte die Struktur nicht ändern, verwendest du eben mysql_real_escape_string(). Wenn du nun erst die Werte einsetzt, um dann die Struktur zu analysieren, haben die Werte die Struktur womöglich bereits verändert. Ich benutze einfach eine query-Methode in der Datenbank-Klasse, der ich a) die Query mit Platzhaltern und b) ein Array mit den Werten übergebe. Siehe auch PDO und mysqli (prepare). Basti Geändert von Basti (14.11.2006 um 19:42 Uhr). |
| | |
| | Nach oben #4 |
| Blubb... öfz Registriert seit: 16.03.2006 Ort: Berlin
Beiträge: 419
|
Danke, werde es also wie üblich machen und jeden Wert einzeln abfragen. @Basti, habe mir vorhin während meines Posts was über PDO durchgelesen. Scheint sinnvoll zu sein, allerdings müsste ich dafür mein gesamtes System umkrempeln - was mir jetzt zu viel Arbeit wäre. Für das nächste Projekt werd ich mir das mal überlegen, auch das mit dem Query mit Platzhaltern klingt gut - ist aber auch wieder ne Sache der Uumgewöhnung
__________________ Vive la France! Welcome to Sarkoworld... |
| | |
| | Nach oben #6 |
| Jonas Registriert seit: 03.06.2006
Beiträge: 240
| Wäre dann eine Funktion, die so aussieht ok/vernünftig: PHP-Code: PHP-Code:
__________________ Applikations-Programmierung: BlitzMax, BlitzPlus Webentwicklung: PHP, (X)HTML, CSS, JavaScript, MySQL Geändert von Artemis (15.11.2006 um 08:50 Uhr). |
| | |
| | Nach oben #7 |
| Bastian Fenske Registriert seit: 04.01.2006 Ort: Kassel
Beiträge: 826
|
Diesen Extra-Schritt kannst du dir doch komplett sparen. Bei mr sieht das verkürzt so aus: PHP-Code: |
| | |
| | Nach oben #8 |
| Benutzer Registriert seit: 24.10.2006
Beiträge: 90
|
Ehrlich gesagt wenn man jetzt nicht unbedingt die schier unendlichen mysqli_*, oci_* ... Funktionen benötigt, weil man total auf eine Datenbank optimiert so sollte auf jeden Fall PDO verwendet werden. PDO bietet für fast alle Datenbanken native Treiber an. Bei PDO hast du auch Prepared Statements (mysqli überigens auch). Verwendest du die und verwendet deine Applikation die gleiche Zeichenkodierung wie die Datenbank so hast du alles gemacht um dich vor SQL Injections zu schützen. Sachen mit mysqli_real_* sind IMHO nervend. Außerdem ist die Gefahr groß einmal mysql_real_* zu vergessen und schon hast du ne Schwachstelle. MfG Byrel |
| | |
| | Nach oben #9 |
| Bastian Fenske Registriert seit: 04.01.2006 Ort: Kassel
Beiträge: 826
|
...wenn du ein DAOs, wie das hier oben benutzt, kannst du die Connection-Klasse dahinter beliebig austauschen (mysql -> mysqli -> pdo -> ...). Wichtig ist halt, dass du TransferObjects zurück gibst, die vom eigentlich zurückgegebene Datenformat unabhängig machen und das Ergebnis hinter einer einheitlichen Schittstelle kapseln. Basti |
| | |
![]() |
| Lesezeichen |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
| Themen-Optionen | |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Zugriff auf Wert des vorhergenden Datensatzes in einer SQL Abfrage | Jay | Datenbanken | 5 | 17.07.2006 15:25 |
| sql injection | robo47 | Plauderecke | 3 | 18.05.2006 16:24 |
| Modifier haben einen Wert, obwohl keine gedrückt sind | materthron | Desktop-Applikationen und Grafik | 3 | 06.11.2005 16:28 |