0

我想为我的项目使用Microsoft AntiXss库。当我使用该Microsoft.Security.Application.Encoder.HtmlEncode(str)功能在我的网页中安全地显示某些值时,它会对我认为安全的波斯语字符进行编码。例如,它转换لیستلیست. 我使用了错误的功能吗?我应该如何安全地在我的页面中打印用户输入?

我目前正在这样使用它:

<h2>@Encoder.HtmlEncode(ViewBag.UserInput)</h2>

4

2 回答 2

1

我想我搞砸了!除非您使用正确,否则 Razor 视图会对值进行编码@Html.Raw?好吧,我对字符串进行了编码,然后它再次对其进行了编码。所以最后它只是被编码了两次,因此看起来很奇怪的字符(Unicode 值)!

于 2014-07-04T15:35:09.787 回答
0

如果您的编码(假设它是Unicode默认的)支持它几乎总是Farsi可以安全使用Farsi,无需任何额外的努力。ASP.NET MVC

首先,输入时转义是错误的——您已经接受了一些输入并应用了一些与该数据完全无关的转换。从用户那里收到数据后立即对数据进行编码通常是错误的。您应该将数据以纯视图存储到数据库中,并仅在向用户显示数据时并根据当前系统可能存在的漏洞对其进行编码。例如,“危险”的 html 字符对于 SQL 或 android 等来说不是“危险的”,这就是为什么在将数据存储在服务器中时不应该对数据进行编码的主要原因之一。还有一个原因 - 当您对字符串进行 html 编码时,您的字符串的字符数会增加 6-7 倍。这可能是服务器对字符串长度的限制的问题。

现在对于 ASP.NET MVC 和 razor,您不需要对字符串进行 html 编码,因为默认情况下它已完成,除非您使用 Html.Raw() 但通常您应该避免它(或在使用时进行 html 编码)。此外,如果您对数据进行双重编码,您将导致输出损坏:)

我希望这将有助于您理清思路。

于 2014-07-04T16:31:35.313 回答