簡體   English   中英

如何正則表達式替換$ {…}的所有出現<c:out value=“${…}” />

[英]How to regex-replace all occurrences of ${…} by <c:out value=“${…}” />

我有帶有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}" />

聽起來您的起始文本中混合了<c:out value="${...}" />${...} 如果是這樣,您可以嘗試如下操作:

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

我對Java regex語法有些生疏,因此請檢查我是否正確使用了反斜杠。 否則,我認為這會起作用。

正則表達式不是需要上下文時使用的工具。 但是,只需將兩個<c:out value="${...}" />實例替換為${...} ,然后將所有${...}替換為兩個步驟,就足夠簡單到<c:out value="${...}" />

常用表達

\${[^}]+}
<c:out value="\${[^}]+}" />

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM