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

StackOverflow https://stackoverflow.com/questions/201796

  •  03-07-2019
  •  | 
  •  

Pregunta

Estamos utilizando la autenticación de formularios asp.net estándar. Ciertas páginas requieren que un 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 de formularios incorporada ve que la página que se publica 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 usando la propiedad PostBackUrl, pero si esto no es https, obtienes el " estás publicando datos en una conexión no segura " mensaje, que a los usuarios no les gusta.

Gracias por cualquier ayuda.

Editar: gracias Nick por su sugerencia de usar 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).

¿Fue útil?

Solución 3

Como se sugiere en otras respuestas, la forma más correcta de hacerlo 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 un formulario del lado del servidor en una página.

Al final, la solución a la que llegué, que funciona muy bien, era tener un HttpModule que detectara si la " búsqueda " se hizo clic en el botón (al ver si existía un parámetro con su ID) y luego se creó una cadena de consulta buscando los parámetros y se redirigió 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 ya 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.

Otros consejos

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

Así que cambia tu

<form method="post" ...>

a

<form method="get" ...>

El error más grande que cometen la mayoría de los desarrolladores con las páginas de búsqueda es hacer una publicación posterior. HTTP fue diseñado para hacer consultas o búsquedas a través de la cadena de consulta (por lo tanto, el nombre), y para obtener un formulario para publicar en una cadena de consulta en lugar del cuerpo, necesita usar un "GET". método. De esta forma, cualquier dispositivo de búsqueda puede usar su página de búsqueda, incluso el cuadro de búsqueda del navegador.

En segundo lugar, desea crear una configuración de ubicación especial para usted página de búsqueda Agregas esto a tu web.config.

<location path="my-search-page.aspx">
    <system.web>
        <authorization>
            <allow users="*" />
        </authorization>
    </system.web>
</location>

Esto crea una anulación especial para esa página y todo dentro de la etiqueta de ubicación usa exactamente la misma estructura web.config para anular la web.config.

Deberá repetir esto para cada página que desee permitir a todos los usuarios.

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

Entonces, si la página en la que se encuentran requiere un inicio de sesión, ese comando de inicio de sesión se ejecutará antes del evento de clic del botón de búsqueda y los enviará nuevamente a la pantalla de inicio de sesión.

Hay algunas maneras de evitar que esto haga que la búsqueda sea un formulario html normal y que realice un OBTENER, no un POST y que sea mencionado por " Nick "

Ort si toda la página está dentro de un formulario de devolución de datos .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.

Este sitio tiene un buen artículo en la página como ciclo y sus anulaciones. http://www.15seconds.com/issue/020102.htm

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top