simple erreur due à l'utilisation de guillemets dans un fichier jsp
J'ai la ligne suivante de code dans un Fichier JSP dans mon application web qui donne une erreur:
<jsp:setProperty name="db" property="userName" value="<%=request.getParameter("userName")%>"/>
Le message d'erreur que je reçois est:
org.apache.jasper.JasperException:
/loginbean.jsp(6,59) valeur de l'Attribut
demande.getParameter("nom d'utilisateur") est
cité ", qui doit être échappé
lorsqu'il est utilisé dans la valeur
Ce que j'ai lu sur certains sites, c'est que des personnages comme '
(apostrophe) ou "
(double quote) doivent être préfixés par une séquence d'échappement \
(barre oblique inverse) si elles doivent être utilisées.
Cependant, lorsque j'essaie de le préfixe de la double guillemets autour du mot nom d'utilisateur) avec une barre oblique inverse, j'ai immédiatement obtiens l'erreur suivante- "Caractère Illégal \92 - Unclosed Chaîne Littérale"
Comment puis-je résoudre ce problème?
- Vous avez déjà posé cette question avant: stackoverflow.com/questions/6494283/... Si vous ne pouvez pas l'air de trouver votre posées, veuillez cliquer sur le lien derrière votre nom d'utilisateur dans la barre de navigation supérieure. Il mène à votre profil d'utilisateur, où vous pouvez voir toutes vos questions déjà posées: stackoverflow.com/users/793999/arvind
Vous devez vous connecter pour publier un commentaire.
Vous devez utiliser des guillemets simples sur la
value
paramètre, c'est à dire:ou de définir la
org.apache.jasper.compiler.Parser.STRICT_QUOTE_ESCAPING
paramètrefalse
comme décrit ici:http://blogs.sourceallies.com/2009/10/strict-quote-escaping-in-tomcat/
Si vous ne souhaitez pas modifier vos pages Jsp, il suffit de mettre:
dans votre
{TOMCAT_ROOT}/conf/catalina.properties
fichier. Fonctionne comme un charme!Bravo à partir d'ici.
Si vous utilisez Tomcat 8.5+, la propriété
org.apache.jasper.compiler.Parser.STRICT_QUOTE_ESCAPING=false
ne sera pas reconnu.
J'ai été en mesure de définir la propriété avec succès dans
{TOMCAT_ROOT}/conf/web.xml
par adjonction, dans la<servlet>
bloc:servlet
éléments dansweb.xml
. Vous devez placer au-dessus de lainit-param
élément dans le<servlet-name>jsp</servlet-name>
Cela peut être corrigé avec un IDE Regexp Remplacer:
Pour le remplacement de texte, entrez:
$1'$2'
L'exemple ressemble à un XSS exemple! C'est une faille de sécurité.
Je vous suggère de mettre en place une bibliothèque de codage html comme c:out tag ou http://owasp-esapi-java.googlecode.com/svn/trunk_doc/latest/org/owasp/esapi/Encoder.html#encodeForHTMLAttribute%28java.lang.String%29
Je suggère également de prendre le nom d'utilisateur à partir d'une session authentifiée, et pas la forme de la demande param si possible (sauf si c'est un login/formulaire d'inscription uniquement!)
si vous utilisez un " comme scriplet séparateur, vous ne pouvez pas utiliser certains comme une propriété délimiteur dans getParameter. Donc changer le séparateur de scriptlet par '.Comme elle le paramètre tag, je pense qu'il 'll être pas de problème. Sinon, remplacer :
value="<%=request.getParameter("nom")%>"/>
par :
value= " <%=request.getParameter("nom")%> " />
J'cas Jasper JSP phase de validation est utilisé lors de la phase de construction.
Depuis Tomcat 8 il y a un nouvel attribut strictQuoteEscaping pour tâche Ant et un commutateur -no-strictQuoteEscaping pour l'exécution de org.apache.jasper.JspC en ligne de commande.