Asp.net Encoder.HtmlEncode编码波斯语字符

Asp.net Encoder.HtmlEncode编码波斯语字符,asp.net,asp.net-mvc,security,xss,antixsslibrary,Asp.net,Asp.net Mvc,Security,Xss,Antixsslibrary,我想在我的项目中使用这个库。当我使用微软.Security .Aptudio.Actudio.HtmlEncode(STR)函数来安全地显示网页中的某个值时,它对我认为安全的法思字符进行编码。例如,它将转换为لیست。我是否使用了错误的函数?我应该如何安全地打印页面中的用户输入 我目前的使用方式如下: @Encoder.HtmlEncode(ViewBag.UserInput)我想我搞砸了!Razor视图对值进行编码,除非您使用@Html.Raw对吗

我想在我的项目中使用这个库。当我使用<代码>微软.Security .Aptudio.Actudio.HtmlEncode(STR)函数来安全地显示网页中的某个值时,它对我认为安全的法思字符进行编码。例如,它将
转换为
لیست。我是否使用了错误的函数?我应该如何安全地打印页面中的用户输入

我目前的使用方式如下:


@Encoder.HtmlEncode(ViewBag.UserInput)

我想我搞砸了!Razor视图对值进行编码,除非您使用
@Html.Raw
对吗?嗯,我对字符串进行了编码,它又对它进行了编码。所以最后它只被编码了两次,因此,奇怪的字符(Unicode值)

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

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

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


我希望这能帮助你理清思路。

好吧,你的第一个假设是错误的。我没有在输入后立即应用它,正如您所看到的,我试图在输出用户输入之前进行编码。这就是这种方法的确切用法。您应该对用户的输入进行编码,否则您将对自己的代码进行编码,这很愚蠢!至于第二部分,我在自己的回答中提到了为什么我这样做是错误的,但非常感谢你的回答。