Este problema de segurança deve ser atribuído ao JavaScript. Geralmente, o servidor A é configurado para não permitir que a máquina B em outro domínio execute ajax em B para chamar recursos no servidor A. Aqui está um exemplo simples de risco de segurança:
Supondo que o ajax possa ser acessado a partir de um domínio, posso escrever o ajax em minha própria máquina para solicitar recursos em vários aplicativos da web do Google. Por exemplo, primeiro uso o firefox para estudar os endereços e parâmetros de um grande número de solicitações de ajax do GMail. o processo de login e posso obter o processo de verificação de cookies do usuário. Em seguida, escreva js para obter cookies de outros usuários nos domínios, para que você possa ignorar a senha do GMail do usuário e fazer login nas caixas de correio do GMail de outras pessoas
. é realmente impossível fazer ajax para quebrar o acesso ao domínio?
É verdade que o ajax não pode quebrar o domínio, mas podemos implementá-lo por meio de retransmissão. O chamado princípio do proxy é muito simples. Você pode configurar seu próprio contêiner entre seu próprio js e os recursos do servidor remoto A. asp, php, java, .net, etc. Uma possível linguagem web dinâmica é o asp como exemplo (obter a lista de amigos de um usuário no site da Redekuai e retornar o formato de dados xml)
<%
p = " http://redekuai.com/api/user_friends_xml/funy "
Response.BinaryWrite ZQcnGet(p)
Resposta.Flush
Função ZQcnGet(url)
Definir recuperação = CreateObject("Microsoft.XMLHTTP")
Com recuperação
.Abra "Obter", url, Falso, "", ""
.Enviar
ZQcnGet = .ResponseBody
Terminar com
Definir recuperação = nada
Função final
%>
Salve este código como proxy.asp e coloque-o no IIS. Neste momento, você pode encontrar uma máquina para escrever js e usar ajax para solicitar proxy.asp. .
O código de amostra PHP é mais simples
echo file_get_contents(" http://redekuai.com/api/user_friends_xml/funy "");
?>
Nota: A versão php precisa ser >= 4.3.0.
Aqui está um exemplo de código para a versão asp.net (C#):
using System.Net;
usando System.IO;
usando System.Text;
ajaxpages de classe parcial pública: System.Web.UI.Page
{
protegido void Page_Load (remetente do objeto, EventArgs e)
{
WebRequest wr = WebRequest.Create(" http://redekuai.com/api/user_friends_xml/funy ");
WebResponse wres=wr.GetResponse();
Codificação resEncoding = System.Text.Encoding.GetEncoding("utf-8");
StreamReader sr = novo StreamReader(wres.GetResponseStream(), resEncoding);
string html = sr.ReadToEnd();
Resposta.Write(html);
sr.Fechar();
wres.Fechar();
}
}
Respectivamente proxy.asp proxy.php proxy.aspx
Então, qual é o significado prático de fazer um bom trabalho como proxy e permitir o acesso de domínio js a recursos remotos de sites em sua própria máquina geral (não em um servidor web)?
Você sabe, a tecnologia atual da Internet entrou na era do Mashup absoluto. Existem mais de 2.000 empresas nos Estados Unidos que dependem do APP do Facebook para sobreviver. É verdade que esse tipo de cadeia industrial estrangeira não pode ser desenvolvida na China? Você deve saber que a Internet também se tornará a infraestrutura da China em 5 anos. Já existem sites web2.0 relativamente bons que estão abrindo APIs (disparando novamente, esquentando rapidamente) ou se preparando para abri-las.