WebWork Magazin - Webseiten erstellen lassen, Online Medien, html

Webhoster, Webhosting Provider und Domain registrieren

Home | Registrieren | Einloggen | Suchen | Aktuelles | GSL-Webservice | Suleitec Webhosting
Reparatur-Forum | Elektro forum | Ersatzteilshop Haushalt und Elektronik



Im Homepage und Webhosting-Forum --- include () und $PHP_SELF

Scripte und Programme für PHP, MYSQL. Diskussionen zur Programmierung im Web. Fragen zu CMS, Blogsoftware, Shops, Newsletter und vielen weiteren Scripten.

Forum » PHP & MySQL » include () und $PHP_SELF - 23 Nov 2024 Antworten
include () und $PHP_SELF
brubel
Pixelschubser
Threadstarter




Beiträge: 4

Ich habe mehrere Scripts, die -fest vorgegeben- nach dem Schema

http://www.meineseite.de/modules.php?name=Statistics

aufgerufen werden (ich land' dann z.B. im Verzeichnis / in der Datei modules/Statistics/index.php).

U.a. um den Dateinamen abzukürzen, erstell ich eine neue Datei, z.B. statistiken.php, mit folgendem Inhalt:

1: 
2: 
3: 
4: 
5: 
6:



Klappt wunderbar, wenn ich in der o.a. index.php am Anfang die Funktion

1: 
2: 
3: 
4: 
5:
if (!eregi("modules.php", $PHP_SELF)) {
    die ("You can't access this file directly...");
}


rausnehme.

Wofür ist dieser letzte Code da? Ist das Kosmetik oder Sicherheit oder ...?

  Profil   Website   Editieren   Zitieren
bbastix
Pixelschubser




Beiträge: 19

Hi brubel:
Die Funktion prüft, ob das Script, das aufgerufen wurde "modules.php" heisst. Wenn Du also dieses include file von "modules.php" aus aufrufst, dann ist alles okay. Wenn nicht, dann 'stirbt' das Script.

Damit hat es folgendes auf sich:
Vermutlich greift Dein modules.php vor dem einschließen der entsprechenden Datei (modules/Statistics/index.php) auf eine Datenbank zu, in der es aus einer Tabelle die Daten des Benutzers ausliest, der dann vermutlich Teil einer Benutzergruppe ist und vergleicht diese Daten mit den Zugriffsrechten der aufgerufenen Seite, die auch in einer Datenbanktabelle verwaltet werden. D.h. nun aber, dass ein unautorisierter Besucher das include file ja direkt aufrufen könnte und somit die Zugriffsrecht-Prüfung umgehen würde. Deshalb wird im include file geprüft, ob das Script, das gerade läuft auch wirklich modules.php ist, die index.php darin also nur eingeschlossen ist, oder ob die index.php direkt aufgerufen wurde (in diesem Fall wäre $PHP_SELF = "index.php" und nicht "modules.php".

Da das aufgerufene Script nun in Deinem Fall aber "statistiken.php" ist, ist $PHP_SELF auch "statistiken.php", jedoch nicht "modules.php" blockt das include file den Zugriff ab.

Abhilfe:
Theoretisch wäre es nun denkbar, die Prüfung von $PHP_SELF auf alle Skripte auszudehnen, die du der Abkürzung halber eingerichtet hast, also:
1: 
2: 
3: 
4: 
5:
if (!eregi("modules.php|statistik.php|home.php", $PHP_SELF)) {
    die ("You can't access this file directly...");
}

Macht aber nicht wirklich Sinn, da das schlecht zu handeln ist (auch wenn man die Abfrage wiederum zentral auslagern würde).

Jetzt gäbe es die Möglichkeit, in "Statistik.php" einfach eine Umleitung zu machen:
1: 
2: 
3: 
4: 
5:



das ist vermutlich für Deine Zwecke gerade die einfachste Lösung.

Eine elegantere Lösungen wäre diese:
Wenn Du es kannst, dann leg Deine include files oberhalb der doc_root ab. Ob Du das kannst, hängt von Deinem Provider ab. Angenommen ein Aufruf von http://www.domain.tld greift auf ein Serververzeichniss:
httpd/htdocs/domain/www/docs/ zu, dann könntest Du ein Verzeichnis:
httpd/htdocs/domain/www/includes/ anlegen und dort die include files ablegen. Die Daten sind dann via HTTP nicht mehr zu erreichen (sie haben ja keine Adresse/URL) und können von modules.php mit include("../includes/Statistics.php) eingeschlossen werden. Du kannst also getrost den genannten Code aus dem Skript löschen und alles würde funktionieren.

Übrigens:
Das Einrichten eines Skriptes mit dem Namen (in Deinem Beispiel) Statistiken.php macht Sinn, nicht nur, um die URI abzukürzen, sondern auch, um die Indizierung durch Suchmaschinen zu ermöglichen, die ja oft Seiten ignorieren, deren URI's z.B. '.php' oder 'cgi' oder '?...' usw. enthalten.
Dazu werden jedoch nicht wirklich Dateien angelegt, sondern der Server wird dazu aufgerufen, entweder den aufgerufenen Namen umzuschreiben (www.domain.tld/seite/statistik/02 kann man so z.B. in http://www.domain.tld/seite.php?name=statistik&seite=2 umschreiben lassen) oder das aufgerufene Script umzuleiten (im obigen Beispiel würden alle Aufrufe, die http://www.domain.tld/seite/... heissen nach seite.php umgeleitet; dort wird dann der Rest der URI in Variablen geschrieben). Dadurch erleichtert sich die Verwaltung natürlich enorm.

Wenn Du das machen willst, dann finde zunächst heraus, ob auf dem Server PHP als Modul oder als CGI läuft (vermutlich CGI, aus Sicherheitsgründen) und ob in letzterem Fall das Modul mod_rewrite installiert ist.

Ich hoffe, ich konnte Dir helfen, ohne Dich völlig zu verwirren :D

Liebe Grüsse,
Basti

---
...

  Profil   E-Mail   Editieren   Zitieren
brubel
Pixelschubser
Threadstarter




Beiträge: 4

Hallo Basti,

Deine Antwort hat mir sogar sehr geholfen und mich nicht im Geringsten verwirrt.

Das Problem war, das mein jetziger Provider eben mod_rewrite nicht zulässt und meine Hintergedanken bei der ganzen Aktion waren ... Du ahnst es: die Suchmaschinen .

Also nochmal: Danke schön.

  Profil   Website   Editieren   Zitieren
bbastix
Pixelschubser




Beiträge: 19

'.php' macht sich nicht gut, wenn die Robots Deine Seite checken. In dem Fall solltest Du einen Providerwechsel in Erwägung ziehen bzw. zumindest mal die Technik-Abteilung Deines Providers kontaktieren. Das Modul ist doch ruck-zuck installiert und ich kann darin kein Sicherheitsrisiko erkennen.

Basti

---
...

  Profil   E-Mail   Editieren   Zitieren
michael
Foren-Team




Beiträge: 1930

Mit der .htaccess und ein wenig php lassen sich solche Sachen doch nett herstellen... gib in der htaccess an das zum beispiel alle dateien die "seite" heißen über den php-compiler laufen sollen und im kopf von der datei namens "seite" fängst du dann alles was hinter seite in der url steht ab... ganz einfach...


  Profil   Editieren   Zitieren
bbastix
Pixelschubser




Beiträge: 19

Bitte lies doch zunächst die bisherige Diskussion, bevor Du antwortest.
Aus brubel's Server ist PHP als CGI installiert, d.h. das lässt sich nur mit einer RewriteEngine machen. Da das mod_rewrite aber nicht installiert ist, geht da nix.

Die von Dir angesprochene Umleitung an den Compiler lässt sich ja nur machen, wenn PHP als Modul läuft, was ja nicht der Fall ist.

Vieleicht gibt es noch andere Wege, mir fällt aber keiner ein (via .htaccess).

Basti

---
...

  Profil   E-Mail   Editieren   Zitieren
brubel
Pixelschubser
Threadstarter




Beiträge: 4

Nur um dieser Diskussion den letzten "Schliff" zu geben: 's geht um PHPNuke und PostNuke, und mod_rewrite wäre - das ist richtig - mit Sicherheit die professionellste und beste Lösung.

Wer die beiden Systeme (s.o.) kennt und sich dafür interessiert: ich bin hier gelandet, weil ich bei u.a. Link eben auf Grund der Beschränkungen meines Providers nicht weiterkam.

Der Link: http://www.postnuke.com/modules.php?op=modload&name=News&file=article&sid=1804.

Für alle, die sich nicht für Nuke-Systeme interessieren, ist der Artikel vielleicht ein interessanter Lösungsansatz.

Zur grundsätzlichen Problematik, ob PHP-Seiten generell auf Grund der Dateiendung "schlechter bewertet" werden als HMTL-Seiten, kann ich wenig sagen, weil's mich in den letzten Wochen und Monaten ein wenig verwirrt hat.

Bei beiden hatte ich jeweils Pos. 1, 2, 3 von bis zu 46.000 Treffern (Google), erst seit die Url sich wirklich so in die Länge zieht (s.o.) bzw. sowohl '&' als auch '?' in wechselnder Kombination vorkommen, verlier ich - langsam .

Also nochmal, Danke schön.

  Profil   Website   Editieren   Zitieren
 

Antworten
Forum » PHP & MySQL » include () und $PHP_SELF

Aktuelle Beiträge zur Hilfe im Forum für Homepage - include () und $PHP_SELF im Forum Homepage Hosting AntwortenLetztes Posting
Cybersicherheit für Unternehmen
in "PHP & MySQL"
3 18.11.2024 14:05 von Gaswer
Wirtschaftslage in der Ukraine
in "PHP & MySQL"
3 22.10.2024 15:04 von Gaswer
Rangliste (Ohne Mysql) (Kompliziertes Ordner System)
in "PHP & MySQL"
3 19.07.2021 06:00 von newtopblog
kleines problem mit phpadmin
in "PHP & MySQL"
5 11.04.2021 22:22 von Zavylon
Counter mit PHP
in "PHP & MySQL"
4 22.03.2021 16:29 von Robeni
Fehlermeldung beim Importieren der Datenbank in phpmyadmin
in "PHP & MySQL"
0 02.08.2019 22:14 von iFuchs
CMS für Online Shop
in "PHP & MySQL"
18 26.05.2019 13:29 von raiserle
Regestrierungproblem
in "PHP & MySQL"
3 28.11.2018 13:20 von norbertofahey
PHP Datum ausgeben?
in "PHP & MySQL"
1 19.10.2018 10:04 von Klaus1973
PHP befehl ausführen
in "PHP & MySQL"
11 16.08.2018 09:08 von Klaus1973
Visual Composer selber programmieren?
in "PHP & MySQL"
0 22.01.2017 23:45 von Redji



Besucher : 8127853    Heute : 248     Gestern : 761     Online : 179     23.11.2024    10:30      1 Besucher in den letzten 60 Sekunden        
alle 60.00 Sekunden ein neuer Besucher
Nach oben