2012-04-25 4 views
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}" /> 
+0

通常それはかなり逆だ -

+0

@EugeneRetunsky '

+0

@Eugene:これを読んでください:http://stackoverflow.com/questions/2658922/xss-prevention-in-java/2658941#2658941おそらくあなたはJSPを後継のFaceletsと混同しています。テンプレートテキストのELは、実際に暗黙的にエスケープされます。 – BalusC

答えて

0

ご出発のテキストがそれに<c:out value="${...}" />${...}の混合物を持っているように聞こえます。その場合は、あなたがこのような何かを試みることができる:

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

を私は自分のJavaの正規表現の構文に少しさびたので、私は、バックスラッシュが右持っていることを確認してください。さもなければ、私はそれがうまくいくと思います。

0

正規表現は、コンテキストが必要なときに使用するツールではありません。しかし、最初に<c:out value="${...}" />のすべてのインスタンスを${...}に置き換えて、次にすべて${...}<c:out value="${...}" />に置き換えることによって、2つのステップで行うのは簡単です。

正規表現

\${[^}]+} 
<c:out value="\${[^}]+}" /> 
関連する問題