Publicación insegura desde un control asp.net en una página segura mientras se evita la autenticación

Estamos utilizando la autenticación de formularios asp.net estándar. Ciertas páginas requieren que el usuario inicie sesión; y al menos algunas de estas páginas son entregadas por https. Hay un control de búsqueda en la parte superior de cada página. Cuando se usa esto, no nos importa si la sesión del usuario ha expirado, incluso si la página actual requiere un inicio de sesión.

Sin embargo, actualmente, al realizar la búsqueda, la autenticación integrada de formularios ve que la página que se está enviando requiere autenticación y redirige al usuario a la página de inicio de sesión, con la página anterior, no la página de resultados de búsqueda como el referente.

¿Cuál es la mejor manera de eludir la seguridad aquí? He considerado publicar en una página diferente utilizando la propiedad PostBackUrl, pero si esto no es https, aparece el mensaje "está publicando datos en una conexión no segura", que no les gusta a los usuarios.

Gracias por cualquier ayuda.

Editar: gracias Nick por su sugerencia de utilizar un GET en la página de búsqueda. Ya estamos haciendo esto, pero la cadena de consulta está construida por el control de entrada de búsqueda y luego redirige. ¿Cómo podemos construir la cadena de consulta sin usar una devolución de datos? (Obviamente JavaScript es una opción, pero esperaba encontrar un mecanismo alternativo).

3

3 Respuestas

Para la página de búsqueda, quiere asegurarse de que la búsqueda se realice a través de una solicitud GET. (es decir, como Google con la "q" en la cadena de consulta) Es probable que esté haciendo una POST.

Así que cambia tu

<form method="post" ...>

a

<form method="get" ...>

The biggest mistake most developers make with search pages is ado a post back. HTTP was designed ado queries or searches through the query string (thus the name), and aget a form apost aa query string instead of the body you need ause a "GET" method. This way any search device can use your search page, even the browsers search box.

Second you want acreate a special location config for you search page. You add this ayour web.config.


    
        
            
        
    

This creates a special override for that one page and everything inside the location tag uses the exact same web.config structure aoverride the web.config.

You will want arepeat this for each page you want aallow all users to.

2
agregado

Si la página de resultados de búsqueda está realizando una devolución de datos, el evento de carga de página se activará antes de que se haga clic en el botón de búsqueda.

Por lo tanto, si la página en la que se encuentran requiere un inicio de sesión, el comando de inicio de sesión se ejecutará antes de que el botón de búsqueda haga clic en el evento enviándolos nuevamente a la pantalla de inicio de sesión.

Hay algunas formas de hacer que la búsqueda sea una forma html normal y hacer que funcione un GET no un POST y mencionado por "Nick"

Si la página completa está dentro de un formulario de devolución de .net, deberá agregar el evento del botón de búsqueda a una sobrecarga de la carga de la página para que se active primero.

This site has a good article on the page like cycle and its overrides. http://www.15seconds.com/issue/020102.htm

1
agregado

Como se sugiere en otras respuestas, la forma más correcta de hacer esto sería tener el control de entrada de búsqueda en una forma separada que tenga un método de obtención y una acción de searchresults.aspx. Sin embargo, esto es difícil con aspx, ya que solo puede tener una forma de servidor en una página.

Al final, la solución a la que llegué, que funciona muy bien, fue tener un HttpModule que se detectaba si se hacía clic en el botón "buscar" (al buscar para ver si existía un parámetro con su id) y luego se creaba una cadena de consulta por buscando los parámetros de los criterios y redirigido a la página de resultados de búsqueda. Esto significa que todos los módulos de autenticación/autorización se omiten ya que hemos llamado una redirección a la página de resultados de búsqueda (no segura) antes de que se activen.

Es un poco frágil, pero para nosotros funciona muy bien.

0
agregado