Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
允许在MVC4中使用一些html标记_Html_.net_Asp.net Mvc_Asp.net Mvc 4 - Fatal编程技术网

允许在MVC4中使用一些html标记

允许在MVC4中使用一些html标记,html,.net,asp.net-mvc,asp.net-mvc-4,Html,.net,Asp.net Mvc,Asp.net Mvc 4,如何允许客户端在MVC4中使用html标记? 我想将记录保存到数据库,当它在视图中提取时,只允许一些HTML标记(),其他标记必须表示为文本 我的控制器: [ValidateInput(false)] [HttpPost] public ActionResult Rep(String a) { var dbreader = new DataBaseReader(); var text = Request["repor

如何允许客户端在MVC4中使用html标记? 我想将记录保存到数据库,当它在视图中提取时,只允许一些HTML标记(),其他标记必须表示为文本

我的控制器:

    [ValidateInput(false)]
    [HttpPost]
    public ActionResult Rep(String a)
    {
            var dbreader = new DataBaseReader();
            var text = Request["report_text"];
            dbreader.SendReport(text, uid, secret).ToString();
           ...
    }
我的看法是:

@{
    var dbreader = new DataBaseReader();
    var reports = dbreader.GetReports();
    foreach (var report in reports)
    {

           <div class="report_content">@Html.Raw(report.content)</div>
           ...

    }
}
@{
var dbreader=newdatabasereader();
var reports=dbreader.GetReports();
foreach(报告中的var报告)
{
@Html.Raw(report.content)
...
}
}

关闭报告文本的验证(1)并编写自定义HTML编码器(2):

第1步:

Request.Unvalidated().Form["report_text"]
更多信息。您不需要关闭整个控制器操作的验证

第二步:

Request.Unvalidated().Form["report_text"]

编写自定义html编码器(将除b、i、img之外的所有标记转换为例如:script->;ltscript;gt),因为您正在自定义请求验证和html标记筛选的默认行为。考虑通过检查传递给存储过程/函数的SQL参数等来保护自己免受SQL注入攻击。

< P>如果您正在尝试查看视图模型对象的某些属性以接受HTML文本,请使用

在绑定到视图之前

model.UserComment=model.UserComment.Replace("<othertagstart/end>",""); //hard
model.UserComment=model.UserComment.Replace(“,”)//坚硬的

您可以将所有<字符替换为HTML实体:

tags = tags.Replace("<", "&lt;");
tags=tags.Replace(“,”)
.替换(“/b>”,“”)
.替换(“i>”,“”)
.Replace(“/i>”,“”)

.Replace(“img”),“您可能想签出BBCode。这样您就可以控制哪些是允许的,哪些是不允许的,并防止非法使用

这将像这样工作:

  • 用户提交类似于“会议现在将在[b]星期一举行”[/b]的内容
  • 在将其保存到数据库之前,请删除所有真正的html标记(“<…>”),以避免使用非法标记或代码注入,但保留伪标记不变
  • 查看时,仅将允许的伪html标记转换为真实html

  • 我找到了问题的解决方案:

                html = Regex.Replace(html, "&lt;b&gt;(.*?)&lt;/&gt;", "<b>$1</b>");
                html = Regex.Replace(html, "&lt;i&gt;(.*?)&lt;/i&gt;", "<i>$1</i>");
                html = Regex.Replace(html, "&lt;img(?:.*?)src=&quot;(.*?)&quot;(?:.*?)/&gt;", "<img src=\"$1\"/>");
    
    html=Regex.Replace(html,“b(.*?/”,“$1”);
    html=Regex.Replace(html,“i(.*?)/i”,“$1”);
    html=Regex.Replace(html,“img(?:*?)src=“(*?)”(?:*?/”,“”);
    
    我没有得到你想要的,你能补充一些进一步的解释吗?你是否在
    @Html.Raw
    中遇到错误?不,我没有收到错误,但现在我的站点易受XSS攻击
                html = Regex.Replace(html, "&lt;b&gt;(.*?)&lt;/&gt;", "<b>$1</b>");
                html = Regex.Replace(html, "&lt;i&gt;(.*?)&lt;/i&gt;", "<i>$1</i>");
                html = Regex.Replace(html, "&lt;img(?:.*?)src=&quot;(.*?)&quot;(?:.*?)/&gt;", "<img src=\"$1\"/>");