![]() |
| | Themen-Optionen |
| | Nach oben #1 |
| Neuer Benutzer Registriert seit: 12.01.2006
Beiträge: 21
|
Hi @ all! Ich bin gerade dabei etwas zu entwickeln um meine $_POST und $_GET-Variablen global zu sichern. Via addslashes() und mysql_real_escae_string werden sie bereits gesichert, aber gegen erweiterte MySQL-Injektion ist mein Script immer noch nicht imun. Nun wollte ich Fragen wie ich SQL-Befehle aus einem String entfernen kann. Gibt es dafür eine Funktion oder muss ich alle SQL-Befhle selber auflisten und entfernen? Welche SQL-Befehle sollten auf jeden Fall entfernt werden? Und was sollte ich noch aus meinen $_POST/$_GETs entfernen? Ich übergebe in meinem Script lediglich Integer und String-Werte ohne irgenwelche Sonderzeichen. Danke für Hilfe! MFG Pain-maker |
| | |
| | Nach oben #2 |
| Christian Mühlroth Registriert seit: 04.09.2005 Ort: Nürnberg
Beiträge: 561
|
Wieso langt dir mysql_real_escape_string nicht? Das escaped doch alle Anführungszeichen. Befehle werden dadurch doch ausgeschlossen, vorausgesetzt deine auführenden MySQL-Queries sind sauber programmiert..
__________________ http://www.ChrisDiary.De |
| | |
| | Nach oben #3 | ||
| Bastian Fenske Registriert seit: 04.01.2006 Ort: Kassel
Beiträge: 826
| Zitat:
Zitat:
magic_quotes.gpc ist übrigens schon so ein missratener Versuch, Skripte pauschal vor Injections zu schützen. Meine Herangehensweise ist die, magic_quotes.gpg ggf. erstmal rückgängig zu machen und dann die Werte je nach Bedarf zu prüfen oder filtern. Basti | ||
| | |
| | Nach oben #6 | |
| Martin Breuer Registriert seit: 17.08.2005 Ort: Berlin
Beiträge: 1.642
|
hehe immer wieder gerne zu lesen. Zitat:
__________________ I did it my way - Senseless-Blog | |
| | |
| | Nach oben #7 | |
| Christian Mühlroth Registriert seit: 04.09.2005 Ort: Nürnberg
Beiträge: 561
| Zitat:
Code: SELECT spalte FROM tabelle WHERE username = test
__________________ http://www.ChrisDiary.De | |
| | |
| | Nach oben #8 |
| me pro ok? Registriert seit: 07.09.2005 Ort: Pulheim bei Köln
Beiträge: 964
|
magic_quotes_gpd, magic_quotes_runtime und magic_quotes_sybase ausmachen und über jeden Wert, der in einen Query reinsoll, mysql_real_escape_string() drüberrutschen lassen. Das reicht. Wie soll man denn von außen jetzt noch ine Query reinkommen? Gar nicht, jedenfalls nicht ohne Shellzugang.
__________________ Gedanken aus Draht stricken einen Zaun. |
| | |
| | Nach oben #9 |
| Neuer Benutzer Registriert seit: 12.01.2006
Beiträge: 21
|
Erstmal danke zu den zahlreichen Beiträgen! Nun die aktuelle Ausgabe von PHP Solutions erklärt ausführlich wie es z.B. durch Binärzahlen oder Kommentierung möglich ist trotzdem eine Injektion durchzuführen. Das ist dann eben eine erweiterte Injektion. Deswegen dachte ich mir das es wohl am Besten wäre einfach $_POST/$_GET auf MySQL-Befehle zu überprüfen und diese ggf zu entfernen oder eine Fehlermeldung auszuspucken. Ich würde nun mal einfach gerne einen Weg finden um mittels einer Funktion einfach meine Globals zu sichern ohne jeden einzelnen Wert zu überprüfen. Könnte mir jemand eventuell erklären warum mein Ansatz mit den Befehlen so falsch ist? MFG Pain-maker |
| | |
| | Nach oben #10 | ||||
| Bastian Fenske Registriert seit: 04.01.2006 Ort: Kassel
Beiträge: 826
| Zitat:
Zitat:
Zitat:
Zitat:
Klar, wenn du weißt, deine gesamte Anwendung erwartet ausschließlich Werte, die auf oben genannten PCRE-Pattern passen, dann mach das so. Nur bist du damit eben exrem eingeschränkt. Damit kannst du z.B. nichts anbieten, wo ein Benutzer mal einen "normalen" Text eingibt, sei es auch nur die Bezeichnung für eine neu einzugenbende Ressource oder was auch immer. Ich tu mich schwer, mit eine Anwendung vorstellen, bei der es keine solche Eingaben gäbe die aber dennoch groß genug wären, um sich über sowas hier überhaupt Gedanken zu machen. Auch legst du mit der Art der Prüfung/Filterung pauschal fest, was hinterher mit den Daten passieren soll (so in etwa zumindest). Wenn du also z.B. Daten in eine MySql-DB packst und pauschal alle Werte durch mysql_real_escape_string() jagst fällt dir vielleicht hinterher ein, dass einige der Daten doch besser in Dateien untergebracht werden, dass Webservices angesprochen werden sollen etc. und dise Systeme haben dann wieder ganz andere Kriterien, wie gefiltert werden muss. Den Filter kannst da dann auch nicht einfach nur enger ziehen, auf den kleinsten gemeinsamen Nenner sozusagen, da du dann ja womöglich bereits unter anderen Kriterien gespeicherte Datensätze nicht mehr ansprechen kannst. Es ist einfach ein Wert, in der Anwendung auf exakt das zugreifen und reagieren zu können, was der Benutzer (etc.) übergeben hat, den ich mir nicht nehmen lassen würde - eben, weil es dich extrem einschränkt, gerade, was die Erweiterung deiner Anwendung angeht. Dann schreibst du "meine Globals zu sichern". Abgesehen davon, dass die keinen Schutz brauchen (*g Ja, und einzeln überprüfen musst du die Werte noch lange nicht. In der Regel liegen die doch als Array vor und so lässt du die Escaping-Funktion einfach in der query-Methode deiner Datenbank-Klasse drübelaufen (oder entsprechendes eben). Das gleiche machst du ja z.B. sicher auch bei der Ausgabe der Daten in HTML-Seiten, ohne deshalb gleich alle Werte als Html-Entities in die Datenbank zu schreiben oder im anderen Extrem, eben auch jeden Wert einzeln umkodierst. Basti Geändert von Basti (11.09.2006 um 18:58 Uhr). | ||||
| | |
![]() |
| Lesezeichen |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
| Themen-Optionen | |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Problem bei Verarbeitung von Templates (Eigene Klassen) | dago | PHP-Programmierung | 21 | 31.08.2006 16:02 |
| Datei einlesen. | cyberdevil87 | Allgemeine Java-Programmierung | 3 | 27.06.2005 09:22 |