2009-03-06 10 views
7

C# 3.0 ASP.Net 2.0 IIS6ASP.Net (C#) de cómo escribir a HTTPS desde una página HTTP

I tiene una página [no https] regular. Existe el formulario estándar ASP.Net en la página.

Sin embargo, hay dos "áreas" de funcionalidad en la página. Iniciar sesión y "Obtener cotización". La página de inicio de sesión debe enviar a HTTPS, mientras que el resto de la página [incluido el "otro área"] formulario no puede ser HTTPS. En Java [JSP] y Html regular, solo tendríamos dos formas. Uno que se publica en HTTPS y otro que no.

¿Cuál es la forma de manejar esto en ASP.Net [desde una página]. Sé que podría vincular a una página HTTPS login.aspx, pero a la empresa realmente le gustaría el contexto.

¿Alguna idea?

Gracias,

Respuesta

0

Asumo de su contexto, de que está haciendo una cosa o la otra, no ambas al mismo tiempo.

Observe laURB postback de los objetos del botón.
el botón de inicio de sesión puede realizar una devolución de datos a "https://secure.login.com"

El otro botón puede devolverlo a la página.

El problema aquí es que todavía estará publicando los campos de inicio de sesión en la página insegura, lo que significa que no están encriptados y pueden ser olfateados.

La solución rápida y sucia sería tener javascript borrar los campos de inicio de sesión antes de publicar si se presiona el botón "Obtener presupuesto".

2

Puede tener dos formularios en una página aspx. Usted simplemente no puede anidarlos.

En una página que construí, tengo un formulario que se publica en la página y otro que se publica en Google Checkout.

Si tiene que mezclar el contenido de la página, coloque el formulario https en la parte inferior de la página (después de la etiqueta del formulario principal) y llénelo con campos ocultos. Cuando el usuario hace clic en un botón, usa Javascript para asignar valores a los campos ocultos y luego publica el formulario https.

-1

¿No podría simplemente hacer un Response.Redirect ("https://.../Login.aspx"); en el botón de inicio de sesión haga clic en evento.

+0

Jonathan: si hay un Response.Redirect en el evento de botón de inicio de sesión, ¿no es eso ya en la devolución de datos? P.ej. el nombre de usuario y la contraseña habrían sido enviados en texto claro? –

0

¿Las páginas HTTP y HTTPS están en el mismo servidor/son parte de la misma aplicación?

Si es así, quizás pueda usar el método Server.Transfer() para mantener el formulario intacto pero también tener el HTTPS.

0

En ASP.Net 3.5 (quizás SP1 - olvide si estaba en la biblioteca base o en el SP) ahora puede establecer el atributo "acción". Pero eso lo haría publicar en HTTPS para ambos 'formularios'.

Si desea tener ambos formularios en la misma página y determinar a qué publicar en 'tiempo de ejecución', tendrá que hacerlo con el código del lado del cliente. Haga que los manejadores de los clientes en todos los objetos que desencadenan respaldos de correos o enganche en la función _dopostback (o lo que se llame) a la pereza para buscarlos, y haga que compruebe qué botón se presionó. Si la página no es segura, borre primero los datos en los campos de inicio de sesión. Luego active manualmente la devolución de datos usted mismo a la página correcta.

2

Puede hacer una publicación manual a través del código utilizando el objeto HttpWebRequest para el evento de inicio de sesión y luego escribir la respuesta devuelta a la transmisión del usuario.

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(webRequest.URL); 
request.UserAgent = UserAgent; 
request.ContentType = ContentType; 
request.Method = "POST"; 

// Write your bytes of the login section here 
Stream oStream = request.GetRequestStream(); 
oStream.Write(webRequest.BytesToWrite, 0, webRequest.BytesToWrite.Length); 
oStream.Close(); 

// Send the request and get a response 
HttpWebResponse resp = (HttpWebResponse)request.GetResponse(); 

// Read the response 
StreamReader sr = new StreamReader(resp.GetResponseStream()); 

// return the response to the screen 
string returnedValue = sr.ReadToEnd(); 

    sr.Close(); 
    resp.Close(); 

    Response.Write(returnedValue); 
3

La solución es utilizar asp.net para especificar una "página de devolución de datos cruzada", es decir, que el usuario la propiedad PostBackUrl de cualquier botón de control (LinkButton, Botón, ImageButton etc.). Esta propiedad te permite publicar de nuevo en cualquier página que te guste. Simplemente configure su PostBackUrl en la versión https de su página y estará listo (también asegúrese de que no haya redireccionamientos de URL activos que fuercen a http en su página).

// ensure we send credentials over a secure connection 
if (!HttpContext.Current.Request.IsSecureConnection) 
{ 
    string postbackUrl = HttpContext.Current.Request.Url.AbsoluteUri.Replace("http", "https"); 
    LinkButton_Login.PostBackUrl = postbackUrl; 
} 

En su caso específico se debe configurar uno de los botones para enviar de nuevo a la versión https, y el otro a la versión HTTP (si no se especifica el PostBackUrl el valor predeterminado es para colocar de nuevo a la la misma página como está).

+0

Dadas las respuestas en esta página, no es de extrañar que la web sea un lugar tan inseguro. ¡Debería pasar el rato en cafeterías y olfatear paquetes más a menudo! Buena respuesta, por cierto, casi la única que realmente mantiene la seguridad (¡si no un poco hacky!) –

Cuestiones relacionadas