Zum Beispiel, wenn ich einen Teil meiner Seite mit AJAX aktualisieren möchte, würde ich normalerweise den entsprechenden Aufruf von getPost.php machen, der das Markup zurückgibt, das in meine Seite eingefügt werden soll. Gibt es eine Möglichkeit zu verhindern, dass ein Benutzer direkt auf diese Seite zugreift (zB: example.com/getPost.php mit den entsprechenden GET- oder POST-Argumenten) und nur einen Teil der Seite bekommt, da dies mit AJAX als Teil eines Ganzen verwendet werden soll , nicht alleine?
Ich denke nicht, dass Berechtigungen für die Datei gesetzt werden können, da der Client die Seite anfordert, aber gibt es eine Möglichkeit, ein zusätzliches Argument zu übergeben, das als Prüfziffer dienen kann.
Sie können sich die Anforderungsheader ansehen und erzwingen, dass eine Kopfzeile für AJAX-Anfragen festgelegt werden muss (oft wird X-Requested-With
mit einem Wert wie XMLHttpRequest
verwendet). Beachten Sie, dass diese Kopfzeile erst dann festgelegt wird, wenn Sie sie selbst festlegen, wenn Sie Ihre AJAX-Anfrage stellen (oder eine Javascript-Bibliothek verwenden, die sie automatisch ausführt). Es gibt jedoch keine Möglichkeit zu garantieren, dass jemand diesen Header nicht selbst hinzufügen würde, wenn er das möchte.
Der Headerwert X-Requested-With
kann in $_SERVER['HTTP_X_REQUESTED_WITH']
gefunden werden.
Sie können den Header $ _SERVER ['HTTP_X_REQUESTED_WITH'] überprüfen. Es sollte gleich dem Wert 'XMLHttpRequest' sein, wenn es sich um eine Ajax-Anfrage handelt.
Bearbeiten - 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, spoofieren.
Was immer Sie auf dem Server anfordern, es speichert die Informationen in $_SERVER
variable
um zu überprüfen, welche Informationen diese Variable speichert, versuchen Sie dies
%Vor%Verwenden Sie diese Variable, um wie folgt zu prüfen:
%Vor%Da es keine Möglichkeit gibt, 100% sicher zu sein, wer die Frage stellt, können Sie die Frage selbst einschränken.
Die Implementierung hängt natürlich von der Seite ab.
Nehmen wir zum Beispiel an, dass Sie den curl-Befehl für eine URL ausführen. Sie können die eingehende Variable auf eine bestimmte Domäne beschränken.
%Vor%Ich denke, dass Sie Ihr Problem mit der Kryptographie (zumindest teilweise) lösen können.
Angenommen, Sie haben eine Seite main.php
, die JS enthält, um eine andere Seite namens ajax.php
aufzurufen. Wenn auf die Seite main.php
zugegriffen wird, verwenden Sie $browserKey
und $salt
, um eine $_SESSION["tempHash"]
zu erstellen. (Sie müssen auch das Salz speichern.) Geben Sie dann den Schlüssel für das JavaScript, das die Anfrage an Ihre Seite ajax.php
stellt, und prüfen Sie, ob der Schlüssel und das Salz den gleichen Hashwert wie zuvor erhalten. Führen Sie unter main.php
Folgendes aus:
Dann, in ajax.php
, tun Sie einfach
Ich bin kein Experte in diesem Bereich, also nimm meinen Rat mit einem Körnchen Salz . (Heh, Kryptographie Witz.)
Eine mögliche Schwachstelle bei diesem Ansatz ist, dass die Person Seite main.php
lädt und dann fünf Stunden wartet und die Seite ajax.php
aufruft. Es erlaubt ihnen jedoch immer noch nur einmal darauf zuzugreifen. Und Sie können andere Dinge tun, um dies zu verhindern. B. das Salz (das mit time()
erhalten wurde) überprüfen, dass nicht zu viel Zeit verstrichen ist. Oder senden Sie sogar periodische Heartbeats an den Server, die einen neuen Hash, Salz und Schlüssel generieren und den neuen Schlüssel an den Browser zurückgeben.