AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein PHP - sind hier "Sicherheitsexperten" an Board?
Thema durchsuchen
Ansicht
Themen-Optionen

PHP - sind hier "Sicherheitsexperten" an Board?

Ein Thema von himitsu · begonnen am 29. Jun 2010 · letzter Beitrag vom 9. Aug 2010
Antwort Antwort
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#1

AW: PHP - sind hier "Sicherheitsexperten" an Board?

  Alt 29. Jun 2010, 22:16
Moin,

ich hab grad nochmal nen Blick in den Code geworfen. Nach PHP_Include() habe ich aufgegeben. Hier mal ein paar Punkte dazu:
  • der erste Parameter heisst $__file. Trotzdem uebergibst du in index.php5 immer wieder __LINE__. Was denn jetzt?
  • Der $__file-Parameter wird fuer die Fehlerbehandlung verwendet. Wenn du schon angeben willst, wo der Fehler seinen Ursprung hatte, guck dir mal debug_backtrace() an. Stack-Traces sind was Tolles
  • PHP-Quellcode:
    if ($AddScriptDir) $FileName = (@$Config['Scripts'] ? $Config['Scripts']
          : ($Config['RootPath'] ? $Config['RootPath'] . 'Scripts/' : dirname(__FILE__) . '/')) . $FileName;
    Soll ich? Also:
    • Gewoehn dir an, immer Klammerbloecke hinzuzufuegen.
    • Everytime you use "@", God kills a Kitten. Im Ernst, wenn du pruefen willst ob $Config['Scripts'] gesetzt ist und keine E_WARNING kassieren willst, pruef mit isset().
    • Tertiaere Operatoren ($foo ? 'bar' : 'baz') sind spaerlich zu nutzen. Das kann schnell mal schiefgehn.
    • Verschachtelte Tertiaere Operatoren sind noch viel schlimmer.
  • Ok, weiter im Programm:
    PHP-Quellcode:
    $FileName = preg_replace('#\.php$#i', $Config['Ext'] ? $Config['Ext'] : ((($X = dirname(__FILE__)
          . '/Functions.*') && ($Y = glob($X))) ? substr($Y[0], strlen($X) - 2) : '.php'), $FileName);
    Siehe oben. Ich fang jetzt gar nicht weiter an, vielleicht magst du den Code ja kurz erklaeren.
  • Log_WriteFile: schmeiss lieber ne Exception und registrier nen Exception-Handler (set_exception_handler()). So kannst du in der Applikation auch individuell auf Fehler reagieren.

Und um die ganze Funktion ad absurdum zu fuehren: guck dir mal set_include_path() an. Auch das bereits erwaehnte spl_autoload ersparen dir da einige WTF-Momente.

BTW, ich hab den Code jetzt mal durch PHPMD gejagt. Allein die Funktion Main_Initialize() hat ne Cyclomatic Complexity von 74 (alles ueber 10 gilt als unwartbar) und ne NPath von 1067489280. Das bedeutet dass es ueber eine Million Ausfuehrungspfade durch die Funktion gibt. Alles ueber 300 sollte da refactored werden. Ich hab dir mal das Ergebnis angehaengt - mehr Informationen findest du auf der obigen Webseite.

@Valle: ein oft gemachter Fehler ist, dass eben der Opcode-Cache weggelassen wird. Das geht auf Dauer echt auf die Performance. Ich kann aber von der Performance nichts schlechtes berichten, und das bei echt grossen Anwendungen (mehrere 100k LOC).

Greetz
alcaeus
Angehängte Dateien
Dateityp: txt phpmd.txt (9,7 KB, 14x aufgerufen)
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de

Geändert von alcaeus (29. Jun 2010 um 22:21 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#2

AW: PHP - sind hier "Sicherheitsexperten" an Board?

  Alt 29. Jun 2010, 22:37
Ach, und noch was: ich hab nur kurz ueber die Functions.php5 drueber geguckt, aber die Sicherheitsluecke in Main_Fialize() bei aktiviertem Debug-Mode ist schon schnuckelig. So einfach war es noch nie, HTML-Code in die Seite reinzupruegeln. Cross-Site-Scripting wie man will. Auch wenns der Debug-Mode ist, die direkte Ausgabe von GPC-Variablen ist ne saudumme Idee.

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
blackfin
(Gast)

n/a Beiträge
 
#3

AW: PHP - sind hier "Sicherheitsexperten" an Board?

  Alt 29. Jun 2010, 22:56
Mhm...ich will da jetzt auch was lernen, damit mir das selbst nicht passiert

Wie könnte man denn nun damit eine Cross-Site-Scripting Attacke fahren bzw. wo liegt denn jetzt die böse Lücke?
  Mit Zitat antworten Zitat
Hisoka

Registriert seit: 2. Jan 2008
Ort: im Norden
53 Beiträge
 
FreePascal / Lazarus
 
#4

AW: PHP - sind hier "Sicherheitsexperten" an Board?

  Alt 29. Jun 2010, 23:22
Mhm...ich will da jetzt auch was lernen, damit mir das selbst nicht passiert

Wie könnte man denn nun damit eine Cross-Site-Scripting Attacke fahren bzw. wo liegt denn jetzt die böse Lücke?
Simpel, es wird dort alles ausgegeben was z.B. im get Array ist. Somit muss man da nur etwas java script reinpacken und man kann mit dem zielrechner (also der jenige der ein link zur präparierten seite bekommt) machen was man will(dein Antivirenprogramm hilft nicht wenn man über ne IE/Chrome/... Lücke und etwas JS kompletten zugriff auf das system bekommt ==> ja das geht)
  Mit Zitat antworten Zitat
blackfin
(Gast)

n/a Beiträge
 
#5

AW: PHP - sind hier "Sicherheitsexperten" an Board?

  Alt 29. Jun 2010, 23:27
Wenn ich das jetzt richtig verstanden habe. ist das aber nur deswegen eine Sicherheitslücke, da die GPC-Variablen vor der Ausgabe nicht gefiltert / escaped werden, so dass man eben auch JS-Code per GET oder POST einschleifen kann, richtig?
Würde man die Variablen vorher überprüfen und analog dem Konzept "traue keinem User-Input" vorgehen, wäre die Debug-Ausgabe ja kein Problem mehr.
Oder habe ich es nun doch nicht gepeilt...
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:00 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz