Sourcecode sichern

Hallo PHP-Gemeinde!

In einem meiner PHP-Scripts stehen die Verbindungsvariablen zu meiner sql-Datenbak in Klarschrift im Sourcecode.
Wenn die php-Site an den Browser übergeben wird, iats alles ok, will heissen, im Quelletxt sind die Variablen nicht ersichtlich.

Besteht die Möglcihkeit für irgendjemanden, den Original-Source zu lesen, bzw. die php-Datei „Downzuloaden“?

Gruß
Harry

In einem meiner PHP-Scripts stehen die Verbindungsvariablen zu
meiner sql-Datenbak in Klarschrift im Sourcecode.
Wenn die php-Site an den Browser übergeben wird, iats alles
ok, will heissen, im Quelletxt sind die Variablen nicht
ersichtlich.
Besteht die Möglcihkeit für irgendjemanden, den
Original-Source zu lesen, bzw. die php-Datei „Downzuloaden“?

Nein, das Script wird auch nicht an den Browser übergeben, sondern ausgeführt und die Ausgabe an den Browser gesendet. Wenn der Webserver korrekt konfiguriert ist, kann da keiner rankommen.

Was anderes is, wenn ein user sich direkt auf dem Rechner einloggt. Wenn auf dem Server noch andere Kunden ihre Webseiten liegen haben, könnten die theoretisch rankommen, weil die Dateien meistens für alle User auf dem System lesbar sind…

Hallo Bruno!

Erstmal DANKE für die schnelle Antwort!

Ich hab die Seiten bei one2one (neuerdings HostEurope) gehostet, nach Deiner Beschreibung könnte also jeder, der der einen Account hat, (theoretisch zumindest) die Datei lesen, oder hab ich Dich falsch verstanden? (Ich kann mir das kaum vorstellen!)

Ich fragte deshalb, weil ein Mumpel behauptete, es gäbe Programme, mit denen man jede beliebige Datei von einem Server ziehen könnte (unausgeführt natürlich)- weisst Du da was drüber?

Gruß
Harry

Ich hab die Seiten bei one2one (neuerdings HostEurope)
gehostet, nach Deiner Beschreibung könnte also jeder, der der
einen Account hat, (theoretisch zumindest) die Datei lesen,
oder hab ich Dich falsch verstanden? (Ich kann mir das kaum
vorstellen!)

Ja, so sehe ich das… aber wir hatten erst neulich eine Diskussion darüber, weiss nicht mehr ob das im Linux Brett war oder wo… auf Linux ist es z.b. meistens so, dass der Webserver nicht unter root-Rechten läuft (was auch gut ist), aber damit er eien Seite anzeigen kann muss er die Rechte dazu haben, sie einzulesen … das heisst oft sind die Scripte für alle lesbar (typisch auch CHMOD 755 und sowas wie man oft CGI-Skripte setzt), wenn der User den pfad zur datei kennt und diese lesbar ist, dann kann er sie sich theoretisch klauen, denke ich

Ich fragte deshalb, weil ein Mumpel behauptete, es gäbe
Programme, mit denen man jede beliebige Datei von einem Server
ziehen könnte (unausgeführt natürlich)- weisst Du da was
drüber?

Das würd ich nicht so ernst nehmen, halte das für dummes geschwätz…

Ja, so sehe ich das… aber wir hatten erst neulich eine
Diskussion darüber, weiss nicht mehr ob das im Linux Brett war
oder wo… auf Linux ist es z.b. meistens so, dass der
Webserver nicht unter root-Rechten läuft (was auch gut ist),
aber damit er eien Seite anzeigen kann muss er die Rechte dazu
haben, sie einzulesen … das heisst oft sind die Scripte für
alle lesbar (typisch auch CHMOD 755 und sowas wie man oft
CGI-Skripte setzt), wenn der User den pfad zur datei kennt und
diese lesbar ist, dann kann er sie sich theoretisch klauen,
denke ich

Hallo,

jetzt bin ich aber auch verunsichert…

Nehmen wir folgendes Beispiel an:
Ich habe die Domain domain1.de bei Puretec. Ein anderer Kunde hat die Domain domain2.de. Beide Domains liegen auf dem gleichen physikalischen Server. Wenn nun also irgendein Skript auf meiner Seite einen Parse-Error verursacht, dann wird in der Ferhlermeldung ja der komplette Pfad (z.B homepages/kunden/q273120/test.php) mit ausgegeben. Wenn der Kunde mit domain2.de diesen Pfad kennt, dann kann er auf meine Dateien zugreifen? Das wäre ja ein Skandal!!

Jojo

Nehmen wir folgendes Beispiel an:
Ich habe die Domain domain1.de bei Puretec. Ein anderer Kunde
hat die Domain domain2.de. Beide Domains liegen auf dem
gleichen physikalischen Server. Wenn nun also irgendein Skript
auf meiner Seite einen Parse-Error verursacht, dann wird in
der Ferhlermeldung ja der komplette Pfad (z.B
homepages/kunden/q273120/test.php) mit ausgegeben. Wenn der
Kunde mit domain2.de diesen Pfad kennt, dann kann er auf meine
Dateien zugreifen? Das wäre ja ein Skandal!!

So aehnlich _koennte_ es funktionieren, da gibt es allerdings noch eine Sache, die das ganze verhindert. Das nennt sich chroot, das heisst, wenn du dich via FTP bei Puretec anmeldest, entspricht dein Homeverzeichnis dem dirroot, sprich /home/username wird dann /, du kannst also nicht ueber diese „Ebene“ hinaus in /home, da ja /home/username bereits / ist *g*. Ich hoffe, ich habe mich verstaendlich ausgedrueckt. Aaaaber… und das ist das schlechte daran, wuerde es via php und Apache moeglich sein, Dateien dieser anderen User zu oeffen, wenn man den genauen Pfad kennt, via FTP ist dies aber idR nicht moeglich.

Wenn du jetzt ein Script in homepages/kunden/q273120/test.php hast, dann mach ich in meinem PHP Skript einfach einen Filepointer auf diese Datei und kann sie somit auslesen, da ja dein MySQL Passwort meines Wissens nach auch dein Kundenpasswort ist, koennte ich somit deine Daten veraendern. Inwieweit das bei Strato/Puretec moeglich ist, weiss ich allerdings nicht.

Nehmen wir folgendes Beispiel an:
Ich habe die Domain domain1.de bei Puretec. Ein anderer Kunde
hat die Domain domain2.de. Beide Domains liegen auf dem
gleichen physikalischen Server. Wenn nun also irgendein Skript
auf meiner Seite einen Parse-Error verursacht, dann wird in
der Ferhlermeldung ja der komplette Pfad (z.B
homepages/kunden/q273120/test.php) mit ausgegeben. Wenn der
Kunde mit domain2.de diesen Pfad kennt, dann kann er auf meine
Dateien zugreifen? Das wäre ja ein Skandal!!

Du brauchst ned mal nen Parse-Error produzieren… der Andere wird auch 1 und 1 zusammen zählen können und erraten wie dein Pfad heisst… normal is das ja irgendwas mit dem Domainnamen und den Rest kann er sich aus der WWW-URL ableiten indem er schaut wo bei ihm die Webseiten normal liegen…
wie das mit dem CHROOT ist, wie im anderen Posting beschrieben, weiss ich gerade nicht, aber z.b. mit einem telnet-zugang wäre das sehr einfach… ob man was dagegen tun kann weiss ich ned 100%ig (für cgi-Skripte gibt es z.b. ein Modul suexec für den Apache, dann werden die Skripte mit deinen userrrechten ausgeführt und sie müssen nicht für jedermann lesbar sein), aber z.b. PHP wird meistens als apachemodul verwendet und bietet glaube ich keien solche möglichkeit… und ich hab das schon oft gesehen, dass es theoretisch möglich wäre…

Du brauchst ned mal nen Parse-Error produzieren… der Andere
wird auch 1 und 1 zusammen zählen können und erraten wie dein
Pfad heisst… normal is das ja irgendwas mit dem Domainnamen
und den Rest kann er sich aus der WWW-URL ableiten indem er
schaut wo bei ihm die Webseiten normal liegen…

Nun ja, nicht unbedingt, ich als grosser Webhoster wuerde eine Ordnung der Homeverzeichnisse nach Kundennummer vornnehmen und nicht nach Domain.

wie das mit dem CHROOT ist, wie im anderen Posting
beschrieben, weiss ich gerade nicht, aber z.b. mit einem
telnet-zugang wäre das sehr einfach… ob man was dagegen tun
kann weiss ich ned 100%ig (für cgi-Skripte gibt es z.b. ein

Es gibt auch fuer bestimmte Shells eine CHROOT Umgebung, allerdings muss ich euch enttaeuschen, zumindest Strato setzt diese nicht ein, so dass man bei Strato ohne Probleme via Telnet in die Verzeichnisse anderer Kunden wechseln kann. Wie das ganze bei PureTec ist, weiss ich in Ermangelung Freunde, die einen Account da haben leider nicht.

Modul suexec für den Apache, dann werden die Skripte mit
deinen userrrechten ausgeführt und sie müssen nicht für
jedermann lesbar sein), aber z.b. PHP wird meistens als
apachemodul verwendet und bietet glaube ich keien solche
möglichkeit… und ich hab das schon oft gesehen, dass es
theoretisch möglich wäre…

Leider ist es bei Strato sogar auch praktisch moeglich, ich habe es vorhin mit einem Freund zusammen getestet, eine Mail an Strato mit entsprechender Beschreibung ist schon abgeschickt, mal sehen, wie die darauf reagieren.

Fuer professionelle PHP4 Coder bietet sich natuerlich noch der Zend Encoder an, aber der ist mit 2400$ doch etwas teuer fuer den Heimgebrauch, und wer derart viel Geld in ein Programm investieren kann, wird auch von Billig Hostern Abstand nehmen.

Hallo zusammen,

mit grossem Interesse habe ich eure Postings gelesen, und möchte mich an dieser Stelle dazu jetzt auch mal kurz äußern.

Bezüglich dem Datenklau per URL kann ich euch zunächst mal beruhigen:
PHP Skripte im Apache „htdocs-Baum“ werden, eine richtige Konfiguration des Servers vorrausgesetzt, immer zuerst (!) geparst und erst anschließend an den Browser „ausgeliefert“.
Generiert dieses Skript nun keinen - durch den Browser anzeigbaren - HTML Code, wird halt stattdessen einfach eine leere Seite angezeigt.
Da PHP „servergeparsed“ ist/wird, können Skripte also niemals im Sourcecode im Browser angezeigt werden!

Der Klau mittels Telnet oder FTP ist ebenfalls unmöglich, da die Telnet Shell und der FTP Server entsprechend konfiguriert sind und man nicht einfach in das Verzeichnis eines anderen Users wechseln kann.
Sollte dies bei Strato oder Puretec jedoch möglich sein (was ich in Ermangelung eines entsprechenden Accounts leider nicht ausprobieren kann), wäre dies natürlich ein riesiger Skandal und ein grob fahrlässiger Konfigurationsfehler!

Nur Nebenbei: Nicht die FTP- oder Login-Shell „laufen“ selbst in einem CHROOT Verzeichnis. Wenn überhaupt dann tuen das nur der entsprechende Telnet- oder FTP-Server. Ein CHROOT ähnlicher Effekt wird für die Shells durch eine entsprechende Konfiguration der Server sichergestellt.

Viele Grüße,
Andreas Bulling

Der Klau mittels Telnet oder FTP ist ebenfalls unmöglich, da
die Telnet Shell und der FTP Server entsprechend konfiguriert
sind und man nicht einfach in das Verzeichnis eines anderen
Users wechseln kann.
Sollte dies bei Strato oder Puretec jedoch möglich sein (was
ich in Ermangelung eines entsprechenden Accounts leider nicht
ausprobieren kann), wäre dies natürlich ein riesiger Skandal
und ein grob fahrlässiger Konfigurationsfehler!

Meines Wissens nach bietet jeder anstaendige FTP Server eine CHROOT Umgebung, anders ist es bei Telnet Zugaengen, da ist das meist nicht der Fall und zwar aus dem einfachen Grund, weil eben so Programme wie ls meist in /bin oder /usr/bin liegen und jeder diese Programme benutzen koennen muss. Es gibt eine spezielle Shells, die dann diese Verzeichnisse auf Verzeichnisse des Users mappen, wirklich praktische Loesungen hierzu sind mir aber insb. auf Basis von Solaris bisher nicht bekannt. Es widerspricht ja auch in gewissem Masse dem Gedanken eines Multiuser Systems *g*.

Nur Nebenbei: Nicht die FTP- oder Login-Shell „laufen“ selbst
in einem CHROOT Verzeichnis. Wenn überhaupt dann tuen das nur
der entsprechende Telnet- oder FTP-Server. Ein CHROOT
ähnlicher Effekt wird für die Shells durch eine entsprechende
Konfiguration der Server sichergestellt.

Nur nebenbei :wink: was bitte schoen ist in Verbindung mit UNIX ein Telnet Server? Wenn du bereits weisst, wie eine CHROOT Umgebung via Shell hergestellt wird, koenntest du mich bitte mit entsprechenden Links versorgen, damit ich mich da auch schlau machen kann?

Meines Wissens nach bietet jeder anstaendige FTP Server eine
CHROOT Umgebung, anders ist es bei Telnet Zugaengen, da ist
das meist nicht der Fall und zwar aus dem einfachen Grund,
weil eben so Programme wie ls meist in /bin oder /usr/bin
liegen und jeder diese Programme benutzen koennen muss. Es
gibt eine spezielle Shells, die dann diese Verzeichnisse auf
Verzeichnisse des Users mappen, wirklich praktische Loesungen
hierzu sind mir aber insb. auf Basis von Solaris bisher nicht
bekannt. Es widerspricht ja auch in gewissem Masse dem
Gedanken eines Multiuser Systems *g*.

Wie müsste eine „praktische Lösung“ denn deiner Meinung nach aussehen?
Die allgemein bekannten Lösungen, um z.B. den Bind-Server zu chrooten sind dann ja aber wohl ebenfalls nicht besonders praktisch - aber trotzdem überall eingesetzt…
Zugegeben, Telnet ist schon aussergewöhnlich schwer zu sichern :wink:

Nur nebenbei :wink: was bitte schoen ist in Verbindung mit UNIX
ein Telnet Server? Wenn du bereits weisst, wie eine CHROOT
Umgebung via Shell hergestellt wird, koenntest du mich bitte
mit entsprechenden Links versorgen, damit ich mich da auch
schlau machen kann?

Streiche Telnet Server, Setze Telnet-Daemon (telnetd). :wink:

Eine Anleitung für SSH findest du hier:
http://www.geocrawler.com/mail/msg.php3?msg_id=39310…

Und ein Skript, um Telnet zu „chrooten“ hier:
http://sourceforge.net/projects/chrtelnet/

Einen Patch, um deinen telnetd zu modifizieren.
http://security-archive.merton.ox.ac.uk/security-aud…
Suche dort einfach nach „telnetd“.

Eine etwas simplere Lösung scheint folgendes zu sein (keine Garantie, dass es funktioniert - kann kein russisch):
http://www.opennet.ru/base/sec/chrootlogin.txt.html

Gruss
Andreas Bulling

Wie müsste eine „praktische Lösung“ denn deiner Meinung nach
aussehen?

Eine wirklich praktikable Loesung ist wohl nur fuer echte MultiUser Systeme anwendbar… bei einem Webhosting Server dieser Groesse ist es einfach nicht mehr zu ueberwachen. Auf der Uni Sun gibt es auch keine chroot Umgebung, allerdings ist der Benutzerkreis mit gerade mal 200 im Vergleich zu Strato sehr eng gefasst.

Die allgemein bekannten Lösungen, um z.B. den Bind-Server zu
chrooten sind dann ja aber wohl ebenfalls nicht besonders
praktisch - aber trotzdem überall eingesetzt…
Zugegeben, Telnet ist schon aussergewöhnlich schwer zu sichern
:wink:

Telnet an sich ist ein einziges Sicherheitsloch :wink: mich persoenlich wundert ja, dass Strato bzw. PureTec nicht gleich von sich aus nur noch SSH anbieten, es sollte doch genug freie SSH Clients geben - man denke unter Windows nur an TerraTerm Pro oder wohl dem besten, Putty.

Eine Anleitung für SSH findest du hier:
http://www.geocrawler.com/mail/msg.php3?msg_id=39310…

Genau sowas habe ich gesucht, vielen Dank, da ich telnet schon seit ueber einem Jahr nicht mehr anbiete, ist der Rest eigentlich unnoetig. Mir war nicht bewusst, dass das bei SSH sogar mit Bordmitteln geht… naja, selbst schuld, steht bestimmt im Manual, das ich nicht gelesen habe ;>

Eine wirklich praktikable Loesung ist wohl nur fuer echte
MultiUser Systeme anwendbar… bei einem Webhosting Server
dieser Groesse ist es einfach nicht mehr zu ueberwachen. Auf
der Uni Sun gibt es auch keine chroot Umgebung, allerdings ist
der Benutzerkreis mit gerade mal 200 im Vergleich zu Strato
sehr eng gefasst.

Ja gut, aber wie machen Strato und Puretec das denn dann?

Genau sowas habe ich gesucht, vielen Dank, da ich telnet schon
seit ueber einem Jahr nicht mehr anbiete, ist der Rest
eigentlich unnoetig. Mir war nicht bewusst, dass das bei SSH
sogar mit Bordmitteln geht… naja, selbst schuld, steht
bestimmt im Manual, das ich nicht gelesen habe ;>

Stimmt, da stehen zumindest die Grundlagen drin! :wink:
Wo bietest du denn SSH an, wenn ich fragen darf?

Viele Grüsse
Andreas Bulling

Ja gut, aber wie machen Strato und Puretec das denn dann?

Anscheinend garnicht… leider, ich denke, da sollte sich mal eine groesser Zeitschrift ala c’t darum kuemmern, so ist das nun wirklich nicht haltbar.

Stimmt, da stehen zumindest die Grundlagen drin! :wink:
Wo bietest du denn SSH an, wenn ich fragen darf?

Kleiner, familiaerer Shell Server :wink: Aber nicht so familiaer, dass die User in die Home Verzeichnisse der anderen duerfen.

Anscheinend garnicht… leider, ich denke, da sollte sich mal
eine groesser Zeitschrift ala c’t darum kuemmern, so ist das
nun wirklich nicht haltbar.

Anscheinend!? Hast du irgendwelche Fakten oder Beweise, mit denen man sich eventuell mal tatsächlich an die c’t wenden könnte?
Mangels eines Accounts habe ich diese wie gesagt nicht und auch keine Möglichkeit, welche zu bekommen…

Aber nicht so familiaer,
dass die User in die Home Verzeichnisse der anderen duerfen.

Schon klar… :wink: Bist ja auch nicht Strato.

Viele Grüsse,
Andreas Bulling