8 Stimmen

Gibt es eine Möglichkeit zu verhindern, dass AJAX-Seiten allein in einem Browser angezeigt werden?

Wenn ich zum Beispiel einen Teil meiner Seite mit AJAX aktualisieren möchte, würde ich normalerweise den entsprechenden Aufruf an getPost.php machen, der das Markup zurückliefert, das in meine Seite eingefügt werden soll. Gibt es eine Möglichkeit zu verhindern, dass ein Benutzer direkt auf diese Seite zugreift (z. B.: example.com/getPost.php mit den entsprechenden GET- oder POST-Argumenten) und nur einen Teil der Seite erhält, da diese mit AJAX als Teil eines Ganzen und nicht allein verwendet werden sollte?

Ich glaube nicht, dass Berechtigungen auf die Datei festgelegt werden können, da es der Client ist, der die Seite anfordert, aber gibt es eine Möglichkeit, dies zu tun, indem Sie ein zusätzliches Argument übergeben, das als eine Prüfziffer der Art dienen kann.

8voto

Daniel Vandersluis Punkte 87406

Sie könnten einen Blick auf die Anfrage-Header werfen und erzwingen, dass ein Header für AJAX-Anfragen gesetzt werden muss (oft verwenden Leute X-Requested-With mit einem Wert wie XMLHttpRequest ). Beachten Sie, dass dieser Header nicht gesetzt wird, es sei denn, Sie setzen ihn selbst, wenn Sie Ihre AJAX-Anfrage stellen (oder eine Javascript-Bibliothek verwenden, die dies automatisch tut). Es gibt jedoch keine Möglichkeit zu garantieren, dass jemand diese Kopfzeile nicht selbst einfügt, wenn er es möchte.

El X-Requested-With Der Wert der Kopfzeile ist zu finden in $_SERVER['HTTP_X_REQUESTED_WITH'] .

3voto

efritz Punkte 5047

Sie können die Kopfzeile $_SERVER['HTTP_X_REQUESTED_WITH'] überprüfen. Er sollte gleich dem Wert "XMLHttpRequest" sein, wenn es sich um eine Ajax-Anfrage handelt.

Edit - wie Daniel Vandersluis sagte, gibt es keine Möglichkeit, dies vollständig durchzusetzen. Sie können User Agent, Referrer - alles, was mit der Anfrage kommt - fälschen.

2voto

Vaibhav Malushte Punkte 141

Was auch immer Sie beim Server anfordern, er speichert die Informationen in $_SERVER variabel

Um zu überprüfen, welche Informationen diese Variable speichert, versuchen Sie Folgendes

print_r($_SERVER);

//you will see the difference in http and ajax request 

Verwenden Sie diese Variable zur Prüfung wie folgt

if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) &&
    strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
   //ajajx request
}
else {
   //not an ajajx request
}

1voto

Peter Ajtai Punkte 55551

Da es keine Möglichkeit gibt, 100%ig sicher zu sein, wer die Frage stellt, können Sie die Frage selbst einschränken.

Wie dies umgesetzt wird, hängt natürlich von der jeweiligen Seite ab.

Wenn Sie beispielsweise den Befehl curl auf einer URL ausführen, können Sie die eingehende Variable auf eine bestimmte Domäne beschränken.

<?php
if (substr($_GET["url"], 0, 19) !== "http://example.com/")
{
    die();
}
// otherwise carry on
?>

1voto

cragiz Punkte 453

Sollte das nicht funktionieren?

if(preg_match("/getPost\.php/", $_SERVER['PHP_SELF'])){
     // Access to file directly, quit..
     die();
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X