我有没有保护的JSP,它们有XSS漏洞。我需要用${...}
替换<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}" />
答案 0 :(得分:0)
听起来您的起始文字中混合了<c:out value="${...}" />
和${...}
。如果是这种情况,你可以尝试这样的事情:
str = str.replaceAll(
"(?:<c:out\\s+value=\")?\\$\\{([^}]*)\\}(?:\"\\s*/>)?",
"<c:out value=\"\\${$1}\" />"
);
我的Java正则表达式语法有点生疏,所以请检查我是否有正确的反斜杠。否则,我认为这将有效。
答案 1 :(得分:0)
正则表达式不是在需要上下文时使用的工具。但是,通过先将<c:out value="${...}" />
的所有实例替换为${...}
,然后将所有${...}
替换为<c:out value="${...}" />
,可以分两步完成。
正则表达式
\${[^}]+}
<c:out value="\${[^}]+}" />