2

私は AntiXSS (4.3.0) を使い始めたばかりで、主にここで@Encoder.JavaScriptEncode説明されているように使用します。

Nuget から AntiXSS をインストールし、Web.config に追加encoderType="Microsoft.Security.Application.AntiXssEncoder, AntiXssLibrary"しました。<httpRuntime

私の見解では、次の行があります(<script>タグ内):

var userId = @Encoder.JavaScriptEncode(User.Identity.GetUserId());

私が出力することを期待するもの

var userId = 'user-id';

代わりに出力します:

var userId = &#39;user-id&#39;;

これは、Razor が HTML をサニタイズしようとしていて、単一引用符を としてエンコードしているためだと思います&#39;

解決策は、それを でラップすることですHtml.Raw()が、私がフォローしていた投稿では、彼はそれを決して行いません (代わりに、Javascript 内ですべてを一重引用符で囲みます)。

私の質問は - に電話する必要@Html.Raw(Encoder.JavaScriptEncode(data))があるのですか、それとも私の設定に何か問題がありますか?

ありがとう!

4

1 に答える 1

4

かみそりのエンコーディングに関するあなたの仮定は正しいです。また、あなたがフォローしていた投稿も正しいと思います (私は間違っているかもしれませんが、投稿全体を読んでいません)。

それ以外の

var userId = @Encoder.JavaScriptEncode(User.Identity.GetUserId());

試す

var userId = '@Encoder.JavaScriptEncode(User.Identity.GetUserId(), emitQuotes: false)';
//optionally surround with '' if your userId needs to be a string

あるいは単に

var userId = @Encoder.JavaScriptEncode(User.Identity.GetUserId(), emitQuotes: false);
// Visual Studio gives you a red squiggly syntax error after the semi-colon though.
// From your example, if it is a number, then no quotes are required

Html.Raw()または次のように進みます

var userId = Html.Raw(@Encoder.JavaScriptEncode(User.Identity.GetUserId());

Opionated:私が好む emitQuotes: false は、そのオプションが存在し、別の関数呼び出しの必要性を排除するためHtml.Raw()です。emitQuotesのデフォルトは true です。emitQuotesパラメータがありませんか、それとも意図的なものですか?

于 2014-07-22T14:20:06.520 に答える