
UnkwnTech
Was ist der zuverlässigste und sicherste Weg, um festzustellen, welche Seite die aktuelle Seite entweder gesendet oder (über AJAX) aufgerufen hat. Ich möchte die nicht verwenden $_SERVER['HTTP_REFERER']
wegen der (mangelnden) Zuverlässigkeit, und ich möchte, dass die aufgerufene Seite nur von Anfragen stammt, die von meiner Website stammen.
Bearbeiten: Ich möchte überprüfen, ob ein Skript, das eine Reihe von Aktionen ausführt, von einer Seite auf meiner Website aufgerufen wird.
Der REFERER wird vom Browser des Clients als Teil des HTTP-Protokolls gesendet und ist daher tatsächlich unzuverlässig. Es könnte nicht da sein, es könnte gefälscht sein, Sie können ihm einfach nicht vertrauen, wenn es aus Sicherheitsgründen ist.
Wenn Sie überprüfen möchten, ob eine Anfrage von Ihrer Website kommt, können Sie das nicht, aber Sie können überprüfen, ob der Benutzer Ihre Website besucht hat und/oder authentifiziert ist. Cookies werden in AJAX-Anfragen gesendet, sodass Sie sich darauf verlassen können.

Wir0
Was ich am besten gefunden habe, ist ein CSRF-Token und speichere es in der Sitzung für Links, bei denen Sie den Referrer überprüfen müssen.
Wenn Sie also einen FB-Callback generieren, sieht das ungefähr so aus:
$token = uniqid(mt_rand(), TRUE);
$_SESSION['token'] = $token;
$url = "http://example.com/index.php?token={$token}";
Dann sieht die index.php so aus:
if(empty($_GET['token']) || $_GET['token'] !== $_SESSION['token'])
{
show_404();
}
//Continue with the rest of code
Ich kenne sichere Websites, die das Äquivalent für alle ihre sicheren Seiten tun.
Verwenden $_SERVER[‘HTTP_REFERER’]
Die Adresse der Seite (falls vorhanden), die den Benutzeragenten auf die aktuelle Seite verwiesen hat. Dies wird vom Benutzeragenten festgelegt. Nicht alle Benutzeragenten werden dies festlegen, und einige bieten die Möglichkeit, HTTP_REFERER als Funktion zu ändern. Kurz gesagt, es kann nicht wirklich vertraut werden.
if (!empty($_SERVER['HTTP_REFERER'])) {
header("Location: " . $_SERVER['HTTP_REFERER']);
} else {
header("Location: index.php");
}
exit;
Es gibt keine zuverlässige Möglichkeit, dies zu überprüfen. Es ist wirklich unter der Hand des Kunden, Ihnen zu sagen, woher es kam. Sie könnten sich vorstellen, Cookie- oder Sitzungsinformationen nur auf einigen Seiten Ihrer Website zu verwenden, aber dies würde die Benutzererfahrung mit Lesezeichen beeinträchtigen.
Wir haben nur noch eine einzige Option, nachdem wir alle gefälschten Referrer-Probleme gelesen haben: dh die Seite, die wir als Referrer verfolgen möchten, sollte in der Sitzung gehalten werden, und als Ajax aufgerufen werden, dann in der Sitzung prüfen, ob sie einen Referrer-Seitenwert hat, und die Aktion andernfalls nein ausführen Aktion.
Wenn er andererseits eine andere Seite anfordert, setzen Sie den Referrer-Sitzungswert auf null.
Denken Sie daran, dass die Sitzungsvariable nur auf die gewünschte Seitenanforderung gesetzt wird.
9883500cookie-checkReferer in PHP ermittelnyes
Warum sagst du $_SERVER[‘HTTP_REFERER’] ist nicht zuverlässig?
– Milan Babuškov
3. Oktober 2008 um 7:21 Uhr
Die PHP-Implementierung ist zuverlässig. Das Problem ist, dass dies nicht von jedem Browser gesendet wird, und Sie können es sogar ändern, wenn Sie möchten. Es ist also nicht zuverlässig, dass es von der Seite des Clients korrekt ist.
– Biri
3. Oktober 2008 um 7:23 Uhr
Eine Möglichkeit besteht darin, einen eindeutigen Schlüssel (z. B. eine GUID) in ein Feld Ihrer Seite einzufügen und ihn bei der nächsten Anfrage zurückzusenden.
– Philho
3. Oktober 2008 um 12:49 Uhr
Finden Sie die IP-Adresse des Servers heraus und verwenden Sie sie
$_SERVER[REMOTE_ADDR]
.– Benutzer835886
8. Juli 2011 um 18:24 Uhr