wake-up-neo.com

erlauben Sie domänenübergreifende Ajax-Anforderungen

In meinem Projekt muss ich zulassen, dass andere Ajax-Anforderungen an mein Skript senden. Externe Anfragen können daher von anderen Websites und Domänen und möglicherweise von Browsererweiterungen stammen.
Ich habe einfach diese beiden Zeilen oben in mein Skript eingefügt, damit sie es tun können: 

header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST');  

Jetzt ist meine Frage: Ist hier eine Sicherheitsüberlegung, die ich übersehen habe? Macht diese einfache Lösung ernsthafte Probleme?
Wenn ja, was ist die bessere Lösung? 

Danke für die Antwort.

39
Aliweb

Wie oben erwähnt, kann jeder jederzeit eine Anfrage an Ihre Seite senden. Die wichtigsten Sicherheitsbedenken, die Sie benötigen, sind die Überprüfung der Benutzereingaben und das Aufdecken von Informationen, die nur für den öffentlichen Gebrauch verfügbar sind. Das gilt aber für alle Skripte.

Die zwei Hauptprobleme, auf die Sie sich nach der Überprüfung der Benutzereingaben konzentrieren müssen, sind:

  1. Das Problem, das Sie möglicherweise haben, ist, dass Benutzer die Informationen in ihre Skripts aufnehmen. Je nach Browser (und sogar zwischen verschiedenen Versionen desselben Browsers) gibt es unterschiedliche Sicherheitsregeln, die verhindern, dass die Informationen zurückgegeben werden. Eine gängige Lösung hierfür ist das Bereitstellen von Informationen als "JSONP", das den Rückgabewert als einen Funktionsaufruf einschließt, der vom Client ausgeführt werden kann. Hier ein kurzes Beispiel (aus http://www.geekality.net/2010/06/27/php-how-to-easily-provide-json-and-jsonp/ ). Um es weiter zu sperren, können Sie darauf bestehen, dass alle Abfragen JSONP sind, und alle Personen abweisen, die die Rückruffunktion nicht senden.

.

<?php

header('content-type: application/json; charset=utf-8');
$data = array(1, 2, 3, 4, 5, 6, 7, 8, 9);
echo $_GET['callback'] . '('.json_encode($data).')';

?>
  1. Jemand missbraucht Ihren Dienst, indem er regelmäßig anruft. Sie können die IP-Adresse abfangen und ablehnen, wenn Sie zu viele Anrufe von einer IP-Adresse erhalten. Nicht narrensicher, aber es ist ein Anfang. 

Andere Faktoren zu berücksichtigen:

  • cookies und andere Header, die von Ihrem Skript festgelegt wurden, werden wahrscheinlich ignoriert
  • gleiches gilt für Sitzungen
19
Robbie

Wie zerkms sagte, wenn sie einfach zu Ihrer PHP-Seite "gehen", werden sie in der Lage sein zu sehen, was auch immer sie raushängt. Wenn es möglich ist (Nicht sicher, ob das der Fall ist), wird es auch unerwünschten Personen ermöglichen, ihre eigenen Formulare selbst auf einem localhost zu erstellen und sie mit AJAX einzureichen, um die gewünschten Antworten zu erhalten. Wenn dies in Ordnung ist Sie und die Informationen sind mehrdeutig/harmlos ... Dann würde ich vermuten, dass es "sicher" wäre. Es ist KEINE Methode, sensible Informationen abzurufen/zu übertragen 

1
Zak
private function set_headers() {
    header("HTTP/1.1 ".$this->_code." ".$this->get_status_message());
    header("Content-Type:".$this->_content_type);           
    header("Access-Control-Allow-Origin: *");
}
0
paras