Du bist nicht angemeldet. Der Zugriff auf einige Boards wurde daher deaktiviert.

#1 31. August 2015 09:05

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.435

CMSMS-1: Unterschiedliche Systempfade im Front-/Backend

abgekoppelt von http://www.cmsmadesimple.de/forum/viewtopic.php?id=4556

Könnte das ein Bug sein?

Ich bin offenbar nicht der einzige, der darüber gestolpert ist. Es scheint da generell Inkonsistenzen zu geben: https://bugs.php.net/bug.php?id=60017

EDIT: Hier gibt's noch mehr dazu.

Allerdings wird hier behauptet, das läge daran, dass das Mac OS X Dateisystem HFS+ per default nicht case-sensitive sei. Das kann aber keine Erklärung dafür sein, warum __DIR__ mal die korrekte Schreibweise und mal die Schreibweise aus dem Query-String übernimmt. Wenn das des Rätsels Lösung sei, dann müsste das bei Windows ja auch passieren.

EDIT: Könnte evtl. hiermit zusammenhängen. Werd ich heute abend mal testen.

Aber egal, anderes Thema.

Beitrag geändert von NaN (31. August 2015 10:18)


Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)

Offline

#2 17. März 2016 14:10

Andynium
Moderator
Ort: Dohna / SN / Deutschland
Registriert: 13. September 2010
Beiträge: 7.017
Webseite

Re: CMSMS-1: Unterschiedliche Systempfade im Front-/Backend

NaN schrieb:

Allerdings wird hier behauptet, das läge daran, dass das Mac OS X Dateisystem HFS+ per default nicht case-sensitive sei. Das kann aber keine Erklärung dafür sein, warum __DIR__ mal die korrekte Schreibweise und mal die Schreibweise aus dem Query-String übernimmt. Wenn das des Rätsels Lösung sei, dann müsste das bei Windows ja auch passieren.
EDIT: Könnte evtl. hiermit zusammenhängen. Werd ich heute abend mal testen.

Hast du dieses Thema abschließend klären können?

Beitrag geändert von Andynium (19. März 2016 21:58)

Offline

#3 18. März 2016 11:02

Andynium
Moderator
Ort: Dohna / SN / Deutschland
Registriert: 13. September 2010
Beiträge: 7.017
Webseite

Re: CMSMS-1: Unterschiedliche Systempfade im Front-/Backend

NaN schrieb:

Wenn ich mir in der include.php den Pfad zur Datei ausgeben lasse (echo __DIR__)

Hmm, die magischen Konstanten sind die einzigen Konstanten, die sich zur Laufzeit ändern bzw. von bestimmten Faktoren beeinflusst werden können.

Im Frontend wird die include.php so eingebunden

$dirname = dirname(__FILE__);
...
require_once($dirname.'/include.php');

im Backend dagegen mit

Könntest du bitte mal prüfen, ob es evtl daran liegt?

Offline

#4 18. März 2016 15:30

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.435

Re: CMSMS-1: Unterschiedliche Systempfade im Front-/Backend

Das ist kein CMSms spezifisches Problem. Und hat auch nichts mit irgendwelchen includes zu tun. Das scheint ein Fehler in Mac OS X, MAMP, Apache oder PHP zu sein.

Wenn ich eine index.php erstelle, die mir lediglich __DIR__ ausgibt, dann ändert sich __DIR__ jenachdem, ob ich in der Adressleiste des Browsers den Pfad zur Datei groß oder klein schreibe. Alle Erklärungsversuche oder Lösungsansätze die ich dazu im Netz finden konnte, beschreiben entweder ein anderes Problem oder führen zu keiner Lösung.

Hier mal ein Beispiel:
Document-Root beim Mac ist bei MAMP "/Applications/MAMP/htdocs"
In diesem Verzeichnis habe ich ein Unterverzeichnis namens "test".
In diesem Verzeichnis habe ich eine Datei namens "__DIR__.php" mit folgendem Inhalt:

D.h. wenn ich also diese Datei im Browser ansteuern will, muss ich folgendes in die Adressleiste eingeben: "localhost:8888/test/__DIR__.php"
Dann gibt er mir brav "Applications/MAMP/htdocs/test" aus.
Gebe ich aber in der Adressleiste ein "localhost:8888/TeSt/__DIR__.php"
Dann gibt er mir folgendes aus: "Applications/MAMP/htdocs/TeSt"
Für Mac mag das dasselbe Verzeichnis sein, aber für PHP nicht.
D.h. wenn ich eine Session starte und in deren ID den Pfad mit einbeziehe, habe ich je nach Aufruf unterschiedliche Sessions. Da kann ich coden wie ich will. Vom PHP-Code aus kann ich daran nichts ändern.

Dasselbe gilt auch für __FILE__
Ist also egal, ob ich die Datei direkt in den Document-Root oder in ein Unterverzeichnis packe. Groß und Kleinschreibung im Browser wirkt sich also tatsächlich auf die PHP-Konstanten aus. Und das kann meiner Meinung nach nur ein Fehler sein, der sich auf einer Ebene abspielt, auf die ich keinen Einfluss habe.


Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)

Offline

#5 19. März 2016 22:14

Andynium
Moderator
Ort: Dohna / SN / Deutschland
Registriert: 13. September 2010
Beiträge: 7.017
Webseite

Re: CMSMS-1: Unterschiedliche Systempfade im Front-/Backend

NaN schrieb:

Das ist kein CMSms spezifisches Problem.

Das ist schon mal gut...

NaN schrieb:

Das scheint ein Fehler in Mac OS X, MAMP, Apache oder PHP zu sein.

... während das eher schlecht ist. Das Feld ist zu weit, als dass man das Problem einfach ignorieren könnte.

NaN schrieb:

D.h. wenn ich eine Session starte und in deren ID den Pfad mit einbeziehe, habe ich je nach Aufruf unterschiedliche Sessions. Da kann ich coden wie ich will. Vom PHP-Code aus kann ich daran nichts ändern.

Wäre es denn evtl ein Workaround, den Pfad vorm Start der Session in ein bestimmtes Format zu trimmen, damit die ID immer gleich ist - also z.Bsp. unix-typisch in Kleinbuchstaben, so a la $session_name = 'CMSSESSID' . substr(md5(strtolower(__DIR__)), 0, 12);

Offline

#6 21. März 2016 11:47

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.435

Re: CMSMS-1: Unterschiedliche Systempfade im Front-/Backend

Das Feld ist zu weit, als dass man das Problem einfach ignorieren könnte.

Wie oft kommt ein Webserver mit der Konstellation Mac OS X 10.6.8, MAMP 3.5, Apache 2.2.29 und PHP 5.6.10 und einem Dateisystem vor, das nicht zwischen Groß- und Kleinschreibung unterscheidet?

Ich konnte es zwar selber noch nicht ausprobieren, aber unter einer neueren OS X Version bzw. wenn das Dateisystem so konfiguriert wurde, dass es Groß- und Kleinschreibung unterscheidet, soll das angeblich nicht mehr passieren.

Ich schreibe angeblich, weil der User, der das getestet haben will, der Meinung war, er hätte das Problem unter identischen Bedingungen nicht nachvollziehen können, dann aber meinte, er hätte allerdings unter Mac OS X 10.7 getestet - was für mich alles andere als identische Bedingungen sind. Da will ich lieber nicht wissen, was sich da noch so alles unterschieden hat. Ich kann also nicht sagen, woran genau es liegt. MAMP schließe ich persönlich mal aus. PHP eigentlich auch. Bleibt also nur noch Betriebssystem/Dateisystem oder Apache.

Ich werde das zwar weiter beobachten, aber ich würde diesem Problem vorerst nicht mehr Beachtung schenken als nötig, weil ich einfach glaube, dass es in der Realtiät keine große Rolle spielt, sonst gäbe es da meiner Meinung nach mehr Informationen. Ich bin ja auch nur eher durch Zufall darauf gestoßen.

Wäre es denn evtl ein Workaround, den Pfad vorm Start der Session in ein bestimmtes Format zu trimmen, damit die ID immer gleich ist - also z.Bsp. unix-typisch in Kleinbuchstaben, so a la $session_name = 'CMSSESSID' . substr(md5(strtolower(__DIR__)), 0, 12);

Im Prinzip ja.
Hat nur einen - wenn auch sehr unwahrscheinlichen - Haken: Man bindet u.U. die Session an ein "fremdes" Verzeichnis. D.h. für den unwahrscheinlichen Fall, dass es eine weitere CMSms Installation gibt, deren Pfad sich nur in der Groß- und Kleinschreibung unterscheidet, kommen sich die beiden Sessions evtl. in die Quere.


Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)

Offline

#7 21. März 2016 13:16

Andynium
Moderator
Ort: Dohna / SN / Deutschland
Registriert: 13. September 2010
Beiträge: 7.017
Webseite

Re: CMSMS-1: Unterschiedliche Systempfade im Front-/Backend

NaN schrieb:

Wie oft kommt ein Webserver mit der Konstellation Mac OS X 10.6.8, MAMP 3.5, Apache 2.2.29 und PHP 5.6.10 und einem Dateisystem vor

Ähmm, gibt es überhaupt einen Hoster, der Mac als Basissystem einsetzt wink?

NaN schrieb:

Hat nur einen - wenn auch sehr unwahrscheinlichen - Haken: Man bindet u.U. die Session an ein "fremdes" Verzeichnis. D.h. für den unwahrscheinlichen Fall, dass es eine weitere CMSms Installation gibt, deren Pfad sich nur in der Groß- und Kleinschreibung unterscheidet, kommen sich die beiden Sessions evtl. in die Quere.

Gibt es denn ein anderes Merkmal einer CMSMS-Installation, das man für eine eindeutige Session nutzen könnte?

Hast natürlich recht, dass die Relevanz des Problems prinzipiell relativ gering ist, aber wenn man schon mal dabei ist, hätte ich es gern abschließend geklärt big_smile.

Offline

#8 21. März 2016 15:15

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.435

Re: CMSMS-1: Unterschiedliche Systempfade im Front-/Backend

Gibt es denn ein anderes Merkmal einer CMSMS-Installation, das man für eine eindeutige Session nutzen könnte?

Auf die Schnelle fiele mir dazu die Datenbank-Verbindung + Tabellen-Präfix ein.


Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)

Offline

#9 22. März 2016 11:47

Andynium
Moderator
Ort: Dohna / SN / Deutschland
Registriert: 13. September 2010
Beiträge: 7.017
Webseite

Re: CMSMS-1: Unterschiedliche Systempfade im Front-/Backend

NaN schrieb:

Auf die Schnelle fiele mir dazu die Datenbank-Verbindung + Tabellen-Präfix ein.

Hmm, Präfix ist klar, aber was genau meinst du mit Datenbankverbindung? DB-Benutzername + Verbindungs-ID?

Offline

#10 22. März 2016 12:31

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.435

Re: CMSMS-1: Unterschiedliche Systempfade im Front-/Backend

aber was genau meinst du mit Datenbankverbindung?

Alles was man dazu in der config.php angeben kann/muss:

$config['db_hostname']
$config['db_username']
$config['db_password']
$config['db_name']
$config['db_prefix']

Such Dir was aus wink


Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)

Offline

#11 22. März 2016 13:37

Andynium
Moderator
Ort: Dohna / SN / Deutschland
Registriert: 13. September 2010
Beiträge: 7.017
Webseite

Re: CMSMS-1: Unterschiedliche Systempfade im Front-/Backend

Ok, nehm ich alles big_smile  - nur beim Passwort hab ich ein dumpfes Gefühl ...

Offline

#12 22. März 2016 14:41

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.435

Re: CMSMS-1: Unterschiedliche Systempfade im Front-/Backend

Hatte ich auch schon beim Username, aber wenn man das alles zusammenpappt und nen md5 hash draus macht, sollte das doch eigentlich egal sein, oder? Notfalls weglassen. Die Kombi DB-Server + DB-Name + DB-Prefix sollte ebenso ausreichend eindeutig sein wie ein Pfad.


Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)

Offline

#13 22. März 2016 19:58

Andynium
Moderator
Ort: Dohna / SN / Deutschland
Registriert: 13. September 2010
Beiträge: 7.017
Webseite

Re: CMSMS-1: Unterschiedliche Systempfade im Front-/Backend

NaN schrieb:

Die Kombi DB-Server + DB-Name + DB-Prefix sollte ebenso ausreichend eindeutig sein wie ein Pfad.

Denke ich auch. Hab es jetzt so umgesetzt

$session_name = 'CMSSESSID' . substr($config['db_hostname'] . $config['db_name'] . $config['db_prefix']), 0, 12);

Offline

#14 23. März 2016 09:21

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.435

Re: CMSMS-1: Unterschiedliche Systempfade im Front-/Backend

Da fehlt noch das md5() wink

$session_name = 'CMSSESSID' . substr( md5( $config['db_hostname'] . $config['db_name'] . $config['db_prefix']) ) , 0, 12);

Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)

Offline

#15 23. März 2016 09:52

Andynium
Moderator
Ort: Dohna / SN / Deutschland
Registriert: 13. September 2010
Beiträge: 7.017
Webseite

Re: CMSMS-1: Unterschiedliche Systempfade im Front-/Backend

Arghhh  ops ... gestern eindeutig zu lange über dem Manta-Code gebrütet - DANKE!!!

Ich hoffe, ich mache uns den Beta-Test nicht unnötig schwer...

Offline

#16 18. August 2016 14:26

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.435

Re: CMSMS-1: Unterschiedliche Systempfade im Front-/Backend

Nur mal so als Nachtrag, das Problem tritt unter Mac OS X 10.11.6 und MAMP 4.0 (PHP 7.0.8, Apache 2.2.31) immer noch auf. Kann also meiner Meinung nach nur am Dateisystem liegen bzw. wie Apache den Dateinamen durch das Betriebssystem validiert. Denn würde das Dateisystem zwischen Groß- und Kleinschreibung unterscheiden, würde man die angefragte Datei bei falscher Schreibweise ja nicht finden. Anderenfalls hätte die Konstante ja immer den Wert, den man von ihr erwartet.

Ist nur irgendwie doof, dass OS X statt des tatsächlichen Dateinamens den in der Adressleiste angefragten Dateinamen übergibt.
(Keine Ahnung wie das technisch tatsächlich abläuft, aber ich stelle mir das halt so vor, dass Apache das OS nach der angefragten Datei fragt, und wenn das OS einfach nur sagt "Geht klar" - anstatt den richtigen Namen zurückzugeben - dann wird eben dieser angefragte Dateiname verwendet. PHP kann dann überhaupt nichts mehr dafür.)

Peinlich ist, dass es unter Windows trotzallem ohne Probleme funktioniert. Das zu beheben, sollte also auch für Apple nicht allzu schwer sein. Wäre interessant zu wissen, ob man das auch von Apache aus beheben könnte.

Denn ein weiteres Problem ist, dass dadurch eine Sicherheitslücke entsteht. Man stelle sich vor, man schützt eine Datei oder ein Verzeichnis mittels .htaccess vor Zugriff von außen. Wenn man dabei in der .htaccess-Datei nicht alle Fälle von Groß- und Kleinschreibung durchgeht, braucht man in der Adressleiste beim Datei-/Verzeichnisnamen nur einen Buchstaben groß/klein zu schreiben und erhält Zugriff darauf!


Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)

Offline

#17 22. August 2016 13:36

Andynium
Moderator
Ort: Dohna / SN / Deutschland
Registriert: 13. September 2010
Beiträge: 7.017
Webseite

Re: CMSMS-1: Unterschiedliche Systempfade im Front-/Backend

NaN schrieb:

Denn ein weiteres Problem ist, dass dadurch eine Sicherheitslücke entsteht. Man stelle sich vor, man schützt eine Datei oder ein Verzeichnis mittels .htaccess vor Zugriff von außen. Wenn man dabei in der .htaccess-Datei nicht alle Fälle von Groß- und Kleinschreibung durchgeht, braucht man in der Adressleiste beim Datei-/Verzeichnisnamen nur einen Buchstaben groß/klein zu schreiben und erhält Zugriff darauf!

Ließe sich das ggf durch eine FilesMatch Abfrage kompensieren? Also in ähnlicher Weise wie hier

https://www.cmsmadesimple.de/forum/view … 016#p36016

mit dem Parameter ?i ...

Offline

#18 22. August 2016 13:46

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.435

Re: CMSMS-1: Unterschiedliche Systempfade im Front-/Backend

Tatsache!
Funzt:

<FilesMatch "^(?i:config\.php)$">
order deny,allow
deny from all
</FilesMatch>

Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)

Offline