Navegar dentro del dominio paginas por HTTP o HTTPS

Preguntado hace 1 año

Juan C. Gallardo
Votos
PositivosNegativosTotal
4 0 4
169 Visualizaciones
Compártelo: Compártelo en twitterCompártelo en Facebook

Buenos dias,

Tengo un portal web creado en ASP.NET, el portal funciona correctamente. Hasta aqui todo correcto. Me han pedido que determinadas partes del portal esten accesibles solo por HTTPS. El problema que me he encontrado es que deberia cambiar todos los links relativos porque de lo contrario, al acceder a una pagina que debe ir por HTTPS ya no volveria al protocolo HTTP con lo que temas como google-maps incrustados me dejarian de funcionar si estoy por HTTPS (la key solo vale para HTTP).

Parecio que di con la solucion en esta web http://www.codeproject.com/KB/web-security/WebPageSecurity_v2.aspx , puesto que en mis entornos de Desarrollo y Preproduccion funcionaba todo correctamente. Pero al subir a Produccion, me encontre con un error mostrado por el navegador que decia algo asi como de que habia entrado en un redireccionamiento ciclico. Trasteando y buscando informacion llegamos a la conclusion que la susodicha libreria se podia pegar con ISA Server que casualmente esta instalado en el cliente en cuestion.

En definitiva que no veo solucion al tema salvo revisarme los links relativos y ponerlos como absolutos.

¿Alguien podria aportarme una solucion valida?

Gracias de antemano.

Actualizando datos

2 Respuestas

Hace 1 año

Julián Mur
Editada hace 1 año
Votos
PositivosNegativosTotal
303

Hola, Juan, me pasó algo parecido. Te cuento la solución que le di a ver si te vale (y me llevo la recompensa :)

Efectivamente lo que hago es coger cada link de la página y convertirlo a http, pero no a mano, si no recursivamente, utilizo esta función para buscar los controles

public static List<C> ControlesPorControl<C>(Control pControlContenedor) where C : Control
{
    List<C> controles = new List<C>();
    foreach (Control controlContenido in pControlContenedor.Controls)
    {
        if (controlContenido is C || controlContenido.GetType().IsSubclassOf(typeof(C)))
            controles.Add((C)controlContenido);

        if (controlContenido.Controls.Count > 0)
            controles.AddRange(ControlesPorControl<C>(controlContenido));
    }

    return controles;
}

Luego en el prerender de la página maestra, si se ha marcado que para esa página hay que convertir a http

foreach (HtmlAnchor enlace in Utilidades.ControlesPorControl<HtmlAnchor>(this))
{
    enlace.HRef = Utilidades.ResolverUrl(enlace.HRef); 
}
foreach (ScriptReference script in this.ScriptManagerMaster.Scripts)
{
     if (script.Path.ToLower().StartsWith("http:"))
            script.Path = script.Path.ToLower().Replace("http", "https");
}

Y en utilidades la función para resolver las urls. Como ves la raiz la tomo de un parámetro de base de datos.

public static String ResolverUrl(String pUrlRelativa)
{
    if (pUrlRelativa.ToLower().StartsWith(DatosParametros.UrlSitioBase.ToLower()))
        return pUrlRelativa;
    if (pUrlRelativa.StartsWith("~"))
        return DatosParametros.UrlSitioBase + pUrlRelativa.Substring(1);
    else
    {
        if (pUrlRelativa.StartsWith("/"))
            return DatosParametros.UrlSitioBase + pUrlRelativa;
        else
            return DatosParametros.UrlSitioBase + "/" + pUrlRelativa;
    }

}
Cerrar

Lo probamos y te digo algo, gracias por el aporte. Juan C. Gallardo hace 1 año

Hace 1 año

Jose Aja

Jose Aja

742Distinciones de oro1Distinciones de plata1Distinciones de bronce7
Votos
PositivosNegativosTotal
202

Yo también tengo un problema con la redirección de http a https aunque no la realizo del modo que detallas. En la página que debe comprobar si el visitante está en https, en el page_load tengo este código:

if (!System.Web.HttpContext.Current.Request.IsSecureConnection)
{
    Response.Redirect(System.Web.HttpContext.Current.Request.Url.AbsoluteUri.Replace("http://", "https://"));
}

El caso es que esto funciona y me redirige correctamente en los entornos de desarrollo y preproducción, pero en producción no funciona.

Si este mismo código lo pongo en un botón en la página y pulso el botón, también funciona la redirección. No se que es lo que provoca que en el page_load no funcione, pero pensé que podría tratarse de alguna configuración del isa server que en el entorno que falla no esté bien puesta. El caso es que no doy con ello.

Cerrar

Tu respuesta

Confirmación

Cerrar

Si sales ahora, perderás los cambios. ¿Estás seguro de querer salir?

Para participar en Babelias, debes estar convenientemente validado. Si ya eres usuario inicia sesión, si no lo eres, te puedes registrar.

Dar una respuesta

Trata de ser descriptivo, usa al menos 25 caracteres