2017-03-11 5 views
7

.NET Core MVCアプリケーションのユーザーがコメントを追加する際に、javascriptを削除する必要があることがわかりました。これまでのフレームワークでは、まず文字列をJavaScriptStringEncodeに渡すことでこれを実現できました。.NET Core 1.1のHttpUtility.JavaScriptStringEncodeに相当する部分はどこですか?

var comment = HttpUtility.JavaScriptStringEncode(model.Comment); 

しかし、私は.netコアでこれを見つけることができませんでした。

答えて

4

@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でこれを調達しました。ここ

7

.NETコアにおけるHttpUtility.JavaScriptStringEncodeと同等である:

using System.Text.Encodings.Web; //part of System.Text.Encodings.Web nuget package 
... 

var encodedText = JavaScriptEncoder.Default.Encode("TextToEncode"); 
関連する問題