Inicio > Seguridad, SSL, Web > SSL. La página Web que está abriendo contiene tanto elementos seguros como no seguros.

SSL. La página Web que está abriendo contiene tanto elementos seguros como no seguros.

Cuando trabajamos con páginas SSL es bastante molesto encontrarse con un mensaje del navegador indicando que “La página Web que está abriendo contiene elementos seguros como no seguros. ¿Desea mostrar los elementos no seguros?”

Este mensaje además de molesto – sale siempre – resulta cuanto menos “inquietante” y puede provocar que más de un usuario salga inmediatamente de nuestro sitio Web. Algo especialmente grave si se trata de un sitio web dedicado a la venta online.

¿Como evitarlo?. Para responder a esta pregunta lo primero que debemos saber en porque se está produciendo. Este mensaje se muestra cuando dentro de un entorno SSL (protocolo https) existe alguna petición http. Es decir, en nuestra página hay elementos apuntado a una URL absoluta con protocolo http. Estos elementos pueden ser imagenes, scripts, css …

Un ejemplo claro es cuando incluimos una pelicula flash en nuestra página, por defecto, el enlace incluye una redirección a la página de adobe para descargar el reproductor en el caso de que no lo tengamos instalado. Ese enlace es absoluto a través de http – por lo que provoca el molesto error.

Este sería un enlace a una pelicula flash tipico:

 

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" 

codebase="http://download.macromedia.com/.../swflash.cab#version=5,0,0,0" 

width="516" height="76" id="ShockwaveFlash1">

	<param name="movie" value="mipelicula.swf"/>

	<param name="quality" value="high"/> 

	<param name="bgcolor" value="#000000"/>

</object> 

Este enlace no muestra ningún error cuando estamos sobre un entorno http – tipicamente el entorno de desarrollo -, pero cuando pasamos a un entorno https – producción – muestra el mensaje debido al enlace http://download.macromedia.com/…/swflash.cab#version=5,0,0,0 que contiene.

En este caso la solucion es sencilla, bastará con quitar el enlace http la etiqueta.

 

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" 

width="516" height="76" id="ShockwaveFlash1">

	<param name="movie" value="mipelicula.swf"/>

	<param name="quality" value="high"/> 

	<param name="bgcolor" value="#000000"/>

</object>

Pero no siempre es tan fácil solucionar el error. Cuando no podemos o no queremos eliminar el enlace – por ejemplo un javascrit – tendremos que recurrir a otros métodos.

Por ejemplo, cuando utilizamos Google Analytics, tenemos que incluir el siguiente script en nuestra página.

	<script src="http://www.google-analytics.com/urchin.js" 

		type="text/javascript"></script>

En este caso necesitaremos programar una página intermedia – que se trasmita por https – y que realice la solicitud a la dirección http y devuelva el mismo contenido. En nuestro caso, utilizamos ASP.NET por lo que nuestra página es aspx – pero la idea es válida para cualquier entorno web php, jsp, RoR …

 

	<script src="GetScript.aspx" 

		type="text/javascript"></script>

Y nuestra página GetScript.aspx (debemos incluir una directiva using System.Net;):

 

 protected void Page_Load(object sender, EventArgs e)

 {

	string httpUrl = "http://www.google-analytics.com/urchin.js";

	WebRequest httpRequest = WebRequest.Create(httpUrl);

	WebResponse httpResponse = httpRequest.GetResponse();

	System.IO.Stream webStream = httpResponse.GetResponseStream();

	System.IO.StreamReader reader = 

		new System.IO.StreamReader(webStream );

	string html = reader.ReadToEnd();

	

	Response.Write(html); 

 }

En el caso de que la conexion salga a través de un servidor proxy:

 

 protected void Page_Load(object sender, EventArgs e)

 {

	string httpUrl = "http://www.google-analytics.com/urchin.js";

	WebRequest httpRequest =WebRequest.Create(httpUrl);

	

	// En el caso de utilizar un servidor proxy

	IWebProxy proxy = WebRequest.GetSystemWebProxy();

	if (proxy != null && proxy.Credentials != null)

	{

		httpRequest.Proxy = proxy; 

	}

	else

	{

		proxy = new WebProxy("<servidor proxy>:<puerto>");

		NetworkCredential credenciales = 

			new NetworkCredential("<usuario>", "<clave>");

		proxy.Credentials = credenciales;

		httpRequest.Proxy = proxy;

	}

	WebResponse httpResponse = httpRequest.GetResponse();

	System.IO.Stream webStream = httpResponse.GetResponseStream();

	System.IO.StreamReader reader = 

		new System.IO.StreamReader(webStream);

	

	string html = reader.ReadToEnd();

	Response.Write(html); 

 }

Finalmente, si lo que queremos es “rizar el rizo”, en lugar de utilizar una página – que entre otros inconveniente tiene que ejecuta su ciclo de vida completo – sería mejor utilizar un manejador http.

Para eso, creamos nuestro propio manejador de peticiones como se muestra a continuación.

 

<%@ WebHandler Language="C#" Class="Handler" %>

 

using System;

using System.Web;

using System.Net;

 

public class Handler : IHttpHandler {

 public void ProcessRequest (HttpContext context) 

 {

	context.Response.ContentType = "text/javascript";

	context.Response.Write(GetData()); 

 }

 private string GetData()

 {

	string httpUrl = "http://www.google-analytics.com/urchin.js";

	WebRequest httpRequest = WebRequest.Create(httpUrl);

	// En el caso de utilizar un servidor proxy

	IWebProxy proxy = WebRequest.GetSystemWebProxy();

	if (proxy != null && proxy.Credentials != null)

	{

		httpRequest.Proxy = proxy;

	}

	else

	{

 

		proxy = new WebProxy("<servidor proxy>:<puerto>");

		NetworkCredential credenciales = 

			new NetworkCredential("<usuario>", "<clave>");

		proxy.Credentials = credenciales;

		httpRequest.Proxy = proxy;

	}

	WebResponse httpResponse = httpRequest.GetResponse();

	System.IO.Stream webStream = httpResponse.GetResponseStream();

	System.IO.StreamReader reader = 

		new System.IO.StreamReader(webStream);

	string html = reader.ReadToEnd();

	

	return html;

 }

public bool IsReusable 

 {

	get {

	return false;

	}

 }

}

Luego definimos una extension de archivo – en nuestro caso jsx – , incluimos el manejador en el web.config y cambiamos el enlace de la página para que apunte a un recurso .jsx

 

 <httpHandlers> 

	<add verb="GET" path="*.jsx" validate="false" type="Handler"/>

 </httpHandlers>
	<script src="GetScript.jsx" type="text/javascript"></script>

Saludos,

Fuente: http://www.devjoker.com/contenidos/Articulos/410/La-p%C3%A1gina-Web-que-est%C3%A1-abriendo-contiene-tanto-elementos-seguros-como-no-seguros.aspx

Categorías:Seguridad, SSL, Web Etiquetas: , ,
  1. Aún no hay comentarios.
  1. No trackbacks yet.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: