|
| TTlong |
Geschrieben am: Sa 7.04.2007, 20:53
|
||
|
AyomRank 5 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Gruppe: Member (aktiv) Beiträge: 313 Mitglied seit: 8.02.2007 |
Hallo, ich beschäftige mich gerade mit der Sicherheit von PHP-Anwendungen und habe folgenden Code aus einem Buch:
Es geht hier darum, serverseitiges Cross-Site-Scripting durch URL-Injection zu verhindern. Im obigen Beispiel sollen nur die dateien "a", "b" oder "c" eingebunden werden dürfen (eine whitelist), andernfalls die(). Es funktioniert aber so nicht ( die() ). Es gibt natürlich die Dateien a.php etc. Muss ich für 'skript noch irgendetwas einsetzen oder ist es dort an der richtigen Stelle? Irgendwie stehe ich auf dem Schlauch. -------------------- Linkpartner für verschiedene Erotik-Projekte gesucht => PN genügt
|
||
![]() |
| TTlong |
#2 Geschrieben am: So 8.04.2007, 10:34 (+13:41)
|
|
AyomRank 5 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Gruppe: Member (aktiv) Beiträge: 313 Mitglied seit: 8.02.2007 |
Hat keiner eine Idee?
-------------------- Linkpartner für verschiedene Erotik-Projekte gesucht => PN genügt
|
![]() |
|
#3 Geschrieben am: So 8.04.2007, 10:43 (+00:08)
|
|
|
AyomRank 3 ![]() ![]() ![]() ![]() ![]() ![]() Gruppe: Member (aktiv) Beiträge: 43 Mitglied seit: 15.09.2004 |
was ist die Fehlermeldung?
und probier mal die(); |
![]() |
| jAuer Jürgen Auer - freiberufl. Programmierer |
#4 Geschrieben am: So 8.04.2007, 10:48 (+00:04)
|
||||
|
AyomRank 9 Gruppe: Experten Entwicklung Beiträge: 2206 Mitglied seit: 4.02.2006 |
Ich kenne mich mit PHP nicht wirklich aus, von daher schweige ich bei solchen Dingen lieber. Auf die Entfernung fällt mir zu dem Code ein: $_GET['skript'] vor der Prüfung einmal ausgeben lassen (mit umgebenden Dummy-Buchstaben), um zu sehen, was tatsächlich übergeben wird. Eine Funktion ist nicht definiert (in_array?) Ist es legitim, require an so einer Stelle einzufügen? Da die Adressierung auf die Datei relativ ist: Stimmt das? Sprich: Davor irgendeine Testüberprüfung rein, ob die Datei existiert bzw. sich einmal den aktuellen Pfad ausgeben lassen. -------------------- Web-Anwendung 3.0: Ein Online-Kalender für Termine vieler Filialen.
server-daten: Web-Datenbanken als Online - CRM - Lösung. Konzentrieren Sie sich auf Ihr Kerngeschäft - nutzen Sie eine schlanke, schnelle Online-Datenbank von verschiedenen Standorten. |
||||
![]() |
| G.P. |
#5 Geschrieben am: So 8.04.2007, 11:17 (+00:29)
|
||
|
AyomRank 6 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Gruppe: Member (aktiv) Beiträge: 720 Mitglied seit: 21.10.2004 |
Um diesen Angriff zu vermeiden, nutze ich immer folgende moeglichkeit. Evtl. hilft es dir ja etwas
MfG GP -------------------- |
||
![]() |
| TTlong |
#6 Geschrieben am: So 8.04.2007, 11:28 (+00:10)
|
||||
|
AyomRank 5 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Gruppe: Member (aktiv) Beiträge: 313 Mitglied seit: 8.02.2007 |
Mir geht es ja darum, die GET-Variable nicht ungeprüft zu nutzen. In deinem Fall sieht es irgendwie nicht so aus. Weiter nutze ich lieber "require" um Dateien einzubinden, der Sicherheit wegen. die(); bringt eine Fehlermeldung (weiss grad nicht welche, mein lokaler Server läuft bei aktiver Internetverbindung nicht). Schau mich mal im PHP-Forum um. Danke euch. -------------------- Linkpartner für verschiedene Erotik-Projekte gesucht => PN genügt
|
||||
![]() |
| G.P. |
#7 Geschrieben am: So 8.04.2007, 12:05 (+00:37)
|
|
AyomRank 6 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Gruppe: Member (aktiv) Beiträge: 720 Mitglied seit: 21.10.2004 |
in diesem Fall wird die Get Variable ueberprueft
Die Whitelist sind in diesem Fall alle mit "abc_" beginnenden php Dateien in einem vorher fest bestimmten Ordner, welcher per $root festgelegt wird. Meiner Meinung nach eine recht sichere und sehr leichte Methode (ich lass mich aber gerne eines besseren belehren) Ob du include oder require verwendest ist dabei erst einmal irrelevant. Ob require sicherer ist als include wage ich aber zu bezweifeln MfG GP -------------------- |
![]() |
| Sascha Ahlers |
#8 Geschrieben am: So 8.04.2007, 12:08 (+00:02)
|
||||
![]() AyomRank 8 Gruppe: Experten Entwicklung Beiträge: 1699 Mitglied seit: 27.12.2004 |
Das erklär mir bitte mal, warum das sicherer sein soll? Ich würde hier eher ein include, als ein require, benutzen, besonders da ich mit PHP 3 angefangen habe:
-------------------- Joseph Joubert: "Der Verstand kann uns sagen, was wir unterlassen sollen. - Aber das Herz kann uns sagen, was wir tun müssen."
Sicherheit beim Programmieren: Top 10 application vulnerabilities in 2007 |
||||
![]() |
| Sascha Ahlers |
#9 Geschrieben am: So 8.04.2007, 12:14 (+00:05)
|
||
![]() AyomRank 8 Gruppe: Experten Entwicklung Beiträge: 1699 Mitglied seit: 27.12.2004 |
Na na, da kann man draus ausbrechen, der Programmcode von Dir ist keinesfalls sicher! Auch wenn Du mit $root einen Ordner festlegest, gibt es die Möglichkeit mit /../ ggf. daraus auszubrechen. Auch könnten Exploits genutzt werden, welche Sonderzeichen oder andere Zeichenkodierungen nutzen. -------------------- Joseph Joubert: "Der Verstand kann uns sagen, was wir unterlassen sollen. - Aber das Herz kann uns sagen, was wir tun müssen."
Sicherheit beim Programmieren: Top 10 application vulnerabilities in 2007 |
||
![]() |
| Joel Enzian Media GmbH |
#10 Geschrieben am: So 8.04.2007, 12:16 (+00:02)
|
||
![]() AyomRank 7 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Gruppe: Member (aktiv) Beiträge: 1436 Mitglied seit: 17.06.2004 |
Mal angenommen dein Script-Folder ($root) ist folgender: http://www.domain.com/php/cms/scripts/ und dort hats Dateien mit den namen abc_dosomething.php und abc_xyz.php. $_GET['page'] setze ich auf ../../user-uploads/abc_myupload.jpg oder sogar ../../user-uploads/abc_myupload.php (wenn das erlaubt ist). Das hat nichts mehr mit XSS zu tun, sondern ist ein schwerwiegendes Sicherheitsloch. PS: Hab grad gesehen, dass "Sascha Ahlers" die Sache auch schon beantwortet hat -------------------- EagleFind.com - Die visuelle Suchmaschine
Enzian Media bietet Entwicklung von Websites, Videos und Webcam-Streaming. Suxedoo |
||
![]() |
| Sascha Ahlers |
#11 Geschrieben am: So 8.04.2007, 12:25 (+00:09)
|
||||
![]() AyomRank 8 Gruppe: Experten Entwicklung Beiträge: 1699 Mitglied seit: 27.12.2004 |
Das ist sogar noch schlimmer, da ist auch noch DNS-Spoofing möglich. Ich würde es eher so schreiben:
Alternativ kann die $_GET['skript'] auch wieder in sich gespeichert werden, wenn man die Isolation zu anderen Variablenen beibehalten möchte, dazu muss diese aber ggf. deklariert werden, wenn dies noch nicht geschehn sein sollte. Bearbeitet von Sascha Ahlers am So 8.04.2007, 17:22 -------------------- Joseph Joubert: "Der Verstand kann uns sagen, was wir unterlassen sollen. - Aber das Herz kann uns sagen, was wir tun müssen."
Sicherheit beim Programmieren: Top 10 application vulnerabilities in 2007 |
||||
![]() |
| G.P. |
#12 Geschrieben am: So 8.04.2007, 13:01 (+00:36)
|
|
AyomRank 6 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Gruppe: Member (aktiv) Beiträge: 720 Mitglied seit: 21.10.2004 |
Ok, ich habe vergessen zu erwaehnen das nur Dateien aus dem bestimmten Ordner geladen werden koenne, daher ist eine moeglichkeit ala ../ ausgeschlossen.
Aber das mit den Sonderzeichen ist richtig. Danke fuer den Hinweis. Ich werd es gleich einmal ueberarbeiten. MfG GP -------------------- |
![]() |
| Sascha Ahlers |
#13 Geschrieben am: So 8.04.2007, 13:12 (+00:11)
|
||
![]() AyomRank 8 Gruppe: Experten Entwicklung Beiträge: 1699 Mitglied seit: 27.12.2004 |
Das hast Du doch erwähnt, es findet aber keine Filterung statt, darum kann sowas wohl funktionieren, wenn es nicht von den Servereinstellungen abgefangen wird. -------------------- Joseph Joubert: "Der Verstand kann uns sagen, was wir unterlassen sollen. - Aber das Herz kann uns sagen, was wir tun müssen."
Sicherheit beim Programmieren: Top 10 application vulnerabilities in 2007 |
||
![]() |
| TTlong |
#14 Geschrieben am: So 8.04.2007, 13:24 (+00:11)
|
||||
|
AyomRank 5 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Gruppe: Member (aktiv) Beiträge: 313 Mitglied seit: 8.02.2007 |
Weil "require" sofort das gesamte Script abbricht und nicht wie "include" nur den fehlerhaften Teil. Werd deine Ausführung gleich mal mal testen, danke! -------------------- Linkpartner für verschiedene Erotik-Projekte gesucht => PN genügt
|
||||
![]() |
| MarkusH |
#15 Geschrieben am: So 8.04.2007, 15:14 (+01:50)
|
||||
|
AyomRank 4 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Gruppe: Member (aktiv) Beiträge: 79 Mitglied seit: 2.11.2006 |
Hallo, ich finde die Ursprungsversion ist doch ziemlich gut. Was kann denn da passieren bzw fälschlicherweise oder boshafterweise eingebunden werden? Eine Whitelist ist ja so ziemlich das schärfste was geht; zumindest kurz nach einem (Parameter-Mapping). Die Version von GP benutze ich so ähnlich auch, allerdings mit Sonderzeichenmaskierung
@Sascha: Welchen Sinn macht es, den Get-String erst nochmal zu encoden und ihn dann mit einer Whitelist abzugleichen? Reicht nicht der Abgleich mit der Whitelist? Wenn der übergebene Wert "a" lautet, und "a" in der Whitelist zu finden ist und somit "a.php" eingebunden wird, was kann dann noch anderes im Get-String stehen, das gefährlich wäre?
|
||||
![]() |
| TTlong |
#16 Geschrieben am: So 8.04.2007, 17:11 (+01:56)
|
||
|
AyomRank 5 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Gruppe: Member (aktiv) Beiträge: 313 Mitglied seit: 8.02.2007 |
Nur sie funktioniert so nicht??!! Leider! -------------------- Linkpartner für verschiedene Erotik-Projekte gesucht => PN genügt
|
||
![]() |
| Sascha Ahlers |
#17 Geschrieben am: So 8.04.2007, 17:20 (+00:09)
|
||||||||
![]() AyomRank 8 Gruppe: Experten Entwicklung Beiträge: 1699 Mitglied seit: 27.12.2004 |
Im Grunde reicht es aus, das muss aber nicht urlrawencode lauten, sondern eigentlich urlrawdecode, da habe ich mich leicht versehen (hab's mal eben geändert). Veraussetzung ist natürlich, dass keine Exploits innerhalb PHP selber vorhanden sind. Grundsätzlich finde ich aber solche Ansätze zum Einbinden von Dateien schrecklich, ich schreibe Dateieinbindungen lieber nicht mittels übergebener Variable nieder. Lieber in dieser Form:
Von GPs Version würde ich aber ausdrücklich abraten, entweder direkt darauf achten, dass wirklich nur Dateien in den Ordner aufgerufen werden können oder mit einer Whitelist arbeiten. Es ist sonst sehr einfach möglich daraus auszubrechen. Zu dem Code müsste noch eine Prüfroutine hinzugefügt werden, die darauf achtet, dass niemand versucht aus den Ordner auszubrechen (mittel ../). Eine Prüfung von file_exists ist schön, ist aber nicht ganz sauber, außerdem lässt sich das einfacher regulieren. Auf Wunsch schriebe ich dies auch mal etwas ausführlicher in mein Blog nieder, wie man dieses herausspringen verhindern kann. -------------------- Joseph Joubert: "Der Verstand kann uns sagen, was wir unterlassen sollen. - Aber das Herz kann uns sagen, was wir tun müssen."
Sicherheit beim Programmieren: Top 10 application vulnerabilities in 2007 |
||||||||
![]() |
| jAuer Jürgen Auer - freiberufl. Programmierer |
#18 Geschrieben am: So 8.04.2007, 17:56 (+00:35)
|
||
|
AyomRank 9 Gruppe: Experten Entwicklung Beiträge: 2206 Mitglied seit: 4.02.2006 |
Von solchen Codes würde ich grundsätzlich die Finger lassen. Bei diesem Problem - relative Adressen in erlaubte absolute Adressen umrechnen - haben sich bereits einige größere Firmen die Finger dran verbrannt. Bei Microsoft gab es raffinierteste Hacks, die bsp. Unicode-Mehrfachcodierungen von ../ nutzten, die von der aufgerufenen Systemfunktion automatisch korrekt decodiert werden, bei denen die Suche nach ../ aber erfolglos bleibt. Sprich: Man muß alle Fälle kennen, wie eine Systemfunktion wie 'include' relative Adressen entgegennehmen kann. Und da gibt es in der Regel mehr als nur das, was offenkundig ist. Und übersieht man eine Möglichkeit, dann kann das eine Lücke erzeugen. Sprich: Whitelist und sonst nichts. -------------------- Web-Anwendung 3.0: Ein Online-Kalender für Termine vieler Filialen.
server-daten: Web-Datenbanken als Online - CRM - Lösung. Konzentrieren Sie sich auf Ihr Kerngeschäft - nutzen Sie eine schlanke, schnelle Online-Datenbank von verschiedenen Standorten. |
||
![]() |
| Sascha Ahlers |
#19 Geschrieben am: So 8.04.2007, 18:52 (+00:56)
|
||||
![]() AyomRank 8 Gruppe: Experten Entwicklung Beiträge: 1699 Mitglied seit: 27.12.2004 |
Drum schriebe ich ja auch:
-------------------- Joseph Joubert: "Der Verstand kann uns sagen, was wir unterlassen sollen. - Aber das Herz kann uns sagen, was wir tun müssen."
Sicherheit beim Programmieren: Top 10 application vulnerabilities in 2007 |
||||
![]() |
| MarkusH |
#20 Geschrieben am: So 8.04.2007, 19:53 (+01:00)
|
||||
|
AyomRank 4 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Gruppe: Member (aktiv) Beiträge: 79 Mitglied seit: 2.11.2006 |
Die Routine steht doch da: Das binary-safe php-eigene "quotemeta", daß genau für sowas gedacht ist. Und ein herausspringen bei i.R aktiviertem open_basedir aus der Domainumgebung ist ebenfalls nicht möglich.
Trotzdem doppelt gemoppelt. |
||||
![]() |
Thema wird von 0 Benutzer(n) gelesen (0 Gäste und 0 anonyme Benutzer)
0 Mitglieder:
« Neues Projekt, brauche Tipps, Hoster usw. | Server-Technik, Domains & Security | wo bekommt ihr eure domains? »
Trackback-Url: http://www.ayom.com/track/t/17737
Seiten: (2) [1] 2 |
![]() ![]() ![]() |
| Themen Titel | Autor | Views | Antworten | Letzte Aktion |
| Flash Frage (Ganzer Browser) | chipchip | 97 | 2 | Sa 30.08.2008, 07:39 |
| mod_rewrite Frage | Coach | 71 | 0 | Mo 25.08.2008, 20:02 |
| Frage zu Links und Pagerank (große Seite) | hockeytreff | 326 | 6 | So 24.08.2008, 22:30 |
| Iframe Javascript Frage | Sancheck | 187 | 10 | Do 21.08.2008, 09:37 |
| Frage bzgl. Wert eines Projektes | Dieter | 230 | 3 | Mi 20.08.2008, 21:02 |
| phpBB - Kleine Frage | Marc3l | 91 | 0 | Mo 11.08.2008, 21:32 |
| Frage an Technik Freaks.... | felix80 | 225 | 11 | Fr 8.08.2008, 11:13 |
| Frage phpBB | Marc3l | 109 | 4 | Mi 6.08.2008, 23:21 |
| Frage zu W3C Validation Service | grunet | 211 | 5 | Mo 4.08.2008, 08:15 |
| Security: Gif-Bild plus Java-Klasse im Profil | jAuer | 156 | 6 | Sa 2.08.2008, 19:21 |
Anzeige - [Interessiert an einer Anzeige?]
















