@Json.Serialize
と表示されているhelperがあります。それは考慮にStartup.csで構成された任意の書式オプションを取って、JSON.Netを使用しています。
var foo = @Json.Serialize(model);
ベア心の中でこのがデフォルトによってJSONをXSSは、サニタイズしません!
@using Newtonsoft.Json
...
var foo = @Json.Serialize(model, new JsonSerializerSettings { StringEscapeHandling = StringEscapeHandling.EscapeHtml });
あなたは多分@Json.SafeSerialize
か@SafeJson.Serialize
のような独自のヘルパーにそれをラップすることができます。しかし、あなたがEscapeHtml
としてJSON.NetのStringEscapeHandling
オプションを指定して、それを行うことができますオーバーロードを使用することができます。
私はスタートアップでJSON形式のオプションをこのように動作するようにデフォルトJsonOutputFormatterを強制することなく、独自のヘルパーより良い方法を発見していない:
services.AddMvc().AddJsonOptions(opts => opts.SerializerSettings.StringEscapeHandling = StringEscapeHandling.EscapeHtml)
後者のアプローチの問題(と、なぜあなたがかもしれませんカスタムヘルパーを好む)は、APIから返されたJSONにも影響します。
PS。私はgithubでこれを調達しました。ここ