3

AntiXssLibrary 4.0を使用していますが、\x3cをエスケープしていません。私の間違いは何ですか?

ここhttp://haacked.com/archive/2010/04/06/using-antixss-as-the-default-encoder-for-asp-net.aspxHttpEncoderに基づいて、AntiXssをデフォルトに構成し、の。_encoderTypehttpRuntimeweb.config

非推奨ではなく、AntiXSSEncoder派生したものも作成しますHttpEncoder

output.Write(AntiXss.HtmlEncode(value));

HtmlEncodeこれを使用してメソッドをオーバーライドします。

output.Write(Encoder.HtmlEncode(value));

現在、これを閲覧すると:

http://localhost:28453/?k=sss\x3cscript\x3ealert%28\x27haaha\x27%29;\x3c/script\x3e

アラート「haaha」は、AntiXssライブラリが機能していないことを示しています。この番組のようにhttp://channel9.msdn.com/Events/MIX/MIX10/FT05を13分で見たいだけです。

確認するために、これもアクションで設定します。

    public ActionResult Index(string k)
    {
        ViewBag.k = k;
        ViewBag.j = Microsoft.Security.Application.Encoder.HtmlEncode(k);
        return View();
    }

次に、ビューにこれを置きます:

<script type="text/javascript">
    $(document).ready(function () {
        var a = '@ViewBag.k';
        var b = '@ViewBag.j';
    $('.resultName:first').html(b);
});
</script>

ブラウザからの値aとbは同じであり、AntiXssがうまく機能していないことを示しています。

<script type="text/javascript">
    $(document).ready(function () {
        var a = 'sss\x3cscript\x3ealert(\x27haaha\x27);\x3c/script\x3e';
        var b = 'sss\x3cscript\x3ealert(\x27haaha\x27);\x3c/script\x3e';
        $('.resultName:first').html(b);
    });
</script>

更新AntiXssEncoder:エンコーダタイプとして使用した場合にのみ発生しました。これにコメントして再構築すると。一重引用符'はMVCによってエスケープされました。AntiXssが無効になっているようです!私は何かが足りないのですか?\ x3cもビデオのようにエスケープしたいので、これを機能させたいです。

<!--<httpRuntime encoderType="AntiXSSEncoder, MVCWeb"/>-->
4

1 に答える 1

7

4.0 .NETはアポストロフィをHTMLEncodeにエンコードしているので、AntiXSSはエンコードしていません。厳密に言えば、HTML文字列には必要なく、属性文字列にのみ必要だからです。

エンコーダーとしてAntiXSSを交換すると、その仮定はもはや適用されず、人々は意地悪に、あらゆる場所にHtmlエンコーディングを適用します。

したがって、AntiXSSの次のバージョンをプッシュすると、常にアポストロフィがエンコードされます。

于 2011-04-01T04:52:39.310 に答える