C# 带有AntiXSS保护的ASP.Net MVC Html.Raw

C# 带有AntiXSS保护的ASP.Net MVC Html.Raw,c#,asp.net,asp.net-mvc,asp.net-mvc-4,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,我想在java脚本变量中显示用户内容 与所有用户生成的内容一样,我希望在输出之前对其进行清理 默认情况下,ASP.Net MVC在这方面做得很好: @{ var name = "Jón"; } <script> var name ='@name';</script> 这很好,因为它可以保护我不被用户在他们的名字中加入和邪恶的东西,玩愚蠢的游戏 在上面的例子中,我希望邪恶的人保持理智,但我不想用HTML编码UTF8有效字符,这些字符不是邪恶的 我希望输出为: Jón

我想在java脚本变量中显示用户内容

与所有用户生成的内容一样,我希望在输出之前对其进行清理

默认情况下,ASP.Net MVC在这方面做得很好:

@{
  var name = "Jón"; 
}
<script> var name ='@name';</script>
这很好,因为它可以保护我不被用户在他们的名字中加入
邪恶的东西
,玩愚蠢的游戏

在上面的例子中,我希望邪恶的人保持理智,但我不想用HTML编码UTF8有效字符,这些字符不是邪恶的

我希望输出为:

Jón
但我还需要编码提供的XSS保护

除了使用白名单框架(即Microsoft.AntiXSS)之外,是否有任何内置的MVC函数在这里有所帮助

更新:

看起来这似乎实现了一些看起来很有用的东西:

@{
  var name = "Jón"; 
}
<script> var name ='@Html.Raw(HttpUtility.JavaScriptStringEncode(name))';
@{
var name=“Jón”;
}
var name='@Html.Raw(HttpUtility.JavaScriptStringEncode(name));

这能防止大多数XSS攻击吗?

您必须编写自己的编码器或找到另一个第三方编码器。ASP.NET中的默认编码器倾向于通过编码多于可能需要的内容来提高安全性

话虽如此,请不要写自己的编码器!编写正确的HTML编码例程是一项非常困难的工作,只适合那些具有特定高级安全专业知识的人

我的建议是使用内置的,因为它是正确的,而且非常安全。虽然它可能会产生不太理想的HTML输出,但您还是安全的


现在,请注意以下代码:

@Html.Raw(HttpUtility.JavaScriptStringEncode(name))

不正确且不安全,因为使用JavaScript编码路由来呈现HTML标记无效。

我不呈现HTML标记。我正在呈现一个Javascript变量。为清晰起见,对问题进行了调整。假设它已停止使用Microsoft.AntiXss库。
@Html.Raw(HttpUtility.JavaScriptStringEncode(name))