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

8

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.

    
alexcoco 26.08.2010, 23:03
quelle

6 Antworten

8

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.

    
Daniel Vandersluis 26.08.2010, 23:06
quelle
3

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.

    
efritz 26.08.2010 23:05
quelle
2

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%     
Vaibhav Malushte 27.08.2010 01:03
quelle
1

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%     
Peter Ajtai 26.08.2010 23:12
quelle
1

sollte das nicht funktionieren?

%Vor%     
cragiz 26.08.2010 23:17
quelle
0

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:

%Vor%

Dann, in ajax.php , tun Sie einfach

%Vor%

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.

    
Chris Middleton 12.09.2014 14:20
quelle

Tags und Links