Pregunta

necesito utilizar variables ocultas en mi JSP para el seguimiento de la sesión. Este es el código:

<input type="hidden" name="REQ_TOKEN" value="<%=session.getAttribute("SESN_TOKEN").toString()%>" />

Estoy usando esto para comparar la señal de petición con el token de sesión, por lo que sólo cuando ambos son iguales que evaluará dicha petición de lo contrario voy a tirar un error.

Ahora el problema es, cuando coloco el código dentro de las etiquetas <form></form>, que está funcionando bien. Por desgracia, hay algunas páginas JSP en mi solicitud en la que no tiene etiqueta <form> (Sé que suena raro!). ¿Dónde puedo poner mi código para que funcione?

¿No puedo utilizar variables ocultas y sin etiqueta <form>?

¿Fue útil?

Solución

Parece que el valor oculto que está describiendo es lo que más comúnmente se refiere como un nonce, que (al hablar de los formularios web) es un valor que se utiliza para verificar que un formulario se envía una sola vez y por el mismo sesión que solicita el formulario. Ver estas notas sobre la prevención entre sitios de falsificación de petición .

En primer lugar, ¿cómo se presenta solicita sin <form>? Es simplemente el usuario hace clic en un enlace? Si es así, se puede añadir el valor de uso único para la cadena de consulta, pero si usted está usando peticiones GET para algo destructivo que realmente requiere la verificación de un nonce, lo estás haciendo mal. Estos tipos de solicitudes sólo deben realizarse a través POST, lo que implica la generación de una <form method="post">.

En segundo lugar, no, no se puede utilizar <input type="hidden" /> exterior de una forma. Una forma dada solamente presenta sus propios valores, es decir, elementos entre <form> y </form>.

Si usted quiere que su valor oculto que se incluirán en los datos que están siendo enviados de vuelta, su debe incluir la entrada oculta dentro de la forma de ser presentado. Si, como usted dice, no se puede incluir las etiquetas <form> necesarios en los archivos JSP, se podía dinámicamente hacer la solicitud a través de Javascript, pero esto introduce una dependencia de Javascript que se debe evitar por algo tan simple y fundamental.

Otros consejos

Por lo que yo sé es necesario tener el campo oculto en una etiqueta de formulario para que funcione correctamente. Todavía estás arriba, se repost. Los sitios hasta ahora que he encontrado dicen que deben estar dentro de la forma.

EDITAR * roseindia.net/jsp/jspsession/HiddenForm

Si es sólo para la prevención de CSRF, entonces no se necesita en absoluto en las páginas sin forma. Simplemente porque no hay nada para proteger :) El punto es incluirlo en cada <form method="post">, no en cada web .

Dicho esto, "el seguimiento de sesión" es un concepto totalmente diferente. El HttpSession ya que hace exactamente detrás de las escenas con ayuda de una galleta o la reescritura de URL. Es por eso que he encontrado tu pregunta inicialmente confuso y ha publicado un comentario de aclaración. Aquí sólo quiere "seguimiento petición" con la ayuda de una solicitud basada en token que se almacenan en el ámbito de sesión (y eliminar de inmediato una vez que la solicitud ha pasado) para que pueda prevenir CSRF.

Actualizar : se puede encontrar esta respuesta útil para aprender más acerca de lo que realmente es CSRF.

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