次のコンテキストで JavaScript を適切にエンコードするにはどうすればよいですか。
<html>
...
<script type="text/javascript">
var settings = @Html.PleaseEncode(settings.ToJson());
// ...
</script>
</html>
JSON オブジェクトの値はアプリケーション管理者が設定するので、HTML と JavaScript の両方で適切にエンコードする必要があると思います。
JSONエンコーディングを行うためにSystem.Web.Script.Serialization.JavaScriptSerializerを使用しています。<None>
JavaScriptSerializer は、テキストを として出力するときに何らかのエンコードを行っているように見えますが\u003cNone\u003c
、それがどれほど安全かはわかりません。現在、@Html.Raw
安全な入力があれば動作するので使用しています。以下を生成します。
var settings = {"UnselectedReason":"None Selected", /*...*/};
私が使用する@Html.Encode
と、次のようになります。
var settings = {&quot;UnselectedReason&quot;:&quot;None Selected&quot;, /*...*/};
AntiXSSの有無にかかわらず試してみましたが、どちらの方法でも違いは見られません。