如何以安全的方式编码çöü?

时间:2014-12-25 11:43:38

标签: c# asp.net-mvc razor encoding special-characters

我正在尝试使用c#MVC Razor实现土耳其语内容管理器。

我知道我可以使用@Html.Raw(model.content)来获取非编码文本,但这也会产生一些安全问题,Xss,注入等。

相反,如果我只是使用@model.content直接显示文本,我会得到以下html源代码,我认为这也会产生SEO问题

@model.content outputs : ......güvece dökün.......

原文是

@Html.Raw(model.content) outputs : ......güvece dökün.......

如何避免mvc对charcter进行编码并同时保持html安全?

  

ç,ü,ö

当然我可以创建自己的html扩展,但我想知道是否有一个安全可靠的方法呢?

1 个答案:

答案 0 :(得分:2)

正如我在提问时提到的,我使用html helper extesion

对其进行了整理
   @{
    string v = "<script>I Ğ Ü İ Ş Ç Ö ö ç i ş ü ğ ı ü ğ p ı o . ö ö ç ı ı n ü ğ ş a l e r t'\'\\'(x)</script>";
        @Html.SafeHtml(v);
        @Html.SafeHtmlV2(v);
    }

//code above outputs: &lt;script&gt;I Ğ Ü İ Ş Ç Ö ö ç i ş ü ğ ı ü ğ p ı o . ö ö ç ı ı n ü ğ ş a l e r t&#39;&#39;\&#39;(x)&lt;/script&gt

我的扩展类如下,你可以选择逐个替换字符(方法SafeHtmlV2)或者使用数组(方法SafeHtml),

public static class MyHelper
{
    public static MvcHtmlString SafeHtml(this HtmlHelper html, string input)
    {
        string[] decodeItems = new string[] { "&#252;", "&#246;", "&#231;", "&#220;", "&#199;", "&#214;" };
        string str = System.Net.WebUtility.HtmlEncode(input);
        foreach (string s in decodeItems)
        {
            str = str.Replace(s, System.Net.WebUtility.HtmlDecode(s));
        }
        return new MvcHtmlString(str);
    }

    public static MvcHtmlString SafeHtmlV2(this HtmlHelper html, string input)
    {
        string str = System.Net.WebUtility.HtmlEncode(input).Replace("&#252;", "ü")
               .Replace("&#246;", "ö")
               .Replace("&#231;", System.Net.WebUtility.HtmlDecode("&#231;"))
               .Replace("&#220;", System.Net.WebUtility.HtmlDecode("&#220;"))
               .Replace("&#199;", System.Net.WebUtility.HtmlDecode("&#199;"))
               .Replace("&#214;", System.Net.WebUtility.HtmlDecode("&#214;"));
        return new MvcHtmlString(str);
    }

}