我发现自己需要使用.Net Core MVC应用程序中的用户添加的评论来清除javascript。在以前的框架中,这可以通过首先将您的字符串传递给JavaScriptStringEncode来实现。
Intent origIntent = getIntent().getParcelableExtra(EXTRA_ORIGINAL_INTENT);
Intent redirectIntent = new Intent(origIntent); // copy ...
redirectIntent.setClass(this, SomeActivity.class); // ... explicit now
finish();
startActivity(redirectIntent);
但是,我还没能找到.net核心中的等价物。
答案 0 :(得分:13)
以下是.net核心中的HttpUtility.JavaScriptStringEncode
的等价物:
using System.Text.Encodings.Web; //part of System.Text.Encodings.Web nuget package
...
var encodedText = JavaScriptEncoder.Default.Encode("TextToEncode");
答案 1 :(得分:4)
视图中有一个helper可用@Json.Serialize
。它使用JSON.Net,考虑在Startup.cs中配置的任何格式选项:
var foo = @Json.Serialize(model);
请记住,默认情况下不会对json进行XSS消毒!但是,您可以使用重载来执行此操作,将JSON.Net的StringEscapeHandling
选项指定为EscapeHtml
:
@using Newtonsoft.Json
...
var foo = @Json.Serialize(model, new JsonSerializerSettings { StringEscapeHandling = StringEscapeHandling.EscapeHtml });
您可以将其包装到自己的帮助程序中,例如@Json.SafeSerialize
或@SafeJson.Serialize
。
我没有找到比你自己的助手更好的方法,而没有强迫默认的JsonOutputFormatter以这种方式通过Startup中的json选项来表现:
services.AddMvc().AddJsonOptions(opts => opts.SerializerSettings.StringEscapeHandling = StringEscapeHandling.EscapeHtml)
后一种方法的问题(以及您可能更喜欢自定义帮助程序的原因)是它也会影响从API返回的JSON。
PS。我在github上提出了这个问题。
答案 2 :(得分:2)
您可以使用相同的方法,如剃刀上的示例所示使用它:
@System.Web.HttpUtility.JavaScriptStringEncode(YourStringHere)