Este problema de seguridad debe atribuirse a JavaScript. Generalmente, el servidor A está configurado para no permitir que la máquina B en otro dominio ejecute ajax en B para llamar a recursos en el servidor A. A continuación se muestra un ejemplo simple de un riesgo de seguridad:
Suponiendo que se puede acceder a ajax desde un dominio, puedo escribir ajax en mi propia máquina para solicitar recursos en varias aplicaciones web de Google. Por ejemplo, primero uso Firefox para estudiar las direcciones y parámetros de una gran cantidad de solicitudes de ajax realizadas por GMail. el proceso de inicio de sesión y puedo obtener el proceso de verificación de cookies del usuario. Luego escriba js para obtener las cookies de otros usuarios en todos los dominios, de modo que pueda omitir la contraseña de Gmail del usuario e iniciar sesión en los buzones de correo de Gmail de otras personas
. ¿Es realmente imposible hacer ajax para interrumpir el acceso al dominio?
Es cierto que ajax no puede romper el dominio, pero podemos implementarlo mediante retransmisión. El llamado principio de proxy es muy simple. Puede configurar su propio contenedor entre su propio js y los recursos del servidor remoto A. asp, php, java, .net, etc. Un posible lenguaje web dinámico es asp como ejemplo (obtener la lista de amigos de un usuario en el sitio web de Redekuai y devolver el formato de datos xml)
<%
p = " http://redekuai.com/api/user_friends_xml/funy "
Respuesta.BinaryWrite ZQcnGet(p)
Respuesta.Flush
Función ZQcnGet(url)
Establecer recuperación = CreateObject ("Microsoft.XMLHTTP")
Con recuperación
.Abrir "Obtener", URL, Falso, "", ""
.Enviar
ZQcnGet = .ResponseBody
Terminar con
Establecer recuperación = nada
Función final
%>
Guarde este código como proxy.asp y luego colóquelo en IIS. En este momento, puede encontrar una máquina para escribir js y usar ajax para solicitar proxy.asp. Al final, es equivalente a lograr el acceso al dominio ajax. .
El código de muestra PHP es más simple
echo file_get_contents(" http://redekuai.com/api/user_friends_xml/funy "");
?>
Nota: La versión de PHP debe ser >= 4.3.0.
Aquí hay un código de muestra para la versión de asp.net (C#):
usando System.Net;
usando System.IO;
usando System.Text;
ajaxpages de clase parcial pública: System.Web.UI.Page
{
Page_Load vacío protegido (remitente del objeto, EventArgs e)
{
WebRequest wr = WebRequest.Create(" http://redekuai.com/api/user_friends_xml/funy ");
WebResponse wres = wr.GetResponse ();
Codificación resEncoding = System.Text.Encoding.GetEncoding("utf-8");
StreamReader sr = nuevo StreamReader(wres.GetResponseStream(), resEncoding);
cadena html = sr.ReadToEnd();
Respuesta.Escribir(html);
sr.Cerrar();
wres.Close();
}
}
Respectivamente proxy.asp proxy.php proxy.aspx
Entonces, ¿cuál es el significado práctico de hacer un buen trabajo como proxy y permitir el acceso del dominio js a recursos remotos del sitio web en su propia máquina general (no en un servidor web)?
Ya sabes, la tecnología de Internet actual ha entrado en la era absoluta del Mashup. Hay más de 2.000 empresas en los Estados Unidos que dependen de la aplicación de Facebook para sobrevivir. ¿Es cierto que este tipo de cadena industrial extranjera no se puede desarrollar en China? Debe saber que Internet también se convertirá en la infraestructura de China en 5 años. Ya hay sitios web 2.0 relativamente buenos que están abriendo API (disparando de nuevo, calentándose rápidamente) o preparándose para abrirlas.