2012-02-01 10 views
5

Editar: encontrado respuesta aquí Ajax using https on an http pagedominios para diferentes protocolos

¿Cómo puedo pasar por alto política del mismo origen para diferentes protocolos?

encontré esto: https://developer.mozilla.org/en/Same_origin_policy_for_JavaScript

Dice HTTP y HTTPS no es el mismo dominio. Es posible el método de cross-sub-domain como

document.domain = "https://company.com";

en el documento que llama?

Por supuesto, dado que ambos sitios están en company.com. La diferencia es que uno usa http y el otro https.

¿O tengo que usar los métodos de dominio cruzado habituales como JSONP, proxy y CORS?

Respuesta

0

En general, sí, necesitaría usar JSONP para realizar una solicitud entre dominios o entre protocolos para adherirse a la política del mismo origen.

ofrecer una alternativa al uso de Conjunto de la cabecera Access-Control-Allow-Origen "*" que no es compatible en todos los navegadores, están sujetas a cambio, etc.

Usted puede usar PHP u otro del lado del servidor lenguaje de programación para emular una respuesta del mismo origen desde un origen o protocolo diferente solicitando un script php del mismo origen (local) en su URL ajax.

En el caso de PHP y jQuery, estos son algunos ejemplos genéricos.

Ambos métodos a continuación son controvertidos, propensos a errores y están sujetos a ataques de scripts entre sitios, como es el conjunto de encabezado Access-Control-Allow-Origin "*"!

Así que asegúrese de formatear su propio token de CSRF o clave, escape de cualquier forma de entrada del usuario que se suministre, o utilice un marco para estandarizar solicitudes/respuestas para protegerse de los ataques.

También hay una sobrecarga asociada a la solicitud de página adicional que el servidor necesita para recibir los datos externos, pero es más confiable que esperar que el cliente y el servidor admitan el encabezado Set Access-Control-Allow-Origin "* "

Envíe una solicitud local a un script del lado del servidor y espere json como respuesta.

HTML

<script type="text/javascript"> 
$.ajax({ 
type: 'get', 
url: '/get_cross_domain.php', 
dataType: 'json', 
data: { 
    'foo' = 'bar' 
}, 
success: function(data){ 
    console.log(data); 
} 
}); 
</script> 

obtener los datos de un dominio o protocolo diferente para proporcionar a la petición local.

La respuesta aparece interna mientras que los datos reales proceden de una fuente externa.

get_cross_domain.php (Curl)

<?php 
//initial output buffer 
ob_start(); 
$ch = curl_init(); 
$options = array(
    CURLOPT_URL => 'https://example.com/json_source.js', 
    CURLOPT_RETURNTRANSFER => true 
); 
curl_setopt_array($ch, $options); 
$response = curl_exec($ch); 
curl_close($ch); 
$json = $response; 
//send nothing but the json response 
ob_start(); 
header('Content-Type: application/json'); 
echo $json; 
ob_flush(); 
//discard anything other than our json response. 
while(ob_get_level > 0){ 
    ob_end_clean(); 
} 
exit; 

El método rizo le da mucho más control sobre las opciones, como ser capaz de definir la URL de referencia y hacer caso omiso de CA no válido, etc.

get_cross_domain.php (incluir)

<?php 
//requires allow_url_include=1 in php.ini 
ob_start(); 
include('https://example.com/json_source.js'); 
$json = ob_get_clean(); 
header('Content-Type: application/json'); 
echo $json; 
exit; 
Cuestiones relacionadas