![]() |
| | Themen-Optionen |
| | Nach oben #1 |
| Benutzer Registriert seit: 26.03.2008 Ort: paderborn
Beiträge: 43
|
moin! ich uebergebe per link zb, profil.php?uid=12, die userid 12. funktioniert, weil den user mit der id 12 gibt es. nehmen wir mal an ein benutzer editiert den link zu bloedsinn wie profil.php?uid=1edf_werw32...dann krieg ich hier nur fehlermeldungen. wie fange ich sowas ab?
__________________ gruss, richy |
| | |
| | Nach oben #2 |
| Corvin Gröning Registriert seit: 19.03.2005 Ort: S-H | Flensburg
Beiträge: 449
|
Überprüf, ob es sich bei $_GET['uid'] um eine Zahl handelt. Am einfachsten geht das mit is_numeric().
__________________ |
| | |
| | Nach oben #4 |
| Der Student Registriert seit: 03.01.2007 Ort: München
Beiträge: 86
|
Naja ist doch recht einfach. Wenn der Query "leer" ist, also keine Daten zurück gibt weißt du dass es diesen User nicht gibt! Dann kannst du selber entweder nichts machen oder ne eigene Fehlermeldung dem Nutzer anzeigen.
__________________ Wenn ich du wäre, wäre ich lieber ich. http://www.clubstars.net http://www.x-tinct.de |
| | |
| | Nach oben #6 | ||
| Benutzer Registriert seit: 26.03.2008 Ort: paderborn
Beiträge: 43
| Zitat:
Zitat:
__________________ gruss, richy | ||
| | |
| | Nach oben #7 |
| Corvin Gröning Registriert seit: 19.03.2005 Ort: S-H | Flensburg
Beiträge: 449
| Schau dir vor allem die Beispiele an. Nicht, wenn überprüft wird, ob es sich um eine Zahl handelt.
__________________ |
| | |
| | Nach oben #8 |
| Benutzer Registriert seit: 26.03.2008 Ort: paderborn
Beiträge: 43
|
ok... muss ich bei jedem query irgendwas escapen, oder nur wenn ich einen string uebergebe? nehmen wir mal an ich habe eine liste.php, die defaultmaessig alle profile listet. jetzt baue ich die moeglichkeit ein diese liste zu filtern per liste.php?zeigen=neueste_profile und setze die query in eine if-klammer: PHP-Code:
__________________ gruss, richy |
| | |
| | Nach oben #10 |
| Jann Hendrik Bekaan Registriert seit: 02.12.2004 Ort: Wildeshausen
Beiträge: 2.213
|
Grundregel dabei ist: ALLES was vom Benutzer kommt kann auch Schaden anrichten. Was Sicherheitsfragen rund um PHP angeht kann ich dir dieses Buch empfehlen! PHP-Sicherheit
__________________ Umfragen: Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Danke! |
| | |
| | Nach oben #11 | |
| Bastian Fenske Registriert seit: 04.01.2006 Ort: Kassel
Beiträge: 826
| Zitat:
Du musst einfach sicherstellen, dass die übergebenen Werte den Sinn deiner Abfrage nicht umbiegen können. Angenommen, du hast folgende Abfrage: PHP-Code: Das könnte z.B. so aussehen: PHP-Code: Das bedeutet also, dass hier jeder beliebige Benutzer (oder Angreifer) diesen Wert selbst festlegen kann. Konkret heißt das, dass du der Öffentlichkeit folgendes Werkzeug anvertraust: Code: SECET * FROM `users` WHERE `user` = '<beliebige Eingabe>' ?user=niemand' or `user`='admin Zusammengesetzt mit obigem Code wird daraus die Abfrage: Code: SECET * FROM `users` WHERE `user` = 'niemand' or `user`='admin' Jetzt stellt PHP für sowas einen halbherzigen Schutzmechanismaus zur Verfügung, den du über die Konfigurations-Option magic_quotes.gpc an- und ausschalten kannst: http://php.net/manual/en/security.magicquotes.php Dadurch werden also z.B. Hochkommata escaped. Das ist nett gedacht, aber letztlich nervig und unsinnig und schlecht umgesetzt, siehe hier: http://bugs.php.net/bug.php?id=29776 Das eigentliche Problem ist ein konzeptionelles, denn woher soll PHP wissen, was du mit den Daten vorhast. Hast sicherlich schonmal Gästebücher oder automatisch generierte E-Mails gesehen, in denen dann z.B. Hallo \"Paul\" zu lesen war. Besser ist folgendes Vorgehen: Alle Daten so annehmen, wie sie vom Benutzer gemeint waren bzw. eben geschickt wurden und dann, je nach Verwendung die enthaltenen Sonderzeichen entschärfen. Also: 1. magic_quotes.gpc überprüfen und ggf. die Wirkungen rückgängig machen, um die ursprünglichen daten wieder herzustellen (siehe z.B. den Code von php at kaiundina dot de im oben verlinkten Bug-Report). 2. Je nach Verwendung Daten manipulieren. Hier musst du eben sicherstellen, dass die Daten auch wirklich dem Format entsprechen, das du erwartest (also auch z.B. die Länge einer Zeichenkette beim Schreiben in die Datenbank berücksichtigen) und die Steuerzeichen für den jeweiligen Kontext „escapen“. Und das sind halt völlig andere, ob du die Daten ausspucken möchtest (htmlentities()), in eine MySQL-Datenbank packen möchtest (mysql_real_escape_string()), an die Shell übergeben möchtest (escapeshellarg()), in eine CSV-Datei schreiben möchtest etc. Ich benutze für MySQL eine Klasse, der ich die Query und die Werte getrennt übergebe: PHP-Code: Nur beim Einfügen von Werten musst du natürlich prüfen, was da reinpasst. In ein Feld INT passt natürlich kein Text oder keine Fließkommazahl etc. Ein beliebter Fehler in diesem Zusammenhang ist z.B. auch, die E-Mail-Adresse bzw. den Namen nicht zu entschärfen, den ein Benutzer in ein Kontaktformular eingibt und diese Daten dann ungefiltert an mail() zu übergeben. Damit kann man dein Formular dann wunderbar nutzen, um SPAM zu verschicken. Dazu findest du Material unter dem Stichwort „e-mail header injection“. Hoffe, das gibt dir ein klareres Bild von der Thematik. Basti Geändert von Basti (31.03.2008 um 13:08 Uhr). | |
| | |
| | Nach oben #13 |
| Benutzer Registriert seit: 26.03.2008 Ort: paderborn
Beiträge: 43
|
mal noch ne blöde frage: im php.net tutorial befindet sich die db-verbindung in einer if-klammer: PHP-Code:
__________________ gruss, richy |
| | |
| | Nach oben #14 |
| Jonas Registriert seit: 03.06.2006
Beiträge: 240
|
Nein, man kann die Datenbankverbindung öffnen, wann man lustig ist. Das Beispiel prüft, ob auch alle POST-Variablen vorhanden sind und baut erst dann eine Verbindung auf, da sonst überhaupt keine Verbindung notwendig ist. Ich kaufe mir ja auch erst das Baumaterial wenn ich eine Baugenehmigung habe.
__________________ Applikations-Programmierung: BlitzMax, BlitzPlus Webentwicklung: PHP, (X)HTML, CSS, JavaScript, MySQL |
| | |
| | Nach oben #16 |
| Corvin Gröning Registriert seit: 19.03.2005 Ort: S-H | Flensburg
Beiträge: 449
|
__________________ |
| | |
| | Nach oben #20 |
| Jann Hendrik Bekaan Registriert seit: 02.12.2004 Ort: Wildeshausen
Beiträge: 2.213
| Das kommt ganz drauf an! Das würde ich so jedenfalls nicht direkt unterschreiben!
__________________ Umfragen: Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Danke! |
| | |
![]() |
| Lesezeichen |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
| Themen-Optionen | |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Frage zu Aufklapp-Menü mit CSS | Hobbyuser | HTML, XML und CSS | 8 | 12.08.2006 18:41 |
| [Smarty] Variable in variable aus Konfigurationsdatei umwandeln? | thrawn | PEAR, PECL und Frameworks | 9 | 20.07.2006 11:52 |
| Get und Post aufruf in Servlet | js-mueller | Allgemeine Java-Programmierung | 2 | 28.04.2006 20:36 |
| Probleme mit Variable in SQL Anweisung | Doggi | Datenbanken | 10 | 15.12.2005 14:04 |
| Variablennamen mit Variable. | Creativ | PHP-Programmierung | 9 | 30.11.2005 08:40 |