【问题标题】:Is there a better way than AllowHtml attribute to allow user to input < followed by a letter in textbox ASP.NET MVC有没有比 AllowHtml 属性更好的方法来允许用户在文本框 ASP.NET MVC 中输入 < 后跟一个字母
【发布时间】:2017-05-04 10:15:21
【问题描述】:

我看到这种方法允许在用户输入字段中使用 html: https://www.codeproject.com/Articles/995931/Preventing-XSS-Attacks-in-ASP-NET-MVC-using-Valida

但我需要的是不允许 HTML,我只需要用户能够输入

对于这种情况,没有比 [AllowHtml] 更好的解决方案了吗?

【问题讨论】:

    标签: c# asp.net-mvc razor


    【解决方案1】:

    如果您担心安全问题。保留 [AllowHtml] 属性,然后清理应用了 [AllowHtml] 属性的特定属性。

    我个人使用HtmlSanitizer,你可以从 NuGet 获得

    pm > Install-Package HtmlSanitizer
    

    下面的示例用法来自他们实际的 GitHub 页面(上面链接)。

    var sanitizer = new HtmlSanitizer();
    var html = 
        @"<script>alert('xss')</script><div onload=""alert('xss')""" +
        @"style=""background-color: test"">Test<img src=""test.gif""" +
        @"style=""background-image: url(javascript:alert('xss')); margin: 10px""></div>";
    
    var sanitized = sanitizer.Sanitize(html, "http://www.example.com");
    
    Assert.That(sanitized, Is.EqualTo(@"<div style=""background-color: test"">"
        + @"Test<img style=""margin: 10px"" src=""http://www.example.com/test.gif""></div>"));
    

    【讨论】:

      【解决方案2】:

      如果您正在清理服务器上的输入(通常在 ASP.NET 中默认情况下),您可以在提交表单之前在视图中使用一点 Javascript 来编码 HTML 字符。

      function Encode(text)
      {
          var e = document.createElement("div");
          e.innerText = e.textContent = text;
          text = e.innerHTML;
          return text;
      }
      
      console.log(Encode("<asd"));
      

      您可以在提交表单之前使用onsubmit事件替换元素值。

      以下是实际代码示例:https://jsfiddle.net/496zz5hv/3/

      【讨论】:

      • 如果这是唯一的检查,看起来服务器将取决于用户不是恶意的。始终在服务器上进行清理。
      • @ErnodeWeerd 感谢您的提醒(更新了我的答案),尽管我希望 OP 不会在此方法中使用 AllowHtml 属性。
      • 我投了赞成票,因为客户对输入的操作可以引导我找到一个好的方法。但是您建议的这种特定操作会使用户输入不可读。例如,我的用户可以输入一个数学公式 a
      • @cnom 在示例中仅显示在提交表单时。您可以将其传递给 Hidden 元素,然后将其传递给服务器。 .NET 还提供了对 HTML 进行解码和编码的能力(您可以在服务器端执行此操作)msdn.microsoft.com/en-us/library/7c5fyk1k(v=vs.110).aspx
      猜你喜欢
      • 2011-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-20
      相关资源
      最近更新 更多