使用URL编码C#/ASP.NET保护文本框输入

使用URL编码C#/ASP.NET保护文本框输入,c#,asp.net,asp.net-mvc,security,C#,Asp.net,Asp.net Mvc,Security,我目前的雇主将产品说明以HTML格式存储在数据库中,以便在我们的在线目录中使用。例如,这种类型的东西通常被存储: <strong>Book 1</strong><br /><em>This book will help you know the things.</em> 然后显示在MVC页面上 @Html.Raw(Model.ProductDescription) 不幸的是(或幸运的是),当这些用户将尖括号和其他标记保存在文本框中时

我目前的雇主将产品说明以HTML格式存储在数据库中,以便在我们的在线目录中使用。例如,这种类型的东西通常被存储:

<strong>Book 1</strong><br /><em>This book will help you know the things.</em>
然后显示在MVC页面上

@Html.Raw(Model.ProductDescription)
不幸的是(或幸运的是),当这些用户将尖括号和其他标记保存在文本框中时,事情会在他们身上爆炸,因为文本不是URL编码的。我正在考虑只对文本框输入进行编码的选项,但我担心的是,人们可能会保存大量JavaScript代码,而这些代码可能会被转储到页面上

string productDescription = WebUtility.UrlEncode(tbxDescription.Text);
因此,我的问题分为两部分:

  • 从技术角度来看,我担心在这里输入脚本对吗

  • 如果是这样的话,有没有一种普遍接受的方法来处理这个问题,即允许基本的HTML格式标记,而无需向页面中插入恶意代码


  • 还有一条背景信息:我并不十分担心我们的业务人员恶意将不好的东西插入我们的数据库或粘贴在网页上。我更担心的是,这些用户是其他类型攻击的受害者。无论如何,我都不是安全专家,所以尽我所能去理解风险是不够的。有很多方法可以在其中注入Javascript

    我个人使用的。 它根据元素和属性的白色列表检查HTML内容。这个列表也可以很容易地扩展,但是你必须知道在这种情况下你到底在做什么

    使用起来真的很简单。在使用Nuget安装它之后

    你可以简单地:

    var sanitizedHtml = new HtmlSanitizer().Sanitize(<Unsatnizied_HTML_Content>);
    
    var sanitizedHtml=new-HtmlSanitizer().Sanitize();
    
    此外,OWASP中也提到了它。您可以在以下链接中找到它:
    这还不够。有很多方法可以在其中注入Javascript

    我个人使用的。 它根据元素和属性的白色列表检查HTML内容。这个列表也可以很容易地扩展,但是你必须知道在这种情况下你到底在做什么

    使用起来真的很简单。在使用Nuget安装它之后

    你可以简单地:

    var sanitizedHtml = new HtmlSanitizer().Sanitize(<Unsatnizied_HTML_Content>);
    
    var sanitizedHtml=new-HtmlSanitizer().Sanitize();
    
    此外,OWASP中也提到了它。您可以在以下链接中找到它:

    1)是2)使用所谓的html消毒剂机制清除html并只允许白名单上的标记是一种普遍接受的方法。如果可能,请在存储到数据库之前使用它,否则至少在显示之前使用它。也许这个会有帮助。1) 是2)一种普遍接受的方法是使用所谓的html消毒剂机制来清理html,并且只允许白名单上的标记。如果可能,请在存储到数据库之前使用它,否则至少在显示之前使用它。也许这个会有帮助。