1

我有未受保护的具有 XSS 漏洞的 JSP。我需要将所有${...}不在标签内的字符串替换<c:out value="${...}" /><c:out value="${...}" />.

例如,

<select>
   <option value="${foo}">label</option>
</select>    
${bar}
<c:out value="${message}" />

需要正则表达式替换为以下内容:

<select>
   <option value="<c:out value="${foo}" />">label</option>
</select>    
<c:out value="${bar}" />
<c:out value="${message}" />
4

2 回答 2

0

听起来您的起始文本中混合了<c:out value="${...}" />${...}。如果是这种情况,你可以尝试这样的事情:

str = str.replaceAll(
             "(?:<c:out\\s+value=\")?\\$\\{([^}]*)\\}(?:\"\\s*/>)?", 
             "<c:out value=\"\\${$1}\" />"
      );

我对我的 Java 正则表达式语法有点生疏,所以请检查我的反斜杠是否正确。否则,我认为这会奏效。

于 2012-04-25T21:37:20.590 回答
0

正则表达式不是需要上下文时使用的工具。<c:out value="${...}" />但是,通过首先替换to的所有实例,${...}然后替换所有${...}to ,分两步完成就足够简单了<c:out value="${...}" />

常用表达

\${[^}]+}
<c:out value="\${[^}]+}" />
于 2012-04-25T21:37:22.897 回答