Überprüfen auf include()

Pre7ender

Mitglied
Ich habe eine Seite so aufgebaut, dass über GET andere Seiten included werden.

Diese Seiten, also die PHP Files, welche included werden, haben alle das Format 'name.inc.php'.

Jetzt möchte ich zur Sicherheit eine Funktion schreiben, die mir überprüft, ob solche PHP Files ein 'inc' im Namen haben (kein Problem) und wenn ja, ob sie dann auch von irgendwo included werden!

Nur wie mach ich das?
 
wenn ja, ob sie dann auch von irgendwo included werden!
Verstehe das Problem noch nicht.

Aber guck dir folgendes Code-Beispiel an evt. hilft es dir ja schon.
PHP:
switch($_GET['cat'])
{
	case "home":
		// if(file_exists("name.inc.php")) include 'name.inc.php';
                // berechtigter Einwand Sir Robin
 
                if(is_readable("name.inc.php")) include 'name.inc.php';
		else include '404.inc.php';
	break;
        default: // ...
        break;
}
 
Zuletzt bearbeitet:
man sollte vielleicht eher "is_readable" anstelle von "file_exists" nehmen in einem solchen Fall, da es zum einen atomar ist und somit Race Conditions vorbeugt, und zum anderen weniger fehleranfällig ist (eine Datei kann existieren, das heißt aber noch lange nicht, dass du sie include kannst) ... das nur als kleine Info am Rande.
 
Ja tut mir leid, hab mich etwas unverständlich formuliert :)

So wie ihr es beschrieben habt, hab ichs! Kein Ding.

seite.de/index.php?cat=news

Somit tut er news.inc.php includen.

Frage / Problem:
Ich möchte verhindern, dass User seite.de/news.inc.php aufrufen können! Wenn doch einfach auf index.php weiterleiten..

Um dies zu realisieren, will ich wissen, wie ich in die news.inc.php einbauen kann, dass es beim aufrufen überprüft ob es included wurde. So wie es von der index.php korrekterweise gemacht wird.

Versteht ihr was ich meine? ;)
 
Eine Alternative zu dem Chinesen :-) da über mir:

definiere eine Konstante oder Variable oder was auch immer in deiner index.php und prüfe ob die in der includeten Datei vorhanden ist. Ist sie das nicht, wurde die Datei direkt aufgerufen. Dies hat gegenüber Dennis' Variante den Vorteil, dass sie unabhängiger von Client und Server ist, da beides vom Client/Server beeinflussbar ist. (dieser Satz klingt irgendwie komisch)
 
Dann aber am besten eine Konstante, denn die kann selbst durch aktives register_globals nicht eingeschleust werden. Natuerlich kann man auch eine Variable mit einem sehr kreativen Namen wie z.B. $puckeljucken oder $kakerlakenkacke nutzen, aber eine Konstante ist dafuer doch besser geeignet.
Sir Robin hat gesagt.:
Eine Alternative zu dem Chinesen :D da über mir:
...brave Sir Robin ran away...
 
Hi,

noch vielleicht ne andere Lösung, wenn dein Server Mod_rewrite unterstützt ist das wohl vielleicht doch auch ne sehr saubere Lösung.
Dort dann einfach umleiten lassen wenn nicht index.php?kat=blubber in der URL steht bzw. wenn was anderes als URL da drin steht.
 
Sicherheitsmaßnahmen sollten zu erst auf Anwendungsebene erfolgen bevor man bestimmte Konfigurationen voraussetzt.

Eine Sicherheitslücke die sich nur unter Register Globals ausnutzen lässt bleibt eine Sicherheitslücke.

:offtopic:
Dennis: touché :-) Bin aber nicht nach dem benannt ;)
 
Vielen Dank für die Lösungsvorschläge!

Ich werde es am Wochenende oder heute Abend vielleicht noch mit der Konstante so machen..

Danke nochmals & Gruss
 
Zurück