PHP Prüfen, wodurch eine PHP-Datei aufgerufen wird

  • Ersteller Ersteller Mr. Snoot
  • Erstellt am Erstellt am
M

Mr. Snoot

Gast
Hio,

kann ich prüfen, ob eine PHP-Datei bspw. durch include oder einen AJAX-Request aufgerufen wurde, um ein manuelles Aufrufen durch Besucher zu verhindern?

Natürlich kann ich prüfen, ob beim Aufruf der Datei bspw. bestimmte POST-/GET-Werte gesetzt sind und wenn diese falsch sind das Script abbrechen. Aber es wäre wesentlich einfacher (und wohl auch sicherer) zu prüfen, ob der Request von datei.xy erfolgt ist.
 
AW: Prüfen, wodurch eine PHP aufgerufen wird

Du kannst in deiner Haupt-PHP-Datei eine Konstante definieren. In der aktuellen PHP-Datei fragst du dann ab, ob die Konstante gesetzt ist. Bei Ajax-Aufrufen wäre das nicht der Fall, bei include schon.
 
AW: Prüfen, wodurch eine PHP aufgerufen wird

Persönlich defininiere ich immer Konstanten. Wird über die index.php aufgerufen, mach ich mir eine Konstante OVER_INDEX. Vielleicht kannst du ja über eine ajax.php aufrufen und die Konstante dann OVER_AJAX nennen.
 
AW: Prüfen, wodurch eine PHP aufgerufen wird

Wobei man sich fragen sollte, ob man die Datei nicht komplett aus dem Web-Root entfernt, wenn sie manuell von außen nicht aufgerufen werden soll. Es sei denn dein gewollter include ist ein "entfernter" include, dann geht's natürlich nicht.
 
Mr. Snoot schrieb:
Aber es wäre wesentlich einfacher (und wohl auch sicherer)
Was verleitet dich zu dieser Annahme? Die Request-Header können sehr wohl modifiziert werden.

Mr. Snoot schrieb:
ob eine PHP-Datei bspw. durch include oder einen AJAX-Request aufgerufen wurde
Ich sehe hier keinen Zusammenhang. Du kannst an jede mögliche PHP-Datei einen AJAX-Request schicken. Ob sie ihn verarbeitet ist eine andere Sache. Aber was hat es mit dem include auf sich?
 
Du solltest solche Dateien nicht verwenden. Das bringt immer Probleme mit sich. Include-Dateien sollten niemals direkt aufrufbar sein!
 
Ok, mit Dateien die via include eingebunden werden hat sich das Thema erledigt, da die wie gesagt ausgelagert oder auch via htaccess gesichert werden können.

Aber wie siehts mit $('#result').load('ajax/test.html'); aus. Die aufzurufende Datei kann jeder im Quelltext einsehen, ebenso ob und welche Parameter übergeben werden.
 
Nimm dir Firebug zur Hand und schau mal in den Request Header ;) Dort wird vermerkt dass es Ajax ist.
 
Jaaa... das hilft mir aber nicht weiter - will ja wissen, wie verhindere, dass jemand die Datei aufrufen kann :D
 
Alles, was per Ajax aufrufbar ist, ist prinzipiell auch auf andere Weise aufrufbar.
 
Wenn der Request per Ajax erfolgt, sollte im Request-Header X-Requested-With: XMLHttpRequest (je nach Browser) stehen, das könntest du zusätzlich überprüfen.
Wenn jemand den Header manipuliert, hilft das natürlich auch nichts...
 
Ich würde ein Unterverzeichnis erstellen und dies mit .htaccess schützen. Dann können nur scripte auf Deinem Webspace diese includen und von außen geht nix.
 
@snoot

Im Kopf der *.ajax.php.

PHP:
if(!isset($_SERVER['HTTP_X_REQUESTED_WITH']) || $_SERVER['HTTP_X_REQUESTED_WITH'] != 'XMLHttpRequest'){
 die();
}

Ist aber auch nur zu 50% sicher, wer sich auskennt schafft es trotzdem diese so zu öffnen das er den Inhalt sehen kann, doch vor dem normalen User bist du hiermit sicher.

Was macht das ganze? das Script ist zwar aufrufbar doch leer, der Inhalt wird nicht gezeigt.
 
Zurück
Oben