我正在尝试使用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扩展,但我想知道是否有一个安全可靠的方法呢?
答案 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: <script>I Ğ Ü İ Ş Ç Ö ö ç i ş ü ğ ı ü ğ p ı o . ö ö ç ı ı n ü ğ ş a l e r t''\'(x)</script>
我的扩展类如下,你可以选择逐个替换字符(方法SafeHtmlV2)或者使用数组(方法SafeHtml),
public static class MyHelper
{
public static MvcHtmlString SafeHtml(this HtmlHelper html, string input)
{
string[] decodeItems = new string[] { "ü", "ö", "ç", "Ü", "Ç", "Ö" };
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("ü", "ü")
.Replace("ö", "ö")
.Replace("ç", System.Net.WebUtility.HtmlDecode("ç"))
.Replace("Ü", System.Net.WebUtility.HtmlDecode("Ü"))
.Replace("Ç", System.Net.WebUtility.HtmlDecode("Ç"))
.Replace("Ö", System.Net.WebUtility.HtmlDecode("Ö"));
return new MvcHtmlString(str);
}
}