enforce - https developers facebook com apps 124024574287414
Facebook JavaScript SDK sobre HTTPS cargando elementos no seguros (8)
Tengo una aplicación de Facebook que usa Facebook Connect.js .
Estoy ejecutando mi aplicación a través de HTTPS. Todo el contenido del sitio se entrega desde https://
con la excepción de algunos contenidos que deben incluirse en Connect.js
de Facebook Connect.js
El problema es que recibo mensajes de advertencia que dicen que hay elementos no seguros dentro de la página.
Comprobé qué scripts se están cargando usando la pestaña Developer Tools / Network de Chrome para ver qué archivos se están cargando y desde dónde.
El único que puedo ver que se está cargando a través de HTTP y no a través de HTTPS es un archivo llamado http://static.ak.facebook.com/connect/canvas_proxy.php
.
¿Cómo puedo forzar que este archivo use HTTPS?
Añadiendo a Ralph Holzmann y Simon Bächler, el siguiente es un arreglo aún más difícil para cuando FB._ https solo no soluciona el problema;
FB._https = (window.location.protocol == "https:");
FB.init({
...
});
if (FB._https && window == window.parent) {
if (FB._domain && FB._domain.staticfb && FB._domain.https_staticfb)
FB._domain.staticfb = FB._domain.https_staticfb;
}
Ver también FB.Arbiter.inform () {... FB.getDomain ((d? ''Https _'': '''') + ''staticfb'', true) ...} donde d = ventana! = Window.parent && ... a partir de 2012-Feb-10.
En una nota al margen, si tiene declaraciones tipo doc en su página HTML como sigue, la referencia a " http://www.w3.org " también puede mostrar el error de advertencia de contenido en Internet Explorer.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
Entonces esto le daría el mismo enlace de protocolo:
FB._https = (window.location.protocol == "https:");
Estaba teniendo un problema similar (los comentarios de fb no funcionan en modo seguro). Esto lo resuelve, simplemente haga referencia al archivo javascript a través de https:
<script type="text/javascript" src="https://connect.facebook.net/en_US/all.js"></script>
O no especifique el esquema para que funcione para ambos:
<script type="text/javascript" src="//connect.facebook.net/en_US/all.js"></script>
Esto parece ser causado por este error de Facebook .
También vea esta publicación en el foro .
Ese error se marcó como resuelto el 3/16, pero sigo observando solicitudes que no son https a canvas_proxy.php. Espero que esto se solucione pronto ...
Me encontré con este problema hace unos días. Toda mi aplicación estaba usando HTTPS y mi problema era que solo se cargaban imágenes de perfil a través de HTTP ... Mi solución rápida y sucia fue reemplazar manualmente todos los nombres de dominio de las imágenes de perfil. Por ejemplo,
str_replace(''http://profile.ak.fbcdn.net'',''https://fbcdn-profile-a.akamaihd.net'',$user[''pic_square'']);
Deberá verificar y ver qué URL tienen las imágenes de su perfil. Asumo que no vienen exactamente del mismo lugar. Vea la URL de su propia imagen de perfil y sustituya lo que tengo en https://fbcdn-profile-a.akamaihd.net
.
Después de mirar más a fondo la documentación de Facebook :
Si necesita que se devuelva una imagen a través de una conexión segura, puede establecer el argumento return_ssl_resources en 1: https://graph.facebook.com/4/picture?return_ssl_resources=1 .
Encontré un parámetro adicional llamado return_ssl_resources
, y cuando se pasa con true
, devuelve imágenes de perfil usando HTTPS.
$fql = "SELECT uid, name, pic_square FROM user WHERE uid=me()";
$param = array( ''method'' => ''fql.query'', ''query'' => $fql, ''return_ssl_resources''=>1);
$fbuser = $facebook->api($param);
Funcionó como un amuleto, y dejé de recibir las advertencias de seguridad mixtas. ¡Espero que esto ayude!
Parece que FB._https fue reemplazado por:
FB._secure = (window.location.protocol == "https:");
TL; DR
establezca FB._https
en true
antes de llamar a FB.init
. Al igual que:
FB._https = true;
FB.init({
/* your app id and stuff */
});
Explicación
Si desisminifica el JavaScript SDK de Facebook, verá que básicamente es un objeto literal con muchas propiedades. Una de estas propiedades es _https
, que es un booleano. Esta propiedad determina qué conjunto de URL usar (almacenado en FB._domain
) cuando realiza solicitudes de API. Parece como si Facebook conservara dos conjuntos de URL para cada tipo de solicitud de API, una URL segura y una URL no segura, y luego utiliza una función de conmutación llamada getDomain()
para determinar cuál usar al realizar las solicitudes.
La razón por la que JavaScript SDK causa advertencias de seguridad se debe a la forma en que se define la propiedad FB._https
. Así es como se define actualmente a partir de 2011-8-24:
_https: (window.name.indexOf(''_fb_https'') > -1)
Aparentemente Facebook piensa que si la propiedad window.name
tiene _fb_https
, entonces debe ser una aplicación segura. Esto es obviamente incorrecto. La prueba real debería ser algo similar a esto:
_https: window.location.protocol == "https:"
Lamentablemente, el SDK no es de código abierto ni está bien documentado, por lo que no puedo enviar una solicitud de extracción para este cambio: P. A corto plazo, estableciendo FB._https
en true
manualmente antes de llamar a FB.init
debería hacer el truco.