Dieses Sicherheitsproblem sollte auf JavaScript zurückzuführen sein. Im Allgemeinen ist Server A so eingerichtet, dass Maschine B in einer anderen Domäne nicht Ajax auf B ausführen kann, um Ressourcen auf Server A aufzurufen. Hier ist ein einfaches Beispiel für ein Sicherheitsrisiko:
Unter der Annahme, dass von einer Domain aus auf Ajax zugegriffen werden kann, kann ich Ajax auf meinem eigenen Computer schreiben, um Ressourcen in verschiedenen Google-Webanwendungen anzufordern. Beispielsweise verwende ich zunächst Firefox, um die Adressen und Parameter einer großen Anzahl von Ajax-Anfragen von GMail zu untersuchen Der Anmeldevorgang und der Benutzer-Cookie-Überprüfungsprozess können dann js schreiben, um die Cookies anderer Benutzer domänenübergreifend abzurufen, sodass Sie das GMail-Passwort des Benutzers umgehen und sich
mit domänenübergreifenden Ajax-Einschränkungen bei
den GMail-Postfächern anderer Personen anmelden können.Ist es wirklich unmöglich, Ajax zu verwenden, um den Domänenzugriff zu unterbrechen?
Es stimmt, dass Ajax die Domäne nicht aufbrechen kann, aber wir können es über Relay implementieren. Das sogenannte Proxy-Prinzip ist sehr einfach. Sie können Ihren eigenen Container zwischen Ihren eigenen js und den Ressourcen von Remote-Server A einrichten asp, php, java, .net usw. Eine mögliche dynamische Websprache ist asp als Beispiel (erhalten Sie die Freundesliste eines Benutzers auf der Redekuai-Website und geben Sie das XML-Datenformat zurück)
<%
p = " http://redekuai.com/api/user_friends_xml/funy "
Response.BinaryWrite ZQcnGet(p)
Response.Flush
Funktion ZQcnGet(url)
Set Retrieval = CreateObject("Microsoft.XMLHTTP")
Mit Abruf
.Öffnen Sie „Get“, url, False, „“, „“
.Schicken
ZQcnGet = .ResponseBody
Ende mit
Abruf festlegen = Nichts
Funktion beenden
%>
Speichern Sie diesen Code als Proxy.asp und fügen Sie ihn dann in IIS ein. Zu diesem Zeitpunkt können Sie einen Computer zum Schreiben von js finden und Ajax verwenden, um Proxy.asp anzufordern. Am Ende entspricht dies der Realisierung des Ajax-Domänenzugriffs .
PHP-Beispielcode ist einfacher
echo file_get_contents(" http://redekuai.com/api/user_friends_xml/funy "");
?>
Hinweis: Die PHP-Version muss >= 4.3.0 sein.
Hier ist ein Beispielcode für die asp.net-Version (C#):
using System.Net;
mit System.IO;
Verwenden von System.Text;
öffentliche Teilklasse ajaxpages: System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
WebRequest wr = WebRequest.Create(" http://redekuai.com/api/user_friends_xml/funy ");
WebResponse wres = wr.GetResponse ();
Codierung resEncoding = System.Text.Encoding.GetEncoding("utf-8");
StreamReader sr = new StreamReader(wres.GetResponseStream(), resEncoding);
string html = sr.ReadToEnd();
Response.Write(html);
sr.Close();
wres.Close();
}
}
bzw. Proxy.asp Proxy.php Proxy.aspx
Welche praktische Bedeutung hat es also, als Proxy gute Arbeit zu leisten und den JS-Domänenzugriff auf Remote-Website-Ressourcen auf Ihrem eigenen allgemeinen Computer (kein Webserver) zu ermöglichen?
Wissen Sie, die aktuelle Internet-Technologie ist in die absolute Mashup-Ära eingetreten. Mehr als 2.000 Unternehmen in den Vereinigten Staaten verlassen sich auf die Facebook-App, um zu überleben. Stimmt es, dass eine solche ausländische Industriekette in China nicht entwickelt werden kann? Sie müssen wissen, dass das Internet in 5 Jahren auch zur Infrastruktur Chinas werden wird. Es gibt bereits relativ gute Web2.0-Sites, die APIs öffnen (erneut schießen, schnell heiß werden) oder sich darauf vorbereiten, sie zu öffnen.