origin enable domain cross control chrome allow javascript ajax xmlhttprequest xss

javascript - enable - Cross-site XMLHttpRequest



xmlhttprequest cors javascript (3)

Quiero proporcionar un código JavaScript que funcione en cualquier sitio web donde esté incluido, pero siempre necesita obtener más datos (o incluso modificar datos) en el servidor donde está alojado el Javascript. Sé que existen restricciones de seguridad por razones obvias.

Considere index.html alojado en xyz.com que contenga lo siguiente:

<script type="text/javascript" src="http://abc.com/some.js"></script>

¿Puede some.js usar XMLHttpRequest para publicar datos en abc.com? En otras palabras, ¿se confía implícitamente en abc.com porque cargamos Javascript desde allí?


La opción más fácil para usted sería realizar un proxy de la llamada a través del servidor que carga el javascript. Entonces some.js haría una llamada al servidor de alojamiento, y ese servidor reenviaría la solicitud a abc.com.

por supuesto, si esa no es una opción porque no controlas el hoster, hay algunas opciones, pero parece estar atascado en las dificultades del navegador cruzado: http://ajaxian.com/archives/how-to-make-xmlhttprequest-calls -to-another-server-in-your-domain


Puedes usar easyXSS . Es una biblioteca que le permite pasar datos y llamar a métodos a través de la delimitación del dominio. Es bastante fácil y deberías poder usarlo. Hay muchos ejemplos en el sitio code.google.com


¿Puede some.js usar XMLHttpRequest para publicar datos en abc.com? En otras palabras, ¿se confía implícitamente en abc.com porque cargamos Javascript desde allí?

No, porque el script se carga en un dominio separado, no tendrá acceso ...

Si confías en la fuente de datos, entonces quizás JSONP sea la mejor opción. JSONP implica agregar dinámicamente nuevos elementos SCRIPT a la página con el SRC configurado en otro dominio, con una devolución de llamada establecida como un parámetro en la cadena de consulta. Por ejemplo:

function getJSON(URL,success){ var ud = ''json''+(Math.random()*100).toString().replace(//./g,''''); window[ud]= function(o){ success&&success(o); }; document.getElementsByTagName(''body'')[0].appendChild((function(){ var s = document.createElement(''script''); s.type = ''text/javascript''; s.src = URL.replace(''callback=?'',''callback=''+ud); return s; })()); } getJSON(''http://YOUR-DOMAIN.com/script.php?dataName=john&dataAge=99&callback=?'',function(data){ var success = data.flag === ''successful''; if(success) { alert(''The POST to abc.com WORKED SUCCESSFULLY''); } });

Por lo tanto, tendrá que alojar su propia secuencia de comandos que podría usar PHP / CURL para publicar en el dominio abc.com y luego generará la respuesta en formato JSONP:

No soy muy bueno con PHP, pero tal vez algo como esto:

<?php /* Grab the variables */ $postURL = $_GET[''posturl'']; $postData[''name''] = $_GET[''dataName'']; $postData[''age''] = $_GET[''dataAge'']; /* Here, POST to abc.com */ /* MORE INFO: http://uk3.php.net/curl & http://www.askapache.com/htaccess/sending-post-form-data-with-php-curl.html */ /* Fake data (just for this example:) */ $postResponse = ''blahblahblah''; $postSuccess = TRUE; /* Once you''ve done that, you can output a JSONP response */ /* Remember JSON format == ''JavaScript Object Notation'' - e.g. {''foo'':{''bar'':''foo''}} */ echo $_GET[''callback''] . ''({''; echo "''flag'':'' . $postSuccess . '',"; echo "''response'':'' . $postResponse . ''})"; ?>

Entonces, su servidor, sobre el que tiene control, actuará como un medio entre el cliente y abc.com, enviará la respuesta de vuelta al cliente en formato JSON para que pueda ser entendido y utilizado por JavaScript ...