我想将Microsoft AntiXss库用于我的项目。当我使用Microsoft.Security.Application.Encoder.HtmlEncode(str)
函数在我的网页中安全地显示某些值时,它会编码我认为安全的波斯语字符。例如,它会将لیست
转换为لیست
。我使用了错误的功能吗?我该如何安全地在页面中打印用户输入?
我目前正在使用它:
<h2>@Encoder.HtmlEncode(ViewBag.UserInput)</h2>
答案 0 :(得分:1)
我想我搞砸了! Razor视图会对值进行编码,除非您使用@Html.Raw
对吗?好吧,我编码了字符串,然后再次编码。所以最后它只被编码了两次,因此看起来奇怪的字符(Unicode值)!
答案 1 :(得分:0)
如果您的编码(假设默认情况下为Unicode
)支持Farsi
,则可以安全地使用Farsi
,而无需任何额外工作,ASP.NET MVC
几乎总是如此。< / p>
首先,输入转义是错误的 - 您已经采取了一些输入并应用了一些与该数据完全无关的转换。从用户收到数据后立即对数据进行编码通常是错误的。您应该将数据以纯视图存储到数据库中,并仅在将数据显示给用户时并根据当前系统的可能漏洞对其进行编码。例如,'危险的'html字符对于SQL或android等不是“危险的”,这是在将数据存储在服务器中时不应对数据进行编码的主要原因之一。还有一个原因 - 当你对字符串进行html编码时,你的字符串的字符数增加了6-7倍。对于字符串长度的服务器约束,这可能是一个问题。当您将数据存储到sql服务器时,您应该只为它进行转义,验证,清理数据并仅防止其漏洞(如sql注入)。
现在对于ASP.NET MVC和razor,你不需要对你的字符串进行html编码,因为它是默认情况下完成的,除非你使用Html.Raw()但通常你应该避免使用它(或者在使用它时使用html编码)。此外,如果您对数据进行双重编码,则会导致输出损坏:)
我希望这有助于清除你的想法。