![]() |
|
|
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: 450
|
Ü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: 450
|
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 |
|
Projektleiter
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.225
|
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 | |
|
Erfahrener Benutzer
Registriert seit: 04.01.2006
Ort: Kassel
Beiträge: 789
|
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 |
|
Semantic Web Fanatic
Registriert seit: 03.06.2006
Beiträge: 237
|
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: 450
|
__________________
|
|
|
|
|
|
Nach oben #20 |
|
Projektleiter
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.225
|
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! |
|
|