error simple debido al uso de comillas dobles en un archivo jsp


Tengo la siguiente línea de código en un archivo JSP en mi aplicación web que está dando un error:

<jsp:setProperty name="db" property="userName" value="<%=request.getParameter("userName")%>"/>

El mensaje de error que recibo es:

Org.apache.jaspe.JasperException: / loginbean.valor del atributo jsp (6,59) solicitud.getParameter ("Nombre de usuario") es citado con " que debe ser escapado cuando se utiliza dentro del valor

Lo que he leído en algunos sitios es que caracteres como ' (comilla simple) o " (comilla doble) deben ir precedidos de un escape sequence \ (barra invertida) si se van a utilizar.

Sin embargo, cuando intento prefijar las comillas dobles (alrededor de la palabra userName) con barra invertida, inmediatamente obtengo el siguiente error:"Illegal Character \92 - Unclosed String Literal"

¿Cómo resuelvo este problema?

Author: Brad Mace, 2011-06-28

7 answers

Debe usar comillas simples en el parámetro value, es decir:

value='<%=request.getParameter("userName")%>'

O establezca el parámetro org.apache.jasper.compiler.Parser.STRICT_QUOTE_ESCAPING en false como se describe aquí:

Http://blogs.sourceallies.com/2009/10/strict-quote-escaping-in-tomcat /

 47
Author: ryanprayogo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-06-28 03:43:34

Si no desea modificar sus JSPs, simplemente establezca:

org.apache.jasper.compiler.Parser.STRICT_QUOTE_ESCAPING=false

En su archivo {TOMCAT_ROOT}/conf/catalina.properties. Funciona como un encanto!

Felicitaciones desde aquí.

 6
Author: mppfiles,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-07-16 17:14:35

Si está utilizando Tomcat 8.5+, la propiedad org.apache.jasper.compiler.Parser.STRICT_QUOTE_ESCAPING=false no será reconocido.

Pude establecer la propiedad correctamente en {TOMCAT_ROOT}/conf/web.xml agregando lo siguiente dentro del bloque <servlet>:

<init-param>
    <param-name>strictQuoteEscaping</param-name>
    <param-value>false</param-value>
</init-param>
 6
Author: Dump Cake,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-20 18:37:07

Esto se puede arreglar con un reemplazo de expresiones regulares IDE:

(<\w+:(?:[^>]|<%=[^%]+%>)+=)"([^<"]*<%=[^%]*"[^%]*%>[^"]*)"

Para el texto de reemplazo, ingrese:

$1'$2'

 4
Author: Stephan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-04-28 01:40:56

El ejemplo se parece a un ejemplo XSS! Esta es una vulnerabilidad de seguridad. Sugiero poner en marcha una biblioteca de codificación html como c: out tag o http://owasp-esapi-java.googlecode.com/svn/trunk_doc/latest/org/owasp/esapi/Encoder.html#encodeForHTMLAttribute%28java.lang.String%29

También sugiero tomar el nombre de usuario de una sesión autenticada y no formar el parámetro de solicitud si es posible (a menos que este sea solo un formulario de inicio de sesión/registro!)

 1
Author: DavidC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-07-17 08:51:03

Si usa un " como delímetro de scriplet, no puede usar el some como delimitador de propiedades en getParameter. Así que cambie el delímetro de scriptlet por'. Como parámetro de etiqueta, creo que no habrá ningún problema. En caso contrario sustitúyase:

Value=""/>

Por:

Value=''/>

 0
Author: Salim Hamidi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-09-26 10:08:59

I case Jasper JSP validation phase se utiliza durante la compilación del proyecto.

Desde Tomcat 8 hay un nuevo atributo strictQuoteEscaping para la tarea Ant y un conmutador -no-strictQuoteEscaping para ejecutar org.apache.jaspe.JspC desde la línea de comandos.

 0
Author: Vadzim,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-17 10:56:14