Frage

Was ist die zuverlässige und sichere Art und Weise zu bestimmen, welcher Seite entweder gesendet oder (über AJAX) genannt, die aktuelle Seite. Ich will nicht die $_SERVER['HTTP_REFERER'] verwenden, weil der (fehlenden) Zuverlässigkeit, und ich brauche die Seite nur von Anfragen kommen aufgerufen wurde auf meiner Website stammen.
Edit:. Ich bin auf der Suche, um sicherzustellen, dass ein Skript, das eine Reihe von Aktionen Preforms von einer Seite auf meiner Website aufgerufen wird

War es hilfreich?

Lösung

Die REFERER werden durch den Browser des Clients als Teil des HTTP-Protokolls gesendet und ist daher in der Tat unzuverlässig. Es ist vielleicht nicht da sein, es gefälscht werden könnte, kann man einfach nicht vertrauen, wenn es aus Gründen der Sicherheit ist.

Wenn Sie überprüfen wollen, ob eine Anfrage von Ihrer Website kommt, auch kann man nicht, aber man kann der Benutzer verifiziert wurde auf Ihrer Website und / oder authentifiziert wird. Cookies werden in AJAX-Anfragen gesendet, so dass Sie sich darauf verlassen können.

Andere Tipps

Was ich habe festgestellt, am besten ist ein CSRF-Token und es in der Sitzung für Links speichern, wo Sie die Referrer überprüfen müssen.

Wenn Sie also einen FB Rückruf erzeugen dann wäre es in etwa so aussehen:

$token = uniqid(mt_rand(), TRUE);
$_SESSION['token'] = $token;
$url = "http://example.com/index.php?token={$token}";

Dann wird der index.php wird wie folgt aussehen:

if(empty($_GET['token']) || $_GET['token'] !== $_SESSION['token'])
{
    show_404();
} 

//Continue with the rest of code

Ich weiß von sicheren Websites, die das Äquivalent von dieser für ihre sichere Seiten zu tun.

Mit $ _SERVER [ 'HTTP_REFERER']

  

Die Adresse der Seite (falls vorhanden), die die User-Agenten auf dem genannten   aktuelle Seite. Dies wird durch den User-Agent eingestellt. Nicht alle User Agents werden   setzen Sie diese, und einige bieten die Möglichkeit, HTTP_REFERER als zu modifizieren   Feature. Kurz gesagt, es ist nicht wirklich vertraut werden kann.

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 Hand unter Kunden, Ihnen zu sagen, woher es kam. Man könnte sich vorstellen, nur auf einigen Seiten Ihrer Website platzieren Cookies oder Sitzungen Informationen zu verwenden, aber Ihre würde so tun Benutzererfahrung mit Lesezeichen brechen.

Wir haben nur einzelne Option gelassen, nachdem alle gefälschte Referrer Probleme beim Lesen: d.h. Die Seite wünschen wir als Referrer verfolgen sollte dann überprüft in der Sitzung rief in der Sitzung, und als Ajax gehalten werden, wenn es Referrer Seite Wert hat und dabei die Wirkung anderer weise keine Aktion aus.

Während auf der anderen Seite, als er fordert jede andere Seite dann den Referrer Sitzungswert macht auf null.

Beachten Sie, dass Session-Variable wird auf Wunsch Seitenanforderung nur gesetzt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top