Cargando fuente de Google en HTTPS, contenido bloqueado

3 minutos de lectura

avatar de usuario
vico

Hay un tema de wordpress que extrae automáticamente la opción de fuente seleccionada y la solicita de la fuente de Google. cuando se necesitaba SSL para algunas páginas seleccionadas, la fuente se convirtió en missing

Visualización del registro de la consola:

[blocked] La página en ‘https://www.ejemplo.com/‘ se cargó a través de HTTPS, pero ejecutó contenido no seguro desde ‘http://fonts.googleapis.com/css?family=Alegreya+Sans:300,400,500,700,800‘: este contenido también debe cargarse a través de HTTPS.

¿Entraría en el código y haría que todas las solicitudes en https desde la fuente de Google funcionaran? ¿Hay alguna solución a esto?

Encontré el código fuente… pero parece que ya lo está haciendo… ¿podría haber un error en la lógica if?

$prefix = "http";
            if(isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') $prefix = "https";

            if($get_google_font){

            if(!in_array($rule_split[0], $this->used_fonts))
            {
                $this->extra_output .= "\n<!-- google webfont font replacement -->\n";
                $this->extra_output .= '<link id="google_webfont_'.$this->webfont_count.'" rel="stylesheet" type="text/css" href="'.$prefix.'s://fonts.googleapis.com/css?family='.str_replace(' ','+',$rule_split[0]).$font_weight.'" />';
            }

avatar de usuario
Stefano Sanfilippo

Edite su tema reemplazando cada ocurrencia de http://fonts.googleapis.com/... con https://fonts.googleapis.com/... (Cuidado con el s).

Los recursos que pueden representar un riesgo para la seguridad (como scripts y fuentes) deben cargarse a través de una conexión segura cuando se solicitan en el contexto de una página segura por una razón obvia: podrían haber sido manipulados en el camino.

  • Sí, es posible lo contrario (cargar recursos vía TLS/SSL en una página no segura).

    – Stefano Sanfilippo

    2 de julio de 2014 a las 14:39


  • Ok, solo necesitaba confirmar, entraré en el código entonces. gracias~

    – vico

    02/07/2014 a las 14:40

  • ¿Alguna idea sobre el código que publiqué? parece que ya lo está haciendo, pero la declaración if parece ser falsa incluso en https

    – vico

    2 de julio de 2014 a las 14:45

  • Dejaste una espuria s:// en el <link ... línea. De todos modos, no necesitas eso, solo usa URI relativos al protocolo y listo

    – Stefano Sanfilippo

    2 de julio de 2014 a las 15:15


  • Tres años después, la situación ha cambiado. Hoy en día se desaconsejan los URI relacionados con el protocolo, dado que las conexiones seguras son más fáciles de configurar y muy baratas, si no casi gratuitas, para muchos usos comunes. Si puede servir a través de httpsentonces por todos los medios, hazlo.

    – Stefano Sanfilippo

    17 de junio de 2017 a las 12:23


avatar de usuario
daño

Usar URI relativos al protocolo

solo usa un // prefijo. (instead of http[s]://)

  • En una página https, se cargará la versión segura.
  • En una página http simple, se cargará la versión http simple.

Edite su tema reemplazando cada ocurrencia de http://fonts.googleapis.com/... con //fonts.googleapis.com/...

deje que el navegador maneje todas las cosas simplemente elimine ‘http’ de su referencia.

del mismo modo, debe hacerlo con otras bibliotecas también si enfrenta el mismo problema con ellas, por ejemplo

https://fonts.googleapis.com/css?family=Open+Sans:700,600,800,400

a

//fonts.googleapis.com/css?family=Open+Sans:700,600,800,400

igual por

http://maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css

a

//maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css

Me enfrenté a este problema cuando usaba enlaces cdn de Google y que no son accesibles (como un país como China), intente usar archivos locales en lugar de cdns

¿Ha sido útil esta solución?