0

まず第一に、これは今のところ問題なく機能しているように見える単なる POC です。基本的に、この種のソリューションについてどう思うか知りたいです。

問題:

私はこのアプリに多くの EL コードを使用していますが、これまでのところ、XSS エラーを防止することになっています (ただし、修正する唯一のものという意味ではありません) には、EL コンテキストでの XSS の防止のみが含まれます。

以下のコードは jsp ページにあります。

This is your car color ${car.color}

car オブジェクトは次のように設定されます。

ModelAndView mv = new ModelAndView("page3");
String xss = "<script>window.alert('XSS!!');</script>";
Car c = new Car(xss);
mv.addObject("car", c);
return mv; 

このようにして、警告メッセージがポップアップするはずです。ここでは何も新しいことはありません...

私の提案(これは機能しています)は次のとおりです

This is your car color${car.color.preventXSS}

これは、すべての文字列に preventXSS プロパティを「追加」するようなものです (文字列クラスは変更していません)。基本的に次のようなカスタム EL リゾルバーを使用してこれを実現しています。

try {
    value = context.getELResolver().getValue(context, base, property);
} catch (PropertyNotFoundException e) {
    if ((base instanceof String) && property.equals(PREVENT_XSS)) {
        context.setPropertyResolved(true);
        value = ESAPI.encoder().encodeForHTML(base.toString());
    }
}

この場合、'base' には値が<script>window.alert('XSS!!');<;/script> あり、'PREVENT_XSS' は EL 式の最後のプロパティである 'preventXSS' の定数です。

ところで、私は XSS を処理するために OWASP esapi エンコーダーを使用しています。必要に応じて、encodeForHTMLAttribute や OWASP の esapi がサポートする他の多くのエンコーディングを追加することで改善できます。

注 1: EL 関数を使用して同じことを達成できることはわかっていますが、すべてのページに jsp taglib ディレクティブを含めることなく、'property' preventXSS を追加したかっただけです。

c:out注 2: jstl タグについても知っています。

4

1 に答える 1

0

ええ、あなたが提案している解決策は機能しますが、EL 標準に従っていないという事実のために、追加のプロパティがメンテナンス時に混乱する可能性があるという問題が 1 つあります。Spring MVC を使用している場合は、XSS を防ぐために次のアプローチを検討できます。

参考1

参考2

参考3

于 2012-12-20T01:32:11.233 に答える