ASP.NET MVC或者.net Core mvc 页面使用富文本控件的 保存问题

Posted luoeast

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ASP.NET MVC或者.net Core mvc 页面使用富文本控件的 保存问题相关的知识,希望对你有一定的参考价值。

https://blog.csdn.net/leftfist/article/details/69629394

 

 

目前在做的项目存在XSS安全漏洞!

原因是有一些页面使用了富文本编辑框,为了使得其内容可以提交,为相关action设置了[ValidateInput(false)] 特性:

        [HttpPost]
        [ValidateInput(false)]
        public ActionResult MailPreview(FormCollection collection)
       
            return View();
       

    1
    2
    3
    4
    5
    6

但问题来了,同一页面还有其他字段内容,现在html、js脚本都能提交,不再受限,要么提交的时候全部都检查,否则就有XSS漏洞。我在某个文本框里输入<script>alert(0);</script>,提交成功后,页面展示提交内容,居然执行了!

所以说,千万小心不能轻易开启这个[ValidateInput(false)] 特性。我觉得根本就不应该开启。可以酱紫:

    public class MailVM
   
        public string Title get; set;
        public string Time get; set;
        [AllowHtml]
        public string Mess get; set;
   

    1
    2
    3
    4
    5
    6
    7

针对这个实体类的单个字段设置 [AllowHtml] ,这样提交的时候,系统就会放过该字段。

问题是,action不能使用 FormCollection 来接收提交数据,而应该使用实体类。否则[AllowHtml]特性不起作用。究其原理,这种检查应该是系统的过滤器在拦截,你一个FormCollection,过滤器怎么着力?所以,上面的代码应改为:

        [HttpPost]
        public ActionResult MailPreview(MailVM model)
       
            return View();
       

    1
    2
    3
    4
    5

用实体类当然没有FormCollection灵活,不过对于这种特定场合,还是必须的。特别提一下,实体类可以只在提交的时候使用,页面输出时并不要求绑定实体类,页面的文本框等控件,也不一定要写成 @Html.TextBoxFor 这种形式。只需要

        [HttpPost]
        public ActionResult MailPreview(MailVM model)
       
            ……
       

    1
    2
    3
    4
    5

系统会自动按照model来装配提交数据。
---------------------
作者:左直拳
来源:CSDN
原文:https://blog.csdn.net/leftfist/article/details/69629394
版权声明:本文为博主原创文章,转载请附上博文链接!

以上是关于ASP.NET MVC或者.net Core mvc 页面使用富文本控件的 保存问题的主要内容,如果未能解决你的问题,请参考以下文章

asp.net core mvc权限控制:分配权限

asp.net core mvc 里的application中的start,end等事件

ASP.NET Core MVC 中两种路由的简单配置

ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 14. ASP.NET Core Identity 入门

c# – Asp.Net Core MVC中Request.IsAjaxRequest()在哪里?

ASP.NET Core 配置 MVC - ASP.NET Core 基础教程 - 简单教程,简单编程